PLC编程实用指南(第3版)
上QQ阅读APP看书,第一时间看更新

1.3 PLC程序数据

数据是PLC处理信息的载体,是PLCPOU的重要组成部分。可以这么说,没有数据也就没有PLC的程序。PLC程序数据有地址、变量、常量等。

1.3.1 地址

地址是指PLC软器件。是PLC操作系统划分与管理的内存区。用于存储PLC程序数据。并使用与电器相关的含义命名,如某某继电器、某某定时器、某某计数器,某某数据存储器等。其实,这些都只是内存区中的一个位、字节或字。这些位、字节、字的值,即代表着这些器件的状态。也正是在物理上这些器件只是内存区的位、字节、字或位,所以才称之为软器件。

PLC软器件分为I/O软器件与内部软器件。

PLC技术的发展,其软器件的类型及数量,特别是内部器件现已大为增加。所以,不少PLC多已不用继电器(RELAY)称谓它了;而改称它为区(AREA);突出了PLC信息处理的功能。

1.I/O软器件

(1)开关量用的输入、输出继电器

开关量用的输入、输出继电器是指可与实际开关量输入、输出模块上的点相对应的那部分内存区。它决定了PLC可能配置的最多I/O(开关量)点数。西门子PLC称其为过程映射寄存器(process-image register),指的也是与输入、输出点有对应关系的内存区。

输入继电器与输入点对应。一般讲,当PLC输入刷新时,输入暂存器的状态即映像到输入继电器中。输入继电器为只读存储器,不能用程序改变它的内容,而只能被输入点的状态所映像。所以无输入点与其对应的,如其地址是固定编排时,一般不能作为它用。

输出继电器与输出点对应。一般讲,当PLC输出刷新时,输出继电器的状态被映像到输出内部电路的锁存器。锁存器把状态保持,直到下一个刷新的到来。锁存器再经输出电路传递,即成为输出点上的输出。输出继电器是可写的,以便产生所要求的输出;也还是可读的,以用于反馈控制。对用户程序,它是可读可写的存储单元。所以,若无输出点与其对应的也可另做他用。

这里的点是指二进制数的一个位(bit),仅1、0两个取值。用它代表开关触点,或继电器的触点及线圈。1代表有关开关触点通(ON)或有关继电器线圈得电(工作、ON)。0代表这个触点断,或这继电器线圈失电(不工作、OFF)。

要使用这些“点”,必须弄清它是怎么编址的。这个编址,各PLC厂商多不尽相同。这也是PLC使用的一个难点。

欧姆龙PLC编址是按字、位计算,先指定字(有时也称通道(channel),但施耐德PLC则把这里的位称通道)地址,再指定在字中的位地址,见图1-11a。

978-7-111-56641-0-Chapter02-14.jpg

图1-11 欧姆龙PLC地址含义

1—字或通道地址 2—位地址(00到15) 3—通道地址 4—位地址0001.03

如地址为0001.03,则表示为0001通道(字)的03位,见图1-11b。

西门子PLC编址是按字节、位计算,先指定字节地址,再指定在字节中的位地址,如图1-12所示。

如图1-12所示,这里地址I3.4,其含义是输入点(I为输入点编址的前缀),3为字节地址,4为字节3中的第4位。如果为输出点,则所加的前缀为“Q”。

三菱PLC的输入(前缀加X)、输出点(前缀加Y)是以位(bit)编址,如图1-13所示。都是从0到可能的最大地址。并按八(对小型机)或十六(对中、大型机)进制进位。但没有字或字节地址。当多位使用时,则应在其前加上使用多少位的指定。如K1X0,指的是X0~X4,4个位。再如K2X0,指的是X0~X7,8个位。其余类推。这样,如按字节、字使用时,虽较麻烦,但也有其灵活性。可使这些点的使用不受字节、字的局限。

978-7-111-56641-0-Chapter02-15.jpg

图1-12 西门子PLC地址含义

978-7-111-56641-0-Chapter02-16.jpg

图1-13 三菱PLC位元件多位使用时的指定

西门子PLC使用字节、位编址。要用字节,则前缀加QB;要用字,则前缀加QW;要用双字,则前缀加QD。但编号仍按字节计。如用QW0,则含有QB0、QB1;用QW2则含QB2、QB3;如用双字时QD0,则含有QB0、QB1、QB2、QB3。可知,如用了QW0,不能再用QW1,否则,QB1地址将重复使用。

和利时PLC开关量I/O软器件地址格式为:先是百分号(%,施耐德等PLC也如此),接着加地址类型标识(输入为I、输出为Q、中间存储区为M),最后为地址编号。地址编号先是位(通道)、字节、字、双字标志,然后加数码号。这里位标志为X,字节标志为B,字标志为W;双字标志为D。当使用“位”地址时,则首先要指定其所在的字节地址,然后再指出其在字节中的位地址。具体方法是用小数表示,整数部分标出是哪个字节,小数部分标出是哪个“位”。如图1-14所示。

如图1-14所示,%IX3.4指的是输入第3字节的第4位。

978-7-111-56641-0-Chapter02-17.jpg

图1-14 和利时PLC地址编号

使用PLC,一定要了解输入、输出继电器的情况。要清楚,它有多少输入输出继电器,怎么编号,与输入、输出点的物理位置怎么对应(在模块上有相应标号)等,否则无法编程,也无法接线。

应该强调的是,不同PLC的I/O编址多不完全一样。为了准确使用这些地址,最好仔细阅读有关说明书。

(2)模拟量I/O地址

除了开关量I/O模块,还有模拟量I/O模块。对欧姆龙公司的模块式PLC,它的编号由其上的机号设定开关设定,与模块安装位置无关。要注意的是,所设的机号不能重复。机号设定后,将指定相应的通道及数据存储器(DM,内部软器件的一种,见后叙述)归其使用。至于这些通道与数据存储器的含义及使用,可参考有关说明书。而欧姆龙公司小型机的模拟量单元,是与开关量单元一样,按安装位置统一编址,不作机号的设定。

三菱PLC模拟量输入、输出模块也是独立编址。用常数K指定模块号及在模块中的通道号。这里的通道是指那一路的模拟量。

西门子公司S7-300PLC模拟量模块与开关量模块都称为信号模块,无单元号。这两种模块都依其所在机架及槽位统一编址。只是模拟量加的前缀为IW(模入)或QW(模出),每一路要占一个字、两个字节。

表1-3表示西门子S7-300机配置4个机架时的编址情况。从表1-3可知,它是定机架、定槽位编址的。如有一个8路的模入模块安装在机架1、槽位6,其各路地址分别为IW416、IW418……直到IW430。如这个槽位安装的是4路模出模块,则其各路地址分别为QW416、QW418、QW420及QW422。如这个槽位安装的是16点开关量输入模块,则其地址为IB40、IB41两个字节。

1-3 S7-300机地址分配

978-7-111-56641-0-Chapter02-18.jpg

应该强调的是,不同PLC的模拟量I/O编址是不完全一样。为了准确使用这些地址,要仔细阅读有关说明书。

(3)其它地址

除了上述地址,还有用于通信等智能模块的数据缓存区。这些多与网络等模块有关。欧姆龙用链接继电器(LR)或可任意指定的一些数据存储器(DM);三菱称用指定的内部继电器(M)、数据存储器(D)、链接继电器(B)及链接寄存器(W);西门子可按有关模块的说明书使用。这些多与所用的模块与网络有关。

总之,I/O软器件总是与PLC使用的各种模块或插件相关,它的CPU就是通过这些软器件读写模块,与这些模块通信。

2.内部软器件

(1)内部辅助继电器

内部辅助继电器的数量一般要比输入、输出继电器多得多。除了用做中间继电器,还用于数据处理。

欧姆龙内部辅助继电器也分配有通道号。每个通道也是16个继电器。可以通道(字)为单位使用,也可以继电器(位)为单位使用。

西门子公司、三菱公司PLC的内部继电器,就加有前缀M。前者是以字节、位编号,多位使用方法同输入、输出继电器;后者与它的输入、输出点类似,也是按位编号,但按十进制进位。多位使用,也与其输入、输出继电器相同。

使用PLC时,对选用的PLC的内部辅助继电器的情况也要弄清楚,否则也无法设计程序。它的数量非常多,为编程提供了很大的方便。

内部辅助继电器有的可设定为掉电保持的,即PLC失电后,其内容保持不变。只是欧姆龙专有此类内部辅助继电器,并特称之为保持继电器,加前缀HR。

(2)定时器

它类似于继电电路用的时间继电器,用于延(定)时控制。它有线圈、有触点(标志位),还有寄存器(存放定时器现值、设定值)。定时的设定值可为常数,也可为某个(字)地址,再用这个地址的内容作为设定值。

对于欧姆龙PLC,当定时器的线圈OFF时,没有输出,其常开触点为OFF,常闭触点为ON,其寄存器的当前值为设定值。当定时器的线圈ON时,它的寄存器的当前值从设定值开始,每经历一个单位设定时间减1。当减到0时,即产生输出,其常开触点从OFF转为ON,常闭触点从ON转为OFF。任何时候,一旦其线圈OFF,其输出立即停止,其常开触点从ON转为OFF,常闭触点从OFF转为ON,寄存器的当前值又变为设定值。

而对三菱、西门子PLC,情况略有不同。当定时器的线圈OFF时,也没有输出,其常开触点为OFF,常闭触点为ON,但其寄存器的当前值为0。当定时器的线圈ON时,它的寄存器的当前值,从0开始,每经历一个单位设定时间加1。当加到设定值时,即产生输出,其常开触点从OFF转为ON,常闭触点从ON转为OFF。任何时候,一旦这线圈OFF,输出立即停止,其常开触点从ON转为OFF,常闭触点从OFF转为ON,寄存器的当前值又变为0。

欧姆龙PLC的设定值用BCD码设定。设定范围为0000~9999。新型机也可用十六进制码,设定范围为0~65535。三菱、西门子PLC均用十六进制码。

普通定时器单位设定时间值为0.1s,故其最大延时可达999.9s,或6553.5s。如高速定时,其单位设定值可能为0.01s、0.001s,故其最大的定时值为99.99s、9.999s,或655.35s、65.535s。如处理成低速定时,其单位设定值可能为1s、1min,故其最大的定时值为9999s、9999min,或65535s、65535min。

这个单位设定时间的不同处理,不同厂商有不同的办法。

欧姆龙是用不同的定时指令处理。用TIM指令时,为100ms,而用TIMH指令时,为10ms,用TIMHH指令时,为1ms。

西门子则用不同的编号处理,有的编号的定时器单位设定时间小,而有的大。如S7-200,其单位时间设定值与定时器编号为

1ms T32,T96

10ms T33~T36,T97~T100

100ms T37~T63,T101~T255

三菱PLC也类似。如FX2N,其单位时间设定值与定时器编号为

1ms T246~T249

10ms T200~T245

100ms T0~T199

以上介绍的定时器是ON延时的。西门子PLC还可用不同指令处理成其它工作方式,如ON即时,而OFF延时等。而如用欧姆龙、三菱PLC要作这样处理,则只好通过程序,用辅助继电器帮助解决。应该指出,PLC定时器的定时控制都是通过程序实现的。由于输入响应延时及扫描工作方式的影响,定时控制不是很准确,可能与设定值差一个扫描周期。扫描时间若大过单位设定值,只有若干个定时器(可中断工作的)才能准确工作。

PLC的定时器多为掉电不保持的,掉电后停止计时,其已计入的值不保留,复电时,再从头计时。但有的也可掉电保持,即可累计计时。视不同的PLC、不同编号及不同的设定而定。

提示:定时器怎么用,与相应的定时指令的使用有关,这在介绍定时指令时还要作进一步说明。有的PLC不用定时器指令,而使用定时功能块,则没有或不用这个定时器。

(3)计数器

它类似于继电电路用的计数器,用于记录脉冲输入信号的数量,即信号从OFF到ON的次数。它有线圈,有触点(标志位),还有寄存器(存放计数器现值)。有两种计数,一为单向计数,二为可逆(双向)计数。

单向计数:有增计数与减计数。欧姆龙PLC单向计数都是减计数。当输入脉冲输入信号从OFF到ON变化一次,计一次数。计数器的寄存器减1。而开始时,计数器的寄存器为设定值,当其值减到零时,则产生输出。其常开触点ON,常闭触点OFF。

西门子PLC单向计数器有增计数的,也有减计数的。当输入脉冲输入信号从OFF到ON变化一次,计一次数,计数器的寄存器增1或减1。对于增计数,其开始时计数器的寄存器的值为0,当增大到等于或大于设定值时,则产生输出(计数仍可进行,直到最大值65535)。其常开触点ON,常闭触点OFF。对于减计数,开始时计数器的寄存器为设定值,当其值减到0时,则产生输出。其常开触点ON,常闭触点OFF。

三菱PLC单向计数则是增计数。当输入信号从OFF到ON变化一次,计一次数。计数器的寄存器增1。而开始时,计数器的寄存器为0,当其值增到设定值时,产生输出。其常开触点ON,常闭触点OFF。并不再计数。

计数器一般都是掉电保持的。即使掉电,计数值也不变。但在任何时候,送入复位信号(ON),计数器的寄存器都恢复成原始状态,并停止计数,不再输出。

除了单向计数器,还有双向,即可逆计数器。欧姆龙、西门子PLC用相应指令实现单向或双向计数功能。而三菱PLC则用编号指定。有的编号只能单向计数,而有的编号可双向计数,并用特殊继电器指定计数方向。同时双向计数总是双字长的(8位十六进制数)。

欧姆龙PLC的设定值、计数值用BCD码设定。范围为0000~9999。但它的新型机也可用十六进制码,设定为0~65535。三菱、西门子PLC均用十六进制码。

提示:计数器怎么用,与相应的计数指令的使用有关,这在介绍计数指令时,还要作进一步说明。有的PLC不用计数指令,而使用计数功能块,则没有或不用这个计数器。

(4)数据存储(寄存)器

PLC进行控制以及计数,总要作一些数据处理,用一些特殊单元时,如模拟量入、模模拟量出单元,还要作一些数据计算。所以,各种PLC也都备有存储大量数据的专门存储单元。欧姆龙PLC用的标号为DM;三菱PLC用的标号为D;西门子的S7-200标号为V。

欧姆龙、三菱PLC的存储器一般按字计(编号)。随着技术的发展,现在PLC的这个存储器容量不断增大。可达几K、几十K,以至于要用兆计。

数据存储器中的位(bit)、数位(digit)、字节(Byte)、字(word)及双字(D)间的关系处理,各PLC厂商是不大一样的。

图1-15a所示为欧姆龙PLC与三菱PLC之间的关系。它的地址以字计。并多以字作为处理单位。没有特定双字概念,两个相邻的字可处理成双字,这时,高位存于高地址,低位存于低地址,并以低位字的地址代表这双字地址。

978-7-111-56641-0-Chapter02-19.jpg

图1-15 字与双字组成

而西门子PLC数据存储器是按字节计(编号)。它讲的数据存储器多少K,都是以字节计。它可以字节为单位使用,使用时用QB加标号标注,如QB0、QB1。也还有字、双字为单位使用,但编号仍以字节计。如用QW0,则含QB0及QB1;用QW2则含QB2及QB3等。如按双字使用,则用QD0(含QW0、QW2)、QD4(含QW4及QW6)等。显然,如用了QW0,再用QW1,则其中的QB1将重复。如不是特殊需要,应避免出现此情况。

而西门子的字、双字存数正好与上述相反,它的高地址、存低位,低地址、存高位。如VB100=11,VB101=22,VB102=33,V103=44,则VW100为1122,VW102为3344,而VD100为11223344。具体见图1-15b。

存储器除了存储数据,还可存字符,一般一个字节存一个字符,按十六进制ASCII码存。这种按字节编号,高、低位数据存储与日本、美国的PLC不同,有其麻烦之处。但它可灵活进行种种转换处理,也有其好处。

提示:数据存储器多用数据处理,故多不能对其中的位(bit)进行逻辑操作。过去,只有西门子PLC可以这么做。如今,欧姆龙、三菱的新型机也可用相应指令进行操作了。

(5)特殊继电器、特殊数据存储器

特殊继电器和特殊数据存储器也是一种内部辅助继电器,只是各有其特殊用途。而且,各厂商PLC或同一厂商PLC不同机型,都不尽相同。大体上这些用途有PLC状态辅助继电器、时钟用辅助继电器、标志用辅助继电器等。很显然,只有对其有相应了解,才能编写好相应程序。表1-4列举部分PLC的部分特殊继电器的编号及其功能。

1-4 部分PLC的部分特殊继电器的编号及功能

978-7-111-56641-0-Chapter02-20.jpg

这样的特殊继电器现在已越来越多了。以欧姆龙的小型机为例,其特殊继电器就有12.5通道(字)、200个继电器。其编号从244开始,直到255的前半个通道。而CJ1机则多得多。故干脆不称其为特殊继电器,而称为标志(Condition Flag,CF)及辅助区(AR)。

西门子的S7-200机也有相应的特殊继电器。它的前缀为SM,称为特殊存储器位。三菱PLC的特殊继电器也不少,如FX机从M8000~M8255都是特殊辅助继电器。这些内容实在太多,详细情况请参看有关说明书。

除了特殊继电器,还有特殊数据存储器,多用其作系统的种种设定。如欧姆龙小型机的DM6600~6614:用作起始处理设定;可把PLC设成起始为编程、运行或监控模式及内部继电器上电时是清零。欧姆龙辅助继电器(AR)大多数也与这个存储器作用相同。

西门子也有很多类似的特殊功能数据存储器,用以实现各种特殊功能。如S7-200机,

它的SM区有近200个字节,除了特殊继电器,还有更多的是用作特殊数据存储器。用于通信、高速计数、定时中断等设定。

三菱的FX机从D8000~D8225的数据寄存器,就是这类特殊的数据存储器。

对这些特殊继电器及存储器,最好备有相应手册,以便使用时查找。好在所有编程软件都有这方面的帮助,编程时可随时查用。所以,这里就不再详细介绍了。

(6)标识(P、I、N)

标识也称为指针,用以标识在程序所标示的指令的地址。这是三菱PLC用的内部器件。在使用跳转指令、调子程序(用P)或使用程序中断(用I)时,要用到它。使用时,把它放在梯形图左母线的外(左)边。

西门子PLC的标识用指令(LBL)指明相应序号实现。仅用于程序跳转。它的子程序调用子程序号。欧姆龙无这样的内部器件,也没有标识一说,它的跳转及子程序调用均使用指令。此外,三菱还有N,用以指定主控指令(见后)的编号。

(7)其它

以上介绍的内部器件,当然不是PLC内部器件的全部。而且,各厂商、各型号PLC的内部器件也不完全相同,有的还有别的什么名称。

再就是西门子中、大型机以及新型的S7-1200小型机没有上述意义上的数据存储器(DM、D或V),只有数据块(DB)。数据块功能很强,用起来也很方便。但必须先定义,然后才能使用。这样处理方法与将要介绍的PLC变量本质上是完全相同的。

了解了PLC的软器件,即PLC的数据存储区,也就了解了PLC指令的操作数。至于这些操作数怎么被指令操作,将在介绍PLC的指令时作具体介绍。

提示:由于篇幅限制,以上只是简要地介绍本书涉及的PLC的一些软器件。而全面、系统地弄清所使用的PLC的软器件,对正确使用该PLC,编写好高质量的PLC程序,是至关重要的。因此,在PLC实际编程过程中,建议要多查阅有关PLC的编程手册,切实把有关软器件弄懂、弄清。

3.间接地址

这与计算机C语言的指针类似,用软器件做指针,其内容作为地址。即实际使用的数是用这个“指针”指向地址的内容,而不是这个“指针”本身的值。具体使用有如下3个办法:

(1)用数据存储器作指针

欧姆龙PLC是用DM。在调用它的DM之前加“∗”或“@”号,即说明为间接地址。前者地址以BCD码计,后者以十六进制计。如“∗DM100”,而DM100的值为十进制数100,则实际地址是DM0100,DM0100的值才是真正的操作数。再如“@DM100”,而DM100的值为十六进制数100,则实际地址是DM0256,DM0256的值才是真正的操作数。

(2)用变址器(或索引寄存器)作指针

变址器也是软器件,但专用作指针,以对PLC软器件作间接访问。如欧姆龙CJ1机共有16个索引寄存器,地址从IR00~IR15。所加的前缀为IR。

提示:索引寄存器为双字长,存储的地址为绝对地址(absolute memory addressesinI/Omemory)。可存字(word)地址,也可存储位(bit)地址。存位(bit)地址时,高7个数位(digit)存字(通道)地址,低数位存储位地址。对其赋值,不能简单地用MOV之类指令,要用相应的地址赋值指令,即MOVB(560)指令。

三菱称之为变址寄存器V及Z,各为16位(bit)。可单独使用(只使用V),也可合起来使用(V上位数,Z下位数,并以Z的地址代表其地址)。用双字时,可访问的数据区几乎不受限制。

(3)用双字做指针

西门子PLC就是这样,用双字先赋值软器件的实际内存地址(被赋值的地址前加&)。然后用这个双字做地址指针,作间接地址。只是在指针前加“∗”。其办法与C语言用的办法相同。只是,它只能以字节为单位访问。

4.符号地址(Symbol)

上述软器件或间接地址的名称主要是前缀字母与数字,看不出它的意义。用它做操作数编写的程序,可读性较差,不易理解。虽然可对其加注,但采用了有一定含义的符号与实际地址(软器件)关联,并在程序中用这个符号地址代表实际地址,则更方便些。

同时,使用符号地址还便于程序更改,如地址变动,可以不改程序,只需重新编辑符号与地址的关联就可以了。此外,使用符号地址还便于程序移植与重用,为用户建立功能库、功能块库或程序库提供了可能。所以,目前PLC编程很少不用符号地址。

使用符号地址的另外还有如下重要好处:

1)可分别定义符号的作用范围,便于程序数据管理。

2)设定数据类型,作高级设定时,还可设定数组,便于程序数据的正确使用。

符号地址是用编程软件中符号编辑器编辑。不同厂商软件有不同的编辑器。但都是用它添加符号名称,确定数据类型,进行地址关联以及必要的加注。这里强调数据类型很重要,因为有了它便于发现地址关联的错误。

1.3.2 变量

变量(Variables),有的也称标签(Tags),是用户自行定义的PLC的内存区。传统PLC只有地址,没有这个变量一说。新型和高档PLC才用有此程序数据。如和利时LECG3机的内存数据区中,有容量很大的全局区(G区)及掉电保持区(R区),只能通过定义变量后才能使用它。再如西门子的S7-300/400机及新型的S7-1200小型机的数据块所用的区域,也是定义后才能使用。还有AB新型PLC就没有所谓的内部软器件,只有用户定义的变量。如果所定义的变量要与I/O实际地址(I/O软器件)关联可使用别名(Alias),即用变量当做硬件地址的别名。其它高档PLC也多是此情况。而且,越是高档或新型PLC,其内部器件越少,但可定义的变量则非常之多。

变量与传统PLC的符号地址不同是,它与实际地址(软器件)可以关联,也可不关联。而符号地址则必须与I/O或内部器件关联。

使用变量取代内部器件地址的好处是比较灵活,可定义的数据类型多,而且PLC的资源还可得到充分利用。这也是当今PLC技术发展一个趋势。

1.变量定义

变量在使用前要先定义。要用标识符命名。根据编程标准,标识符只能由字母、数字和下划线字符的一个串,并且它应以字母或下划线字符开头。不能使用中文。其命名规则取决于具体的PLC。

变量定义时除了命名,还要指明它的类型。如果必要也可与I/O地址关联。变量名称一般要有意义,以便识别与使用。必要时还可加注解。

变量定义要使用编程软件。一般软件都有它的编辑器。有的还可用微软的Excel编辑,然后导入。变量可以预先集中编辑,也可随时使用随时编辑。

2.指针变量

指针是指向变量地址的变量。指针声明的格式为

<指针名>:POINTER TO<数据类型或功能块>;

指针所指向变量的数据类型,可以是系统定义的类型,也可是用户自定义类型,还可以是功能块。

要读取变量的地址,有读取变量地址指令,如和利时PLC用ADR指令,它用于把变量或者功能块的地址赋给指针,例如:

pt:POINTER TO INT; (∗定义指针pt,指向整型数∗)

var_int1:INT:=5;(∗定义整型数int1,初值为5∗)

var_int2:INT;(∗定义整型数int2,初值为默认为0∗)

pt:=ADR(var_int1);(∗读取整型数int1的存储地址∗)

在指针后面加运算符“^”,其含义为指针指向变量的内容(值)。例如继续上例:

var_int2:=pt^;(∗实际上是把var_int1的值赋给var_int2,var_int2也为5∗)

指针是计算机C语言常用的工具。使用得好,可提高程序效率。指针还可用于对即将介绍的数组各成员进行访问。

3.复合变量

除了简单变量,有的PLC还可数组、结构、枚举等类似计算机C语言那样的复合变量。

(1)数组

数组是相同类型数据的集合。有一维、二维和三维数组(不同PLC规则不完全相同)。如和利时PLC其声明格式为

<数组名>:ARRAY[<ll1>..<ul1>,<ll2>..<ul2>]OF<变量类型>.

ll1、ll2、ll3标识字段范围的最小值;ul1,ul2和ul3标识最大值。范围必须是整形的。

如声明以下数组:

Card_game:ARRAY[1..6,1..4]OFINT;

则它的名为“Card_game”,是二维数组,下限都是1,上限分别是6、4。数组中的元素(成员)可用数组名加下标访问。如用矩阵与数组对应,那么一维数组,就相当于一维矩阵;那么二维数组,就相当于二维矩阵;那么三维数组,就相当于三维矩阵。

如上述数组Card_game,为二维数组。用如下的矩阵A对应:

978-7-111-56641-0-Chapter02-21.jpg

即,A的每个元素都有两个下标,如A13,第1个下标为1,代表处于第1行;第2个下标为3,代表处于第3列等。

在声明数组的同时,可进行初始化。如下所示的就是已初始化的数组:

arr1:ARRAY[1..5]OFINT,=1,2,3,4,5;

说明:初始化后的arr1[1]=1、arr1[2]=2、arr1[3]=3、arr1[4]=4、arr1[5]=5。

提示1:数组的单元总数是有限制的,如LM3109机为4046,再多编译通不过。

提示2:不同品牌PLC数组定义的格式不完全一样。具体可参阅有关软件帮助。

提示3:有的PLC访问数组成员时,其下标只能是常量,有的可以是变量。

(2)其它复合变量

还有结构(Structures)与枚举(Enumeration)。其特点与计算机C语言类似。具体定义可参阅有关说明。

1.3.3 常量

常量也称常数、即时数或立即数。就是实际输入到程序指令中的具体数值。而且,这些数值在程序执行中一直保持不变。是PLC指令常见的操作数之一。如TRUE、FALSE就是一个布尔常量。常量与数据类型有关,类型不同,常量的值也不同。具体应在它的该类型数据上限与下限(含上下限)之间选定。

PLC常要使用常数。常数有16位和32位。输入常数输入时一般要加上相应的前缀。

对欧姆龙:加“#”表示BCD码或十六进制数,如加“&”表示十进制数。

对三菱:加“H”表示BCD码或十六进制数,加“K”表示十进制数,加“E”表示实数。

对西门子:加“16#”表示十六进制数,不加表示十进制数,数字中带有小数点表示实数。

此外,有的PLC还可输入与处理字符或字符串,如“a”、“abc”。也可在字符前加$,则输入的为转义字符,如“$$50”,实际的值为“$50”,这里第1个$为转义符号。

提示:不同的PLC可使用的常数及常数表示的格式也不完全相同。所以,使用时要注意之间的区别。

为了程序便于修改与重用,应尽量少用常量。办法是在程序先使用变量,但在程序初始化时设法把常量赋值给这些常量。这样,程序修改,只需修改初始化部分,而主体可以不动。有的PLC还可用加载数据块的方法实现初始化,那样,则只要修改数据块,即可更改常量,更加方便。

1.3.4 其它变量

PLC程序的其它操作数还有标号、功能块名及函数名。

1.标号

标号是跳转指令的操作数。指出下一个要执行的指令(或梯形图的节)标号。标号与变量命名一样,也是要用一些英文字母、数字或其它合法字符的组合。但不是所有的指令(或梯形图的节)都要有标号,只是有跳转关系时,需要此标号。

2.函数名

在ST语言中,调用函数的也可直接作为操作数使用。如

Result:=Fct(7)+3;

这里,Fct是函数名,却作为赋值语句的操作数。