1.4 PLC指令系统
关键词:指令系统、操作数、即时数、直接地址,间接地址、绝对地址、符号地址、输入类指令、输出类指令、中间指令、基本逻辑指令、应用指令、堆栈、结果寄存器。
一个PLC所拥有指令的全体称为该PLC的指令系统。指令系统代表着PLC的性能或功能。一般讲,功能强、性能好的PLC,其指令系统必然丰富,不仅指令类型多,而且功能强,所能干的事也就多。
早期可编程序控制器指令较少,如欧姆龙公司的C20机,才27条指令。而且指令的功能也不强。后续的产品,如CPM1A机,尽管为小型机,就有41种,148条。大型机更多,如CV1000,多达300多条。近期的产品,如CJ1/CJ1H机,尽管为小型机,其指令将近千条。而且还有功能很强的指令,如文字、文件处理指令。
PLC的指令系统是在对其编程之前必须弄清楚的。不熟悉指令系统,等于不懂语法用不好语言一样,PLC的程序是设计不好的。
从广义上讲,厂商提供的系统功能与功能块,也应算为指令系统的一个部分。如西门子S7-300/400 PLC的功能块FB41、42、43用于实现PID算法,实质上它就是别的PLC的PID指令。当今各家高性能的PLC多都有此类功能或功能块。这样功能或功能块的功能当然比一般指令要更强些。所以,现在再说PLC指令系统,不只是PLC指令的全体,而还要有系统提供的功能及功能块。有的厂商把后者的集合也称库。
值得注意的是,各厂商、各型别PLC的指令系统都是基于微处理器技术,总是直接、间接地来自微处理器。所以有关指令的类别、实现功能以及发展水平,大体上多是相同的。也因此本书才有可能将对其分类,把各厂商PLC一些最常用的指令集合一起进行说明。然而PLC指令系统又是基于PLC具体硬件的,加上所用的编程语言又没有统一的强制标准,所以,各厂商PLC的具体指令的差别还是不小的。即使是同一厂商,型号不同的PLC,其指令系统也不完全相同。所以,在注意对它们共同点的同时,也要看到对它们的区别点。这样,才能全面、准确地理解和具体使用好相关的PLC的指令。
提示:由于篇幅限制,以下只是简要地介绍本书涉及的PLC的一些典型指令。而全面、系统地弄清所使用的PLC的指令系统,对正确使用该PLC,编写好高质量的PLC程序,是至关重要的。因此,在PLC实际编程过程中,建议要多查阅有关PLC的编程手册,切实把有关指令弄懂、弄清。
为了加深对PLC指令的了解,以下先对PLC指令作分类分析,然后再对一些较常用的指令作简单介绍。一些要用到的特殊指令,将在以后的章节中继续介绍。
1.按指令的操作数,即程序数据的数量划分
(1)无操作数指令,如END(程序结束)指令、NOP(空指令,不做任何操作),仅操作码,无操作数。这类指令不多。
(2)单操作数指令,如LD(装载)指令,除了操作码(LD),还要有操作数(位地址)。
(3)多操作数指令,如MOV(传送)指令,除了操作码(MOV),还要有被传送字源地址及目标地址。执行它后,则把字源地址的内容,传送到目标地址中去。
多操作数,有的操作数可多达三个。如ADD(加)指令,在操作码ADD之后有三个地址。第一操作数为被加数;第二操作数为加数;第三个操作数为和。
指令在内存中占用的字节、字与指令长度有关。单字及双字长的占一个字。多字的占用不只一个字。有的PLC指令在内存中占用的地址以“步”(STEP)计。三菱PLC一个步占用4个字节。欧姆龙CJ1机的“步”与以前的字基本上相同,欧姆龙提供有方法可供换算。
要指出的是,这里的操作数多少,与在指令执行中,参与操作的实际数的数量,并不是一回事。操作数可能只有两个,但实际参与操作的数可能是几十、几百,以至于千。真正参与操作的数到底多少,是由指令的功能及特点决定的。
2.按指令的作用分
(1)输入类指令,用以处理输入信号及反馈信号,以建立相应的逻辑条件。它使用的数据与梯形图语言的常开触点、常闭触点、正转换感应触点及负转换感应触点等对应。执行这类指令不产生输出,但它为输出类及处理类指令工作提供条件。可知,一个有效程序,不可能仅使用这类指令。
输入类指令有两种执行方式:
正常执行,每一扫描周期,都依它的操作数正常I/O刷新后得到的值,进行逻辑处理。
立即输入刷新执行,每次执行它前,先进行输入刷新,然后再依刷新后操作数取得的新值,进行逻辑处理。要这样使用指令,则要在它的代码之前加感叹号“!”。在梯形图上的符号为
还可对输入指令做微分处理。有上沿微分与下沿微分。
上沿微分,使用的是正转换感应触点,当它的操作数从OFF到ON的那个周期,此操作数按ON处理,其他的均为OFF。要这样使用指令时,要在它的代码之前加向上的箭头符号。在梯形图上的符号为
下沿微分,使用的是负转换感应触点,当它的操作数从ON到OFF的那个周期,此操作数按ON处理,其他的均为OFF。要这样使用指令时,要在它的代码之前加向下的箭头符号。在梯形图上的符号为
输入指令的执行方式与PLC的生产公司及PLC的型号有关,不是所有PLC都有这么多的执行方式。
(2)输出类指令,用以产生输出。一般讲,在执行它之前总是要先执行输入类指令。其产生什么输出,则由其所使用的数据及之前的逻辑条件决定。它使用的数据与梯形图语言的正常线圈、反向线圈、设置(锁存)线圈、复位(取消锁存)线圈、正转换感应线圈、负转换感应线圈及暂停线圈等对应。
输出类指令也有多种执行方式:
正常执行,每一扫描周期均依执行它时的逻辑条件情况,处理该指令;到了输出刷新时,才把这个输出传送给输出锁存器。
立即刷新执行(Immediate Refresh,IR),处理该指令后立即进行输出刷新,把输出的结果送给相应的输出锁存器。要这样使用指令,则要在它的代码之前加感叹号“!”。
(3)处理指令。用于做数据或有关处理工作。其执行与否取决于执行前的逻辑条件。随着PLC功能的增强,此类指令越来越多。
此类指令还可运用EN\ENO机制,既按在本指令之前建立的逻辑条件,执行本指令;又依本指令的执行情况,再建立相应的逻辑条件,为后续指令的执行提供前提。以至于输入,此类指令还可多次相间,最后才为输出指令。只是老式的PLC多没此机制。
图1-22所示的西门子PLC的几条梯形图指令。这里的加(ADD-I)与乘(MUL-I)指令都运用的EN/ENO附加变量。如图,要使Q0.0 ON,其条件是I0.0 ON以及这里的加(ADD-I)与乘(MUL-I)指令成功执行。可知,这样的梯形图的表达是很简练的,效率是很高的。只是,这样的梯形图就不大像电气原理图,与创立梯形图的初衷略有违背。
图1-22 多个比较指令使用
3.按指令的执行情况分
PLC的输入指令,在每扫描周期中,总是执行的。多数输出指令,在执行(即与其有关的输入)条件具备时,也总是执行的。
但有的指令就不完全是这样的。如PID指令,尽管执行条件具备,设定又无不当之处,但它的执行周期不是取决于扫描周期,而主要取决于对PID工作周期的设定。
再如求平均数、求总数,这样表处理或文字处理指令,要在一个扫描周期内实现它的功能,所用的处理时间很长。新机型允许其分开在若干扫描周期内完成。这样,可避免出现,执行这类指令时扫描周期过长,不执行时又较短,而I/O响应时间一致性。
最后,如通信指令,它的接收、发送数据也不是执行一次就可完成。
4.按指令的使用分
这里的使用是指使用频率及表达它的方法。按这个使用分有:
(1)基本逻辑(有的称顺序)指令用得最多,简易编程器上多有其对应的专用键。主要用于逻辑操作。
(2)应用指令,其实也就是上述处理指令,有的称为功能指令,可实现比逻辑操作更为复杂的功能。在简易编程器上,一般无与其对应的专用键。用简易编程器,输入这种指令有两种办法,一是用先输入功能键(FUN),后输入功能号。欧姆龙及三菱有的PLC就是用这种方法。另一为在编程器上显示指令菜单,在菜单中选择所要输入的指令,西门子、松下的PLC就是用这种办法。
随着功能指令增多。仍用两位数的功能码不够了。所以,功能指令分为两种:一为有固定的功能码,如01,固定代表END指令;另一为无固定功能码,如PULS(脉冲)指令,就没有固定的功能码,使用前现做指定。没有固定的功能码的指令,欧姆龙称之为扩展指令。其功能码要在使用前分配。当然,有的PLC把功能码提升为3位数,就不存在此问题了。
提示:下载扩展指令设定前,应使PLC处于编程模式,有的PLC,如CPM2A,其DM6602(系统设定字之一)的高字节还要设为1(也要使PLC处编程模式才能写这个字)。改后,还要使PLC断电,再上电。否则这个设定的下载是不可能的。
提示:目前手持编程器已几乎不用,这样划分,也许已过时。但是,功能码还存在就是了。
此外,还可按功能,即按指令能干什么事分类,把类似的归在一起,PLC指令的类型还是很多的。以CJ1机为例,欧姆龙把它分有32种之多。再进一步归纳还有:
(1)基本逻辑类指令,用于逻辑关系处理,是最常用、最基本的指令。
(2)定时、计数类指令,用于定时或计数,也是经常要用到的指令。
(3)数据处理类指令,用于数据运算、传送、比较、译码、编码、移位及其他有关指令。
(4)流程控制类指令,用于控制程序执行的流程。可使PLC执行指令能按所控制的顺序进行,而不一定非要从零地址开始到最高地址,依此执行。
(5)监控类指令,用于处理PLC或被控制对象的故障检测,有助于提高PLC及其控制系统工作的可靠性。
(6)处理I/O类指令,用于处理PLC应急I/O刷新或数据(信息)的入或出。
(7)通信类指令,用于处理PLC与PLC,或PLC与计算机,或PLC与智能设备间的通信。
(8)内存管理指令,用以管理PLC的各个存储区、存储卡。
(9)其他管理或处理指令,用于PLC的其他管理与处理。
以下将对其中若干类指令进行介绍,其他的将在介绍有关的内容时,再作说明。
1.4.1 基本逻辑类指令
指主要针对二进制数(bit)逻辑操作的指令,是PLC最基本的指令。所有的PLC都有这类指令。这类指令可分为:读(输入类,运用触点)与写(输出类,运用线圈)两种。PLC的继电器功能主要就是靠它实现。
读指令指的是读操作数的逻辑值,并与在这之前已有的结果值进行相应的逻辑运算,进而修改结果值。目的是确定要写的逻辑值,或为其他指令的执行建立相应的逻辑条件。
写指令指的是把上述结果值按输出指令要求写给操作数。
这个结果值就是下面将要讨论的R寄存器的值,有的称为RLO(Result of Logic Operation),即逻辑运算结果。西门子的S7-200称之为逻辑栈顶(The Top of the Logic Stack,TOS)。
表1-9列出4个PLC厂商用指令表语言表达的有关这类的指令。以下将对这类指令进行讨论。
表1-9 PLC主要的基本逻辑指令
(续)
1.装载指令
装载指令的作用是,把操作数的内容(0或1,分别代表断或通,工作或不工作……)送入结果寄存器R,并把结果寄存器的原有内容送入堆栈P(有的为第二个RLO,不是堆栈)。
指令的语句表符号格式:指令地址 装载 操作位地址
它调用常开触点,一般总是把这触点与梯形图的母线相连。它的功能如图1-23所示。
这里,a为操作数的地址,括号代表a的状态;R为结果寄存器;P为堆栈。堆栈为先进后出的存储单元,一般长度为8个位,与PLC型别有关,如欧姆龙CJ1机为16位。8位时,可存储8个二进制数,再续存时,最先存储的掉失。堆栈主要在逻辑块操作,或需多个输入条件时用到它。
取反装载指令,是操作位的内容先取反(代表常闭触点),再送结果寄存器。在梯形图上,一般是表示此常闭触点和左母线相连。其符号是在两短平行线的基础上,再加一小斜线。有的PLC,装载及取反装载指令还可加感叹号(!)及上或下箭头(↑↓),其含义与使用的触点类型有关。
图1-23 装载指令的功能
这里感叹号代表执行此指令时先进行输入刷新,以读入此点的最新状态,然后才把这最新状态写入结果寄存器。这么做当然有利于提高对这个输入信号的响应速度。
上下箭头,代表跳变(微分)。若为向上箭头,则操作位的状态从0变为1时,ON一个扫描周期。若为向下箭头,则从1变为0时ON一个扫描周期。其他周期均为0。
加了这个感叹号、向上及向下箭头,使指令的功能大为增强,一个指令可起到多个指令的作用。
S7-200逻辑栈,除了栈顶,还有八位栈体,也可暂存八个位。它的栈体相当于这里的栈,而栈顶则相当于这里的结果寄存器。
2.与指令
为与操作指令。与指令的作用是把操作位的内容与R中的内容相与,然后再送入R中。这时,堆栈的内容无变化。
其语句表的符号:指令地址 与 操作位地址
梯形图符号为
它也为常开触点,在梯形图上,它表示与其左边的触点相串联。其功能如图1-24所示。
这里,a为操作数的地址,括号代表a的内容;R为结果寄存器;P为堆栈,执行AND指令时,它的内容不变。
取反与指令,是先取反(代表常闭触点),然后再和结果寄存器的内容作与运算。在梯形图上,表示串联上此常闭触点。
有的PLC这两个指令也可加感叹号、上下箭头。含义同装载指令。
图1-24 与指令的功能
3.或指令
为或操作指令。或指令的作用是把操作位的内容与R中的内容相或,然后再存入R中。这时,堆栈的内容无变化。
或指令的语句表符号:指令地址 或 操作位地址
就单个讲,其梯形图符号也为
它也为常开触点,在梯形图上,它表示与其上一行的触点相并联。其功能如图1-25所示。
取反或指令,是先取反(代表常闭触点),然后再和结果寄存器的内容作或运算。在梯形图上,表示并联上此常闭触点。
有的PLC这两个指令也可加感叹号,上下箭头,含义同装载指令。
图1-25 或指令的功能
4.块与、块或指令
无操作数。其作用是把结果寄存器的内容与堆栈的内容作逻辑与,或逻辑或,然后再送结果寄存器。
其语句表符号:指令地址 块与或指令地址块或,而和利时PLC则用AND或OR加括号。
它在梯形图上代表两组触点的串联或并联。块与功能如图1-26所示。
块或功能如图1-27所示。
图1-26 块与的功能
图1-27 块或功能
这两个指令用于触点组间的串联或并联,是很有用的指令。如图1-28所示,其对应的助记符指令也已列出。
5.输出指令
为写指令,输出指令要用到线圈。一般多用正常线圈。
语句表的符号:指令地址 输出 操作位地址
梯形图符号为输出正常线圈,可用圆圈或括号表示。欧姆龙、三菱PLC的助记符用OUT,西门子PLC用等号,和利时用ST,如图1-29所示。
图1-28 触点组间的串联或并联
图1-29 输出指令
其功能为
这里,a为操作数。执行输出指令后堆栈内容不变,R的内容也不变,只是把R的内容传给a。有的也可使用反向线圈。如欧姆龙PLC取反输出指令,
其含义是把R先取反,然后再传给a。表示符号为在OUT的符号基础上,加一斜线。
有的PLC这个指令也可加感叹号(!)。感叹号代表执行此指令后,立即进行输出刷新,把这时输出的状态送输出锁存器,直接产生输出。
图1-30所示为西门子PLC加感叹号使用例子。它立即刷新后,把I0.0读入。写Q0.0后,立即刷新。用语句表列写指令时,在LD之后,加I,即LDI 0.0及=(此符号相当于欧姆龙的OUT)后,再加I,即=I Q0.0。显然,这样处理,可加快Q0.0对I0.0的响应速度。
图1-30 西门子PLC加感叹号的程序例
有了以上介绍的输入、输出指令,普通的串、并联电路的逻辑就完全可用这些指令处理了。
提示:西门子、三菱PLC无取反输出,但有取反指令。它的先取反,后输出,与这里的OUT NOT效果相同。反之,如果欧姆龙PLC用OUT NOT后,输出给一个暂存器TR,然后再装载此TR,也就相当于执行取反指令(NOT、INV)。取反指令(NOT、INV)的格式为
但如果一组逻辑条件,有分支输出,该怎么处理?不同的PLC有不同的办法:
欧姆龙PLC用输出暂存器(TR),然后,再装载暂存器解决。三菱、西门子PLC都用进栈、读栈及出栈指令解决。只是这里的栈与前面介绍的栈不是一回事。前面的栈用于装载、与、或及输出等多种处理。即使用助记符编程,也不必编写任何指令。而这里的栈是用于上述分支处理。用助记符编程时,则需编写相应指令。
图1-31所示为这3种PLC解决此问题的梯形图及助记符程序。
图1-31 分支输出解决方案
从图1-31a可知,欧姆龙用暂存器TR(有8个,性能高的机型有16个)存(用OUT指令)分支处的数据。而当使用时,再用LD指令调出。
从图1-31b可知,西门子用IPS(进栈)指令,把分支处的数据压进栈。而当使用时,再用IPD(读栈)指令调出。这里最后用的IPP指令,是既读栈,而又清栈。因为在其后的程序已不需这样处理了。
从图1-31c可知,三菱基本与西门子相同。只是它进栈指令叫MPS,而不是叫IPS。读栈指令叫MRD,而不叫IPD。读栈、清栈指令叫MPP,而不叫IPP。
和利时PLC没有这类指令,可采用多节处理,类似图1-31分支处理,它共用了3个节,如图1-32所示。
以下顺便介绍一下西门子及三菱PLC的堆栈,它们与欧姆龙PLC的堆栈略有不同。堆栈指令在将梯形图程序手工转换为助记符程序时,是必须要用的。只是在当今,这个转换完全可由编程软件实现。这个转换具体如下。
西门子PLC堆栈:它的栈顶为上述介绍的结果寄存器R,而第2位即为上述栈P的栈顶。另外,就是它用的操作指令不同。如:
栈装载与(ALD):对堆栈中的第一层和第二层的值进行逻辑与操作结果放入栈顶,并在执行完ALD指令后,堆栈深度减1。
栈装载或(OLD):对堆栈中的第一层和第二层的值进行逻辑或操作结果放入栈顶,并在执行完OLD指令后,堆栈深度减1。
逻辑推入栈(LPS):复制栈顶的值,并将这个值推入栈,而栈底推出,数据丢失。
逻辑读栈(LRD):复制堆栈中的第二个值到栈顶。堆栈没有推入栈或弹出栈操作。但旧的栈顶值被新的复制值取代。
图1-32 和利时PLC分支处理
逻辑弹出栈(LPP):弹出栈顶的值,堆栈的第二个值变为新的栈顶值。
三菱逻辑堆栈:它有11层,也是用作中间存储。主要是用于处理如图1-14所示得分支输出。
进栈指令(MPS):把逻辑运算结果入栈,而栈底推出,数据丢失。
读栈指令(MRD):读取栈顶数据用于逻辑运算,栈中数据不变。
出栈指令(MPP):读取栈顶数据用于逻辑运算,并栈中各数据依次上推。
提示:如使用图形图编程,画出梯形图程序就可以了。把梯形图程序转换成助记符程序时,这里暂存器使用或进栈、出栈处理的有关指令使用,都是自动实现的。
6.置位、复位指令
其操作数为位地址,也是一种输出指令。
它与使用设置(锁存)线圈、复位(取消锁存)线圈对应。当结果寄存器R的内容(逻辑条件)为1,则执行本指令。否则不执行,其操作数(即为位)内容不变。执行置位指令,其操作数变为1。执行复位指令,其操作数变为0。这两个指令的梯形图及助记符符号如图1-33所示。
从图1-33可知,欧姆龙、三菱及和利时PLC仅对一个点置位、复位,而西门子PLC置位、复位的点数可设定,图中S、R下设为1,故仅对Q0.0置位、复位。如设为2,则除了Q0.0还有Q0.1,如设为其他,则类推。
图1-33 置位、复位指令
欧姆龙PLC还把这两者复合在一起,成为KEEP指令,类似于数字电路的RS触发器。有两个输入端,一为R端,另一为S,分别对操作数置0(复位)与置1(置位)。
虽同样可实现置位、复位,但置位、复位指令可分开置于程序的不同位置,用起来较灵活。而KEEP指令则要依此执行这两个指令,先S后R。
西门子PLC也有类似KEEP那样的指令,RS或SR,其符号如图1-34所示。
图1-34 西门子RS、SR指令
RS完全同KEEP,复位优先,R、S端均为1,复位。而SR,为置位优先,R、S端均为1,置位。
置位,复位指令前各分别赋一次值;KEEP、RS(R优先)、SR(S优先)指令之前则要连续赋两次值(要两次使用装载指令)。在梯形图上的表示为方块。置位,复位指令各仅有一个入端,而KEEP、RS、SR要有两个入端。如图1-35所示。
图1-35 KEEP、SR指令使用
提示:图1-35a与b两个程序,表面上功能是相同的。但实际是有区别的。若用10.00代替0.01,当00.00 ON时,图1-35b程序可使10.00 ON、OFF按扫描周期交替出现,而图1-35a程序10.00永远不可能ON。
提示:图1-35c和d两个程序道理上是一样的,但对S7-200只允许用图1-35d的画法,图1-35c是错误的,编译通不过。而欧姆龙PLC则允许图1-35c这种画法。说明在图形图表达上各家PLC还是稍有差别的。
和利时PLC没有此指令,但有相关功能块。使用起来也很方便。
7.微分指令
有为上沿微分及下沿微分。
它与使用正转换感应线圈、负转换感应线圈对应,操作数也是位地址。当执行上沿微分指令时,R的内容从OFF(0)变为ON(1),则操作数的内容为1(ON)一个扫描周期;当执行下沿微分指令时,情况相反。R从ON变到OFF,操作数ON一个扫描周期。
有的PLC的微分指令不作为输出指令,而作为中间指令。它可加在一组输入指令之后,加上它,然后再送给输出指令,用起来也很方便。
8.其他位处理指令
如西门子PLC有(#)指令,执行它可把此时的RLO内容写入它的操作数中,并还可在它之后进行相应操作。如图1-36给出了使用这指令后的操作数的逻辑值。
其他PLC厂商的这类指令,与这里介绍的大同小异,就不多介绍了。
图1-36 西门子PLC(#)等指令使用
1.4.2 定时、计数指令
定时与计数指令主要用于定时与计数,也是很常用的指令。特别在使用时间进行控制,或存储内部工作状态时,更需要用它。只是目前很多PLC不用这类指令,而用它的功能或功能块。
定时与计数指令本质上也是一种逻辑输出指令。它也是为了产生输出,实现从入到出的变换。只是,它是延时实现,或达到要求的计数值后实现。所以,有的PLC,如三菱公司PLC,起用定时器、计数器就是用输出(OUT)指令,只是其操作数用定时器、计数器,并在使用它时,同时对定时值、计数值也作设定。
1.常用定时指令
图1-37为三菱PLC调用定时器梯形图程序。
从图知,当X000 ON,T0线圈工作,经延时5s(该定时器计时单位为0.1s),T0的常开触点ON,可使Y000 ON。也就是说,从X000 ON到Y000 ON是有延时的。这里延时时间由定时器T0控制。
欧姆龙PLC定时指令有普通(TIM,时间间隔100ms)、高速(TIMH,时间间隔10ms)、高高速(TIMHH,时间间隔1ms)定时指令多种。在这指令之前,当然要对寄存R赋值,即写R,建立条件,或说连一个输入端。
指令在梯形图上的符号是方框或圆圈。如方框如图1-38所示。
图1-37 定时器程序
图1-38 欧姆龙PLC的TIM指令框图
这里×××为指定定时器的编号及设定值。
普通定时指令的设定值的设定单位为0.1s。设定值、现值都用BCD码表达。最大设定值可达9999,即999.9s。
如用高速定时指令的设定值的设定单位为0.01s。设定值、现值都用BCD码表达。最大设定值可达9999,即99.99s。用高高速定时指令则设定值的设定单位为0.001s。设定值、现值都用BCD码表达。最大设定值可达9999,即9.999s。
欧姆龙PLC使用定时器的梯形图如图1-39所示。
这里00002为输入点,000为定时器号,#150为定时设定值,单位为0.1s,故定时值为15s。00002 ON后延时15s,TIM000常开触点ON。而一旦00002 OFF,则TIM 000立即OFF。
图1-39 定时器使用
欧姆龙CJ1H系列PLC还有TIMX指令。其功能与TIM相同,只是它是按十六进制计时。
提示:虽然这种PLC同时有TIM及TIMX指令,但在编程前要用编程软件,在PLC属性栏中,先做选择,而且,只能选用其中的一种。默认选定为TIM。其他带“X”的指令也都有此情况。
西门子PLC的定时器为增计数,如S7-200,用定时器33时,为每100ms计一个数,直到定时器的现值等于或大于设定值,则产生输出。在输出的同时,计时还在继续,直到达最大值。如图1-40所示,当I2.0 ON,T33开始计数,每100ms加1。到了其值等于3(这里设定值设为3),则T33标志位ON,且其现值还在增加。一旦I2.0 OFF,则计数停止,T33现值回到0,T33标志位OFF。
图1-40 S7-200 ON延时定时器使用例子
S7-200除了有ON延时、OFF即时,还有OFF延时、ON即时的定时器。图1-41所示为它的工作情况。
图1-41 S7-200 OFF延时定时器使用例子
S7-200定时器都可用以上介绍的复位指令(R)复位。复位作用期间,定时器的现值变为0,标志值OFF,停止计时。
2.其他定时指令
(1)高速定时指令(TIMH、TIMHH,西门子、三菱用不同编号的定时器实现),用其可实现10、1ms为单位的定时。
(2)累计定时指令(TTIM):用以累计计时。它是增计时,计时单位为0.1s。输入端ON时计时,OFF不计时,但不复位。再ON,再计,并累计计时,直到达到设定值,计时停止,并产生输出。计时复位使用复位端ON。
CJ1也还有与TTIM对应的TTIMX指令,所不同的也只是它是按十六进制数计时。
S7-200也有可累积计时的定时指令。如图1-42所示,12.1ON时计时,OFF停止,累计到设定值,产生输出。
图1-42 S7-200可累积计时定时指令使用
(3)8位计时指令(TIML):CV1000机开始有此指令,是普通定时指令的加长,设定值可达8位,即99999999。计时值可达115天。
与TIML对应的TIMLX指令,所不同的也只是它是按十六进制数计时。它最多可计49710天。
(4)多输出计时指令(MTIM):CV1000机开始有此指令,可产生8个输出。这8个输出相应于8个设定值。计时时,计时是增计数,现值不断增大,与某一设定值相比,大或等于后者时,即产生相应输出。
这个定时指令,一个相当于多个,扩大了定时器的功能。
与MTIM对应的MTIMX指令,也是用十六进制计时。
3.西门子S7-300、400系列PLC定时指令
有5种,可表达为S5系列格式(称S5TIMER)或S7系列格式。分别是SP(PulseTimer)、SE(Extended Pulse Timer)、SD(ONDelay Timer)、SS(Retentive ON-Delay Timer)、SF(OFF-Delay Timer)。
定时器现值寄存器的内容如图1-43所示。
表1-10为不同时基的编号及最大可能设定的定时值。
图1-43 S7-300定时器现值寄存器
表1-10 不同时基的编号及最大可能设定的定时值
定时值要预设。其格式有如下两种:
W#16#wxyz:这里W为时基,wxyz为相应的定时值,BCD码。
S5T#aH_bM_cS_dMS:这里S5T表示为S5格式,abcd为相应的定时值的时分秒毫秒。选定后,其时基系统会自行确定。
这5种定时器的有关工作情况见有关使用说明,这里略。
4.有关定时器的使用问题
(1)欧姆龙及三菱PLC的定时指令虽只有延时ON一种,但完全可用这个指令与相应的基本逻辑指令组合,以实现这里的其他四种指令的功能。图1-44所示为ON及时,而OFF延时的程序。其他的程序略。
运行图1-45程序,对欧姆龙PLC而言,这里的200.00即为ON及时OFF延时的定时器。对三菱PLC而言,这里的M0即为ON及时OFF延时的定时器。
图1-44 ON及时OFF延时定时程序
(2)用定时器产生定时脉冲(仅ON一扫描周期)信号。最简单的办法是用定时器自身的常闭触点去控制自身线圈,用它的常开触点去产生脉冲。如图1-45所示,这里T33的常闭触点控制T33定时器,当定时间1到,定时器T33产生输出,T33常开触点ON,而T33常闭触点OFF。后者将在下次执行此程序时,使定时器T33停止工作。这将使定时器T33停止输出:其常开触点ON一个扫描周期后,又转为OFF;而常闭触点OFF一个扫描周期后又转为ON,又可开始新的计时。如此周而复始,T33常开触点将不断产生定时脉冲。
要指出的是,对S7-200系列PLC的10ms级的定时器,可能是系统的原因,用此法是受限制的。如图所示,只能在本梯级前的梯级,如图中梯级1,能产生脉冲,而本梯级后,如梯级3,不能产生脉冲。其他两家PLC及S7-200其他级别的定时器无此问题。
5.常用计数指令
(1)三菱PLC计数器。图1-45所示为三菱PLC调用计数器梯形图程序。
图1-45 用定时器产生定时脉冲
图1-46 计数器程序
从图1-46可知,当X001从OFF到ON,则计数器C0线圈工作,计一个数,当C0计到3,则C0的常开触点ON,可使Y003 ON。也就是说,X001从OFF到ON 3次,Y003工作。这里计数设定值K3(即时数)也可为直接或间接地址。
它的计数器复位使用复位指令。如上例即使用RST C0。而且,实现技术的前提是不执行这个指令。
三菱的定时器、计数器按十六进制工作,故K值最大可设为65535(十六进制FFFF)。
(2)欧姆龙PLC计数器。它实现减计数。有两个输入端,一为计数端,另一为复位端。欧姆龙的指令的梯形图格式如图1-47所示。
该计数器的工作情况是:复位端(R)的逻辑条件为ON,停止计数,现值复位为设定值。复位端OFF,允许计数。这种情况下,当计数端(C)的逻辑条件从OFF到ON时,在该扫描周期,计数器的现值减1。其他情况下,现值不变。当现值减为0时,产生输出,且现值保持为0。
CJ1H还有CNTX指令,所不同的它用十六进制计数。所以,它的计数范围可扩大到65535。
(3)西门子PLC计数器。图1-48a所示为使用西门子增计数器指令程序。
图1-47 欧姆龙PLC的计数器指令
图1-48 使用西门子增、减计数器指令程序
图1-48a中,CU为增计数端,R为复位端,PV为设定值输入端,C0为计数器标号。当I0.1 ON,计数器复位(现值为0),停止计数,输出OFF。当I0.1 OFF,每I0.0从OFF到ON一次计数器作增1计数。计数器现值大于或等于设定值,计数器输出C0 ON,且继续计数,直到32767这个可能的最大值。而本图当计到48或大于48,则C0 ON,Q0.0工作。
西门子还有减计数器(CTD)。图1-48b所示为使用西门子PLC减计数器指令程序。这里,CD为增计数端,LD为装载端,PV设定值输入端,C1为计数器标号。当I1.2 ON,计数器装载(现值为100),停止计数,输出OFF。当I1.2 OFF,每I0.2从OFF到ON一次计数器作减1计数。计数器现值等于0,计数器产生输出(C0 ON),且计数停止。
6.可逆计数器
可进行双向计数。
(1)三菱PLC可逆计数器是双字的。也是用输出指令调用。计数的方向由相应的特殊继电器状态决定。其计数范围为-2147483648~2147483647,并在此范围内循环计数。即增到最大值时,如再增一个数,则当前值变为最小值。反之也类似。表1-11为FX2N系列的这些计数器及相应的方向切换特殊继电器。
表1-11 FX2N系列可逆计数器所使用的特殊继电器
图1-49所示为使用三菱可逆计数器的梯形图程序。
图1-49中,C200为可逆计数器。M8200为其方向切换特殊继电器。M8200 OFF,C200增计数,ON,减计数。当X005 OFF,C200接收X004的增计数,当X005 ON,C200接收X006的减计数。而当X007 ON计数器复位,现值等于0,计数及输出都停止。图1-50所示为该计数器产生输出的情况。
图1-49 三菱可逆计数器程序
图1-50 可逆计数器产生输出简图
从图1-50可知,只要当前值从小与设定增加,到大于或等于设定值,计数器即产生输出。反之,或计数器复位,则停止输出。
(2)欧姆龙PLC可逆计数其指令为CNTR。除了有复位端,还有两个计数端,一个为正计数端(U),一个为减计数端(D)。西门子PLC为CTUD,还有个设定值输入端。其梯形图格式如图1-51所示。
其工作情况是,初始状态,或复位端ON时,现值为0,不计数。复位端OFF,允许计数。正端从OFF到ON,正计数,计数现值加1;负端从OFF到ON,减计数,计数现值减1。具体计数情况如图1-52所示。
图1-51 可逆计数指令
图1-52 可逆计数示意图
当增计数到设定值时,再增计1个数,则现值变为0,且产生输出,使计数完成标志位ON,如图1-53所示。
当减计数到现值为0时,再减1个数,则现值变为设定值,也产生输出,使计数完成标志位ON,如图1-54所示。
CJ1H还有CNTRX指令,与CNTR不同的是,它用十六进制,而不是用BCD码计数。所以,它的计数范围可扩大到65535。
图1-53 增计数达到设定值时再增计1计数
(3)西门子PLC可逆计数器。图1-55所示为使用西门子PLC可逆计数器的梯形图程序。它是16位可逆计数,在-32768~32767之间循环计数。当计数值大或等于设定值(PV)时,计数器输出常开点ON,并继续计数。图1-56所示为执行该程序的实际计数及输出情况。
图1-54 减计数减到0,再减1计数
图1-55 西门子PLC可逆计数器
1.4.3 应用指令
1.数据处理指令
随着PLC技术的发展,其数据处理指令越来越多,功能也越来越强,使当今的PLC不仅可方便地用于逻辑量的控制,而且也可方便地用于模拟量的处理与控制。
图1-56 西门子PLC可逆计数器工作情况
数据处理指令很多,占PLC指令集的相当大部分。大都以双字、字、多字为单位操作。具体有传送指令、比较指令、移位指令、译码指令及各种运算与文字处理指令等。
(1)传送指令。最简单、最常用的传送指令为把源地址的内容或某即时数传送到某目标地址。传送后,源地址内容不变。图1-57所示为三厂商传送梯形图及助记符指令。
图中,S为源地址,也可是即时数;D为目标地址。
欧姆龙PLC执行传送指令也影响标志位(25506特殊继电器,它反映相等的特点),传送的数为0时,置其为1,不然置0。
欧姆龙PLC的MOV指令名称前加@,即@MOV(021),三菱PLC的MOV指令后加P、即MOVP,则指令为微分执行。只在逻辑条件从OFF到ON那个扫描周期,指令执行一次。其他情况,指令不执行。欧姆龙新型PLC,MOV之后L,即MOVL,三菱PLC MOV之前加D,即DMOV,可实现双字传送。而且这里的MOV前加字及后加字可同时进行。
西门子PLC MOV-W为字传送,而MOV-B为字节传送,MOV-D为双字传送,MOV-R为实数传送。
图1-57 传送梯形图及助记符指令
提示:从三家MOV指令的表示再次看出,同样是梯形图,不同厂商的指令表示是不相同的。所以,设计不同厂商PLC的程序,要看到这个差别。
除了MOV,欧姆龙、三菱PLC还有反相传送指令MNV(三菱为CML)指令,它与MOV不同的只是传送之前,先把要传的内容取反,然后再传。
此外,还有其他多种传送指令。有:
多字传送,也称块传送,或称成批传送指令,可把若干连续地址的内容分别传送给对应的连续的目标地址。只要设好要传的数据的起始地址,目标的起始地址及要传的字数就可以了。
块设定,或称多点传送指令。它可把一个字的内容设定到指定的连续存储区中,只要指出该区的起始地址及末了地址。这个指令可很方便地用于对PLC的一些存储区进行初始化。
字交换指令,可进行两个地址内容的交换。
欧姆龙PLC还有带偏移目标地址的传送指令DIST。可把源地址的内容传送给某基址加偏移地址后的地址。这种传送类似使用指针,较灵活,便于存储数据,或从同一子程序中取出的数存于不同的单元中。
欧姆龙PLC还有带偏移源地址的传送指令,COLL。可把某基址加偏移地址后的地址的内容传送到某个目标地址。这种传送也类似使用指针,便于取数,或同一子程序可使用不同的参数。
除了字、双字、多字传送,还有BCD码的位(digit)及十六进制的位(bit)传送等。这些指令给数据处理都提供了方便。
(2)比较指令,也称关系运算指令。
1)欧姆龙PLC常用的比较指令CMP。执行它时,实现两个数的比较,并依据比较结果使相应的标志位置位。
比较结果位有三个:
EQ(等于),第一、第二比较数相等,欧姆龙PLC以前机型是使特殊继电器255.06 ON;
LE(小、等于),第一个数小于第二个数,欧姆龙PLC以前机型是使特殊继电器250.07 ON,
GR(大、等于),第一个数大于第二个数,欧姆龙以前机型是使特殊继电器255.05 ON。
提示:欧姆龙PLC不仅使用比较指令会改变以上特殊继电器的状态。有的其他指令也会改变它。所以,在比较指令与取得比较结果之间,不能如图1-58那样,夹入指令B。因为执行指令B,有时可能改变在比较时得到的结果。那样,A得到的结果,就可能有误。
图1-58 不正确使用比较指令示意
提示:由于编程软件的进步,比较结果的标志用的特殊继电器编号,可以不必记忆。可用P-EQ(相等)、P-LT(小于)及P-GT(大于)代替。
2)三菱PLC比较指令。其格式如下:—[CMP D1 D2 M1]
这里方括号左边横线为执行本指令的逻辑条件。方括号中CMP为指令名称,D1为第一比较数,D2为第二比较数,M1(在此虽只指明M1)到M3为比较结果标志。当D1大于D2时,M1ON,其他OFF;当D1等于D2时,M2 ON,其他OFF;当D1小于D2时,M3 ON,其他OFF。
三菱PLC的CMP与MOV一样可加前、后缀D、P,实行双字比较或微分执行。
3)西门子PLC触点比较指令。可进行各种长度及不同数据类型的比较,其结果可当作梯形图的逻辑条件使用。图1-59所示为使用西门子PLC比较指令的梯形图程序。
图中除了常开触点I0.0及输出Q0.0外,全部为比较指令。从图1-59可知,要使Q0.0产生输出,其条件是:VB0(字节整数)要大或等于QB0(字节整数)或I0.0 ON,同时VW7(字整数)等于VW4(字整数)或IB2(字节整数)大于或等于VB3(字节整数),同时VD56(双字浮点数)小于或等于VD12(双字浮点数),同时VB100(字符)等于VB10(字符)。
图1-59 使用西门子PLC比较指令的梯形图程序
4)三菱PLC触点比较指令。图1-60所示为使用三菱触点比较指令的梯形图程序。
图中除了常开触点X002及输出Y000外,其他的为比较指令。从图1-60可知,要使Y000产生输出,其条件是:D1(字整数)要大于D2(字整数),同时X002 ON,或D10(双字,这里大于号之前加D,为双字的含义)大于或等于D20(双字)。
图1-60 使用三菱触点比较指令的梯形图程序
欧姆龙PLC新机型也有类似此触点比较指令。
5)欧姆龙PLC还有表比较指令,可把一个数与若干个数比较,哪个数与其相等,则指定字中相应位ON。否则,OFF。块(范围)比较指令。它的比较表是16对数,列出被比较数的上下限。当这个比较数处于被比较数的某上下限之间(含上、下限本身),视同比较相等,可使指定字的相应位ON。否则,OFF。
……
提示:比较指令对应操作数的格式应一致,否则无法得到预期的结果。
提示:比较指令是实现逻辑判断的基本手段。正确理解与巧妙使用比较指令,是PLC编程的关键之一。
(3)移位指令。移位指令用于字或多个位字中二进制数依次顺序左移或右移。有多种多样的移位指令。
简单左移:执行一次本指令移一次位。移位时用0移入最低位。原最低位的内容,移入次低位……依次类推,最高位的内容移出,或移入进位位(而原进位位的内容丢失)。有的PLC可设为每次可移多个位。
简单右移:与左移不同的只是它为右移,先把进位位的内容移入字的最高位,原最高位的内容移入次高位……依次类推,原最低位的内容丢失,或移入进位位(而原进位位的内容丢失)。有的PLC可设为每次可移多个位。
循环左移:它与简单左移不同的只是它的进位位的内容不丢失,要传给00位,以实现循环。
循环右移:与循环左移不同的是00的内容不丢失,传给进位位,原进位的值传给第15位,以实现循环右移。
还有可设定输入值的移位,如左移,不是都用0输入给最低位,而是可设定这个输入的值。
还有可逆移位指令,由用控制字,控制左还是右移,并可实现多字移位。
除了二进制的位移位,还有数位(digit)移位,可左移,也可右移。移位的对象可以多个字。
还有字移位,以字为单位的移,执行一次本指令移一个字。移时0000移入起始地址(最小地址),起始地址的原内容移入相邻的较高地址……最高地址(结束地址)的内容丢失。多次执行本指令,可对从起始到结束地址的内容清零。
……
图1-61所示为三家PLC左移指令梯形图符号。
图1-61a中,St是移位开始通道,Ed是移位终了通道,P是移位脉冲输入,R是复位输入,S是移位信号输入。当P从OFF到ON时,而R又为OFF,则从St到Ed间的各个位,依次左移一位,并把S的值(OFF或ON)赋值给St的最低(00)位,Ed的最高(15)位溢出;但如R复位输入ON,移位禁止,并St到Ed各通道清零。
图1-61 PLC左移指令梯形图符号
图1-61b中,SHL之后加DW为双字,即4个字节移位,EN为此指令执行条件。其输入为ON,才能执行本指令,否则,不执行。IN是进行移位的双字,OUT是移位结果输出的双字,N是每执行一次本指令将移位的位数。每次移位时,除了移位双字各位值相应左移,并用0填入移入的位。
图1-61c中,S是移位源,D是移位的输出,n1为指定源及输出位数。n2是指定执行一次本指令将移位的位数。本指令的输入为ON,才能执行本指令,否则,不执行。每次移位时,除了移位指定的各位值相应左移,并用移位源的值填入移入的位。
图1-62所示为使用PLC左移指令梯形图程序。
本程序的功能是,当0.02、I0.2及X002 OFF时,而0.01、I0.1及X001从OFF到ON,则使输出(从10通道开始到11通道、QD04双字及从Y000到Y37共32个位)左移一位。对图1-62b、c,为了能把I0.0及X000的值赋值给这里的“输入位”,即Q3.00及Y000,以及能对移位用的双字或各个位清零,这里增加了两组指令。目的是使其也具有图1-62a的功能。
图1-62 PLC左移指令梯形图程序
提示:西门子数据存储格式(顺序)与欧姆龙、三菱不同,是高字节存低位数,低字节存高位数。故上述输入位用QB3.0,而不像欧姆龙用10.00,也不像三菱用Y000。西门子PLC字节间的移位,以图1-62b为例,是Q3.7移给Q2.0;Q2.7移给Q1.0;Q1.7移给Q0.0。各字节中的移位,则也是从低位到高位移,即Q0.6移给Q0.7,Q0.5移给Q0.6等。三菱PLC的移位,以图1-62c为例,是Y0.7移给Y1.0;Y1.7移给Y2.0;Q2.7移给Y3.0。各8位中的移位,则也是从低位到高位移,即Y0.6移给Y0.7,Y0.5移给Y0.6等。欧姆龙PLC的移位,以图1-62a为例,是10.15移给11.00。各字中的移位,则也是从低位到高位移,即10.06移给10.07,10.05移给10.06等。
移位指令是很有用的。不仅在数据处理时,要用到它,而且在逻辑量控制时,也常用到它。当然,以上讲的也还不是移位指令的全部,也不是所有PLC都有以上讲的这些移位指令。具体使用此类指令,也可能还有一些细节,故使用时可参阅有关帮助。
(4)译码指令。用以译码,以适应数据使用或实现控制的需要。
最常用的为BCD码与BIN二进制码转换用指令。BCD为二进制码转换成BCD码指令。BIN为BCD码转换二进制码指令。有的PLC还有可处理双字的BCD及BIN指令,可进行两字长转换。
还有为4转16(DMPX、DECO)及16转4(MLPX、ENCO)的译码指令。
1)4转16:此指令可用一个输入(源)数位(digit,由4个bit组成)的值,使一个16位二进制输出(目标)数中,与该值相等的位ON,其他位OFF。当使用数值去控制不同的输出时,常要使用到此指令。而多数PLC都提供有这个指令。
图1-63所示为一组不同PLC使用4转16指令的梯形图程序。其作用都是用4个输入点(分别是0.00~0.03、I0.0~I0.3及X000~X003)组成的一个数位(digit)的不同取值(十六进制编码),去控制输出(分别为10.00~10.15、Q0.0~Q1.7及Y000~Y017)。
图1-63 使用4转16指令梯形图程序
如图1-63所示程序,如输入(编码)值为6,则将使10.06、Q1.6(注意:西门子位在字中的排序与其他PLC不同,其升幂先是高字节的00位到07位,后为低字节的00到07位,故这里为Q1.6,而不是Q0.6)及Y006 ON,而其他各位全OFF。再如输入(编码)值为11,则将使10.11、Q1.3(八进制计算)及Y013(八进制计算)ON,而其他各位全OFF。再如输入(编码)值为0,则将使10.00、Q0.0及Y000 ON,而其他各位全OFF。有了这个程序,如用16位的拨码开关接输入点,则可很方便地用这个开关的不同设置,产生不同输出。如用增计数器作为这里的源,也可用计数值的变化,一步步改变输出。
提示:如图1-63b所示,西门子S7-200的DECO指令的输入(IN)是字节,且其作用的仅为它的低4位(如图,为I0.0~I0.3),输出是两个字节,16个位。只要其EN端逻辑条件ON(图中SM0.0为常ON触点,故此条件满足),即执行本指令。而S7-300、400系列PLC则没有这个指令。
提示:如图1-63c所示,三菱的DECO指令稍复杂,功能也稍强。如图,X000~X003,4个位,为源(S·、输入),Y000~Y017为目标(D·、输出),16个位。只要执行它的逻辑条件ON(图中M8000为常ON触点,故此条件满足),即执行本指令。为什么这里输入为4位,输出为16位?这与常数(n)的取值为4有关。
图1-64所示为三菱DECO指令n的取值及其含义示意。
当目标(D)是“位”软元件时,n取值应小或等于8。输出多少位?是2的n次方。图1-63c的n为4,故输出为16位,对应的输入为4位。如n为8,则可输出256位。图1-64中n为3,故输出为8位,对应的输入为3位。该图输入X000、X001 ON,X003 OFF,其值为3,故M13 ON,其他7位均OFF。
图1-64 三菱DECO指令n的取值及其含义
当目标(D)是“字”软元件时,n取值应小或等于4。输出多少位?也是2的n次方。图1-64b中n为3,故输出为8位,对应的输入为3位。该图输入D0的低3位的值为3,故D1的第3位ON,其他位,含高字节各位均OFF。
提示:如图1-63a所示,欧姆龙PLC的MLPX指令,更复杂,功能也更强。如图,000.00到000.03,4个位,为源(第1个操作数、S),010.00到010.15为目标(第3个操作数、R),16个位。只要执行它的逻辑条件ON(图中p-On为常ON触点,故此条件满足),即执行本指令。为什么这里输入为4位,输出为16位?这与#0(第2个操作数,控制字的取值)有关。
图1-65所示为MLPX指令控制字(第2个操作数,C)的含义及应用实例。这里C有4个数位,其中数位0(n)指的是“源”字(S)中那个数位用作输入,数位1(l)指的是有多少数位用作输入。自然,输入数位多,输出也多(4对16)。
如图1-65所示,这里n=2,l=1(0时用一个数位,1用2个,余类推)。所以,如S中数位2的值为m,则R字中的m位ON。如S中数位3的值为p,则R+1字中的p位ON。
控制字C的数位,这里为0。如数位3取值为1,将进行8到256的译码(老机型无此功能)。256为16个字组成的256个位。8为8个字节为一组,每组两数位十六进制数,其值变化范围为00~FF,正好对应于256位的00~255位。8到256译码,本质上与4到16是相同的,只是它的通道长(位数)不是16,而是256,位(号),不是0~F,而是两位十六进制数00~FF。但8到256最多只能进行两组,不像4到16可进行4组译码。图1-66所示为MLPX指令8到256应用实例。
2)16转4:它与4转16相反,是把一个16位二进制输入(源)数中ON位的序号,作为一个输出(目标)数位(digit,由4个bit组成)的值。如前者有多个ON的位,则取其最大(对S-200相反,取其最小,欧姆龙CJ1等可选定)的位。当需对不同的输出进行记录时,常要使用到此指令。而多数PLC都提供有这个指令。
图1-67所示为一组不同PLC使用16转4指令的梯形图程序。其作用都是将16个触点(分别是10.00~10.15、Q0.0~Q1.7及Y000~Y017)的不同取值(十六进制编码),译成一个数位(digit)输出(分别为100.00~100.03、VB0.0~VB0.3及D0的低4位)。
如图1-67,如输入10.06、Q0.6及Y006 ON,而其他各位全OFF,则将使100、D0字、VB0字节的低数位(数位0)的值为6。如010.11、010.9、Q1.3、Q1.1及Y013、Y011 ON,而其他各位全OFF,则将使100、D0字的低数位(数位0)的值将为11,而VB0字节的低数位(数位0)的值、将为9。有了这个程序,可很方便地把输出点的输出情况予以记录。
图1-65 MLPX指令控制字(C)的含义及应用实例
图1-66 MLPX指令8到256应用实例
图1-67 使用16转4程序
提示:如图1-67b所示,西门子S7-200的ENCO指令的输入(IN)是两个字节,输出是一个字节,只要其EN端逻辑条件ON(图中SM0.0为常ON触点,故此条件满足),即执行本指令。而S7-300、400则没有这个指令。
提示:如图1-67c所示,三菱的ENCO指令,稍复杂,功能也稍强。如图,Y000~Y017,16个位,为源(S·、输入),D的低数位为目标(D·、输出),4个位。只要执行它的逻辑条件ON(图中M8000为常ON触点,故此条件满足),即执行本指令。为什么这里输入为16位,输出为4位?这与常数(n)的取值为4有关。
图1-68所示为三菱ENCO指令n的取值及其含义示意。
图1-68 三菱ENCO指令n的取值及其含义
当“源”(S)是“位”软元件时,n取值应小或等于8。输入多少位?是2的n次方。图1-67c的n为4,故输入为16位,对应的输出为4位。如n为8,则可输入256位。图1-68n为3,故输入为8位,对应的输出为3位。该图输入M13ON,故D10的低3个位的取值为3,即第0、1位ON、02位OFF。
当“源”(S)是“字”软元件时,n取值应小或等于4。输入多少位?也是2的n次方。图1-68中n为3,故输入为8位,对应的输出为3位。该图输入D0的第3位ON,故D1的低3个位的取值为3,即第0、1位ON、02位OFF。
提示:如图1-67a所示,OMRON的DMPX指令,更复杂,功能也更强。如图,000.00到000.03,4个位,为源(第1个操作数,S),010.00到010.15为目标(第2个操作数、R),16个位。只要执行它的逻辑条件ON(图中p-On为常ON触点,故此条件满足),即执行本指令。为什么这里输入为4位,输出为16位?这与#0(第3个操作数、控制字的取值)有关。
图1-69所示为DMPX指令控制字的含义及应用实例。这里C有4个数位,其中数位0(n)指的是“源”字(S)中那个数位用作输出,数位1(l)指的是有多少数位用作输出。自然,输出数位多,输入也多(4对16)。
由图1-69可知,这里n=2,l=1(0时用一个数位,1用2个,余类推)。所以,如S中第m位ON,则R的数位2的值为m,如S+1中第p位ON,则R的数位3的值为p。
控制字C的数位2,可为0,也可为1(老机型无此功能)。如为0,若S、S+1有多位ON,以最左(高)位ON为准。如为1,若S、S+1有多位ON,以最右(低)位ON为准。
控制字C的数位3、这里默认为0。如数位3取值为1,将进行256到8的译码。256为16个字组成的256个位。8为8个字节为一组,每组两数位十六进制数,其值变化范围为00~FF,正好对应于256位的00~255位。256到8译码,本质上与16到4是相同的,只是它的通道长(位数)不是16,而是256,位(号),不是0~F,而是两位十六进制数00~FF。但256到8最多只能进行两组,不像16到4可进行4组译码。
图1-70所示为DMPX指令256到8应用实例。
译码指令,除了以上,还有7段译码指令:可把BCD码译成7段码,用于数字显示。
图1-69 DMPX指令控制字的含义及应用实例
图1-70 DMPX指令256到8应用实例
ASCII码转换指令:把十六进制数译成ASCII码。
十六进制译码指令:把ASCII码译成十六进制码。
……
译码指令是很有用的。在数据处理时,要用到它,而且常用到它。当然,以上讲的也还不是译码指令的全部,也不是所有PLC都有以上讲的这些译码指令。具体使用此类指令,也可能还有一些细节,使用时可参阅有关帮助。
(5)数字运算指令。最常用的为一个字的BCD码(仅欧姆龙PLC)或十六进制数的+、-、×、\指令。还有双字(8位BCD码)或十六进制+、-、×、\指令。性能稍高的PLC,还有浮点数的+、-、×、\指令。
此外,多都还有加1、减1(欧姆龙为BCD码,而西门子、三菱为十六进制码)及进位位置位、复位指令。
为了适应在数据处理的需要,有的PLC还有在一组数中求最小值MIN,在一组数中求最大值MAX,求一组数的平均值AVG,求一组数的总和SUM等指令。
有的PLC还有三角函数,对数、指数,数值插值运算等指令。
随着PLC技术的发展,以及满足模拟量控制、脉冲量控制及通信的需要,运算指令越来越多,功能也越来越强。有的PLC可以进行PID运算,以适应比例、积分、微分的要求;可进行校验和运算,以适应通信数据校验的需要。
此外,还有种种逻辑运算指令。如“字与”、“字或”、“字异或”及“字同或”等指令。
……
提示:欧姆龙PLC进行BCD码加减运算时,进位位(CY)也是其运算成员。它既是运算原始数据(1或0)之一,又要存放运算结果(有进位或借位时置1,否则置0)。如加运算是Au(被加数)+Ad(加数)+CY→CY,R(结果)。如减运算是Mi(被减数)-Su(减数)-CY→CY,R。但其新型机,也有不像上述那样,包含进位位的BCD码加、减指令。
提示:西门子PLC除了用字、双字运算,还可用字节运算。西门子、三菱PLC所有整数运算都是带符号十六进制码,如单字,其值在-32718~32717之间变化。
提示:欧姆龙、三菱PLC整数单字乘,其积要占两个字;双字乘,要占4个字。整数单字除,其商占一个字(存于指定结果字的地址中),其余数占一个字(存于指定结果字地址+1的地址中);双字除,其“商”占2个字(存于指定结果字的地址及其加1的地址中),其“余数”占2个字(存于指定结果字地址+2及加3的地址中)。而西门子PLC通用的乘、除指令,其运算的积、商所占的字长,如同计算机,与参加运算的数相同。当其乘积(及加运算的和、减运算的差)超过相应字长,则出错,不能进行运算。数运算,不记录余数,除0也出错。但它也有带有记录余数的除指令(DIV)。这指令的目的操作数的长度则是参加运算数长度的2倍。
提示:为了正确使用运算指令,要使用好运算标志位,如进位位、溢出位、出错位、结果为0位等,以判断计算的正确性。对西门子PLC,还可利用执行指令后的ENO输出,观察运算是否执行。只是在各厂商、各型别的PLC间,这些标志位的含义多不大相同,如三菱FX机的借位标志(M8021),不是被减数比减数小ON,而是减的结果比-32768还要小才ON。
提示:同样是专用计算指令,如三角函数,各家PLC对其处理是不同的。如sin函数,当自变量大于360°(2π)时,FX2N机均按360°(2π)处理,而S7-200则与普通处理相同。所以,对一些运算指令,不妨先做些测试,然后再使用。
2.流程控制指令
PLC执行指令,一般总是从零地址开始执行,依次进行,直到最后一个指令为止。而且这个程序总是周而复始不断地重复着。但为了简化编程或减少扫描时间,或实现特殊控制,常常要改变程序的这个流程。
为此,PLC都设有控制程序流程的指令。主要有跳转、步进、循环、使用子程序及中断。
(1)跳转指令。欧姆龙机用的为JMP及JME。这两条配对使用。
JMP指令执行前,要建立逻辑条件。JME不要条件,只是表示跳转结束。要跳转的程序列于这两个指令之间。
当执行JMP时,若其逻辑条件为ON,则不跳转(注意:它与计算机汇编语言跳转含义相反),照样执行JMP与JME间的指令,如同JMP、JME不存在一样;若为OFF,则JMP与JME间的程序不执行,有关输出保持不变。JMP、JME可嵌套使用,但有时其层次要受限制的。JMP、JME编号使用时,配对的两个,编号要一致。
三菱与西门子PLC的跳转类似计算机汇编语言的跳转,若其逻辑条件为ON,则跳转到指定的标号的语句去执行。这种跳转情况稍复杂一些,使用时要小心。弄不好,易出现程序死循环。那是绝对不允许的。
图1-71所示为跳转指令使用示意。
图1-71 PLC的跳转指令使用示意
图1-71a为欧姆龙PLC的跳转,0.00 OFF时,JMP到JME之间的指令跳过,不执行。反之,执行。图1-71b为西门子的跳转,V500.1 ON时,跳转到LBL2处,被跳过的指令不执行。反之不跳,JMP后的指令依次执行。图1-71c为三菱的跳转,X000 ON时,跳转到标号P1处,被跳过的指令不执行。反之不跳,CJP后的指令依次执行。
不同厂商PLC跳转指令的差别,正如其他指令的差别一样,都只是大同小异。目的都是跳转,只是表达的方法各有其不同而已。
GE PLC也有跳转指令。执行时在JUMP和LABLE之间的程序被忽略,不执行;其中间的子程序不被调用;其中间的计时器当前值被保持;其中间程序的执行结果保持上一次的执行结果。注意的是JUMP和LABLE的名字必须一致;任意几个JUMP和LABLE之间不能交叉使用;JUMP和LABLE可以嵌套使用,其嵌套深度由CPU的类型决定。
当程序需要分支执行时,使用到跳转,不仅可实现编程要求,而且还可减少程序扫描时间,提高程序的运行效率。
与跳转类似的还有互锁、主控指令。欧姆龙PLC称互锁IL、互锁清除ILC指令。这两个指令在形式上,与跳转指令类似,也是要配对使用。但功能不同,它不改变程序流程,只是像电路的“总开关”一样,影响IL与ILC间的程序执行,如图1-72所示。
图1-72中“正常执行”意指,“总开关”合上,不影响IL与ILC间的程序执行。“输出互锁”意指,“总开关”断开,IL与ILC间的程序执行条件全为OFF,即其间的输出全被互锁住。IL与ILC可嵌套使用。
图1-72 互锁和互锁清除指令示意图
图1-73 所示为主控指令及其使用。
图1-73a、b所示为三菱PLC的主控指令及其使用。图1-73a为处于写状态时的梯形图。其中MC及MCR之间的指令执行,受执行条件X000(可以是别的)控制。X000 ON,则M0 ON,之间的指令正常执行。否则,输出互锁。图1-73b所示为处于读状态时的梯形图。这里“总开关”的作用显示得很形象。指令中的N0为配对主控指令使用的编号。当然,MC与MCR的编号要一致。MC与MCR也可嵌套使用。
该图1-73c所示为西门子S7300、400的主控指令。MCRA(主控指令激活)及MCRD(主控指令激活停止)是配对的,只有在主控指令激活区中主控指令才有效。MCR<(主控继电器ON)及MCR>(主控继电器OFF)也是配对使用,而且也可嵌套。图1-73c为2层。
图1-73 主控指令及其使用
这里的几个主控指令的作用如本例是:当I0.0及I0.1 ON,则Q4.0及Q4.1的状态分别取决于I0.3、I0.4,如同这里不存在这几个主控指令一样;当I0.0 ON及I0.1 OFF,则Q4.1的状态取决于I0.4,如同这里不存在这第1层的MCR<、MCR>一样,而Q4.0则必OFF,不管I0.3的状态如何;当I0.0 OFF,则Q4.0、Q4.1的均OFF,不管I0.3、I0.4及I0.1的状态如何。要说这里的特别之处是在MCR<之前,须先执行MCRA,而在MCR>之后,要执行MCRD。
GE PLC也有类似指令。它称之谓分支指令(MCR、ENDMCR)。执行MCR指令逻辑条件不具备,则:MCR和END_MCR之间的程序被忽略,不执行;其中间的子程序不被调用;其中间计时器当前值被清;其中间所用的常开线圈被复位。而使用时要注意的是,MCR和END_MCR要指明名字,而且者两名字必须一致;任意几个MCR和END_MCR之间不能交叉使用;MCR和END_MCR可以嵌套使用,其嵌套深度由CPU的类型决定。
(2)步进指令。工作设备工作,或一些工艺过程往往分成步,按步进行。一个步完成了,再转入另一个步。可以有很多步。步,可以按顺序工作,也可依条件产生分支,改变顺序。需要时,还可多步并行工作……
为此,PLC多设有步进指令。步进指令有步程序入口、步(进)程序结束、步程序调用(激活)等。表1-12为这三家PLC的步进指令。
表1-12 PLC的步进指令
步进指令的要点是:
1)只有已激活的步的程序才被扫描,才被执行;
2)在已激活步中,如激活了后续步,则自然处于非激活状态;
3)在程序中,可任意把某步激活;
4)当某步激活后,原来激活它的条件变化,不再对其产生影响。
步进程序可以顺序地被调用,直至最后一步。也可以分支调用,依条件按不同的分支进行。也可以平行调用,条件具备时,可同时调两个步程序,然后再依各的情况再一步步推进,直到退出步进程序,返回主程序。
图1-74所示为三家PLC用于步进指令及其使用例子。
图1-74 步进指令及其使用例子
图1-74a为欧姆龙PLC步进指令及其使用。它用W0.00等(内部工作区)作为步标识。当0.00 ON,步W0.00被激活,A段程序(在虚线处,程序未画出,下同)被扫描、被执行。这时,如0.01 ON,则W0.01步激活,并退出W0.00步,B段程序被扫描、被执行。这时,如0.2ON,则W100.00步激活,并退出W0.01步。但如程序中无此步,则意味着退出步进程序。OM-RON无步及整个步进程序结束指令。
提示:欧姆龙PLC用的标识B可以是任何继电器。而其他两家PLC的标识B只能是状态继电器S。
提示:欧姆龙PLC所有步进指令应放在其他主程序之后,子程序(见后)之前。如果主程序放在它之后,那这部分主程序将不执行;如把它放在子程序之后,那它也将不执行。
图1-74b为西门子PLC步进指令及其使用。它用S0.0等作为步标识。当I0.0 ON,步S0.0被激活,A段程序被扫描、被执行。这时,如I0.1 ON,则S0.1步激活,并退出S0.0步,B段程序被扫描、被执行。这时,如I0.2 ON,则S0.1复位,退出W0.1步。图1-74b每步程序都有结束指令(SCRE)。
图1-74c为三菱PLC步进指令及其使用。它用S0等作为步标识。当X000 ON,步S0被激活,A段程序被扫描、被执行。这时,如X 001 ON,则S1步激活,并退出S0步,B段程序被扫描、被执行。这时,如X002 ON,则S1复位,退出S1步。图1-74c中RET指令代表步进程序结束。
提示:欧姆龙PLC调新步时,旧的步先OFF,然后,新的步才ON。即新的与旧的步从不同时工作。而三菱PLC、西门子PLC,则是新的步先ON后,旧的步才OFF,即新、旧的步将同时ON一个扫描周期。
提示:三菱PLC步进程序,还可用SFC语言编程。
(3)循环指令
它由FOR和NEXT两条指令组成,配对使用。FOR为循环开始,而NEXT为循环结束。其功能是,使这两条指令间的指令,按指定的次数,重复执行。重复多少次,则在FOR指令中指明。
FOR-NEXT循环可嵌套,但层数是有限制的。其限制的约定,随PLC型别而定。图1-75所示为三家PLC用于两层嵌套的使用例子。
图1-75 FOR-NEXT指令及其嵌套使用
从图1-75可知,这里外层都是重复执行3次,而内层2,则执行2次。程序段A,B和C都是如下执行:A→B→B→C,A→B→B→C,A→B→B→C。
执行循环程序时,如需要临时退出,对欧姆龙PLC可在需退出处,用BREAK指令。若要从嵌套循环中退出,则需要多个(嵌套层数)BREAK指令。而西门子、三菱PLC则可用跳转指令,指定跳到循环外的某标号处。西门子还可用INDX值处理。每当执行一次循环,INDX值将加1。当它大于、等于FINAL值时,也可退出循环。此外,它的FOR指令还要求先设置逻辑条件,如图1-75b所示,I2.0 ON(对1)及I2.1ON(对2)即为它们的逻辑条件。
(4)子程序
在程序中,常有一些要重复使用的一组组指令,用以实现某些特定的功能。若把一组组指令编成子程序,则可大大简化编程。使用子程序还便于程序的阅读及修改。
子程序指令总是含子程序入口、子程序结束标志及子程序调用等指令。表1-13所示为三家PLC用的子程序指令。表中N为子程序标号。
表1-13 PLC子程序指令
子程序指令的要点是:
1)子程序入口到子程序结束指令间的程序为子程序;
2)在一个程序中,可以有多个子程序,用标号N相区别;
3)不是子程序的其他程序为主程序;
4)西门子PLC的子程序安排在不同标号的单独程序模块中,因此,它无入口指令,也无需结束指令;
5)OMRON、三菱PLC子程序安排在主程序之后END指令之前,但三菱PLC的主程序之后,要加主程序结束指令(FEND),子程序则放在FEND指令之后;
6)在主程序中,可用相应指令调用子程序,被调用一次,则被扫描、被执行一次,可多次使用;
7)在子程序中,也可用相应指令调用其他子程序,但不能调自身,即可嵌套,但不能递归。调的层数也是受限制的,其限制的约定,随PLC型别而定;
8)子程序一旦调用,总是从入口直到结束。但西门子可用RET指令,于中途退出,而其他两家PLC则可用跳转指令中途退出。
图1-76所示为三家PLC子程序指令及其使用。
从图1-76可知,当调用子程序逻辑条件成立(如图中0.00、I0.0、X000 ON),则都将转去执行子程序,执行后,再接着执行主程序的后续部分。如图中0.02 OFF及I0.2、X002 ON,则在子程序中,执行A部分程序后,中途退出;否则,执行A、B两部分程序都执行完,才退出。
提示:所有的子程序都要安排在主程序的后面,在END指令之前。不然,子程序后的主程序指令将不被执行。
对一些多任务编程的PLC,其子程序还有全局与局部之分。局部子程序只能用于本任务。要想所有任务都能调用,要用全局子程序。
如欧姆龙CJ系列PLC,全局子程序指GSBN(751)和GRET(752)之间的程序段。调用指定编号的全局子程序,要用全局子程序调用指令GSBS(750)。
三菱Q系列等中、大型机除了用CALL正常调用子程序。还有FCALL(输出OFF调用)、ECALL(程序文件之间子程序调用)、XCALL等指令。
图1-76 子程序指令及其使用
提示:西门子S7-200机的子程序可带参数。参数用子程序的局部变量自行定义。参数有子程序输入(IN)、输出(OUT)及输入、输出(IN-OUT)兼而有之,三种。在调子程序时,输入参数要写在输入端;输出参数要写在输出端;输入、输出参数既要写在输入端,又要写在输出端。当然,如不定义局部变量,将不带参数。具体运用实例见本书第2章第2.6.2节。
提示:欧姆龙、三菱小型机的子程序不带参数。但在调用前可作预处理,调后再作后处理,也可起到带参数的作用。欧姆龙PLC还有宏调用,类似于带参数子程序。只是它的参数使用限制较多。
提示:三菱Q系列等中、大型机的子程序也可带参数。但位参数只有输入、输出。并要用专用内部器件,即功能软元件FX(入)、FY(出)、FD(寄存器)作形式参数。同时也有宏。宏的形式参数也要用专用内部器件(VX、VY、VD)。
(5)中断
中断也是调子程序,但它不是靠指令调,而是靠中断事件调。且调的子程序编号与所发生的事情对应。这些子程序有时还称为中断服务程序。
PLC中断事件可以来自外部,也可来自内部。前者称外中断,后者称内中断。
外部中断用输入点。当可中断工作(取决于机型及设定)的输入点,从OFF到ON的时,则发生与其对应的中断事件,并调相应的中断服务程序。每发生一次中断事件,则调一次中断服务程序。有了这样中断,可缩短PLC对输入信号的响应时间。
此外,高速计数信号输入,也会产生多种中断。如计数中断,可输入高速脉冲的输入点(取决于机型及设定),输入高速脉冲会自动中断计数;再如比较中断,中断计数后,会自动进行中断比较;最后,还可根据中断比较结果,调用相应的中断子程序。
再,有的PLC,如西门子S7-200系列,还有通信中断。收到字符,或发送字符及出错等,都会引起相应的中断。
内部中断的事件来自PLC内部。典型的内部中断为定时中断,经设定可准确定时运行相应的中断程序。
为了处理好中断,提高程序的控制可靠性与效率,PLC提供了有关的中断处理指令。表1-14所示为三家PLC的一些有关的中断指令。
表1-14 PLC的一些有关的中断指令
注:∗仅用于小型机定时中断;∗∗中断事件与子程序的关系是确定的。
中断允许、禁止指令用于确定,在运行程序时,是否允许中断。当程序的某一部分不允许中断时,可用中断禁止指令;某一部分允许中断时,可用中断允许指令。
提示:欧姆龙PLC默认为中断允许。而三菱、西门子PLC则默认中断不允许。为此,后者,要使用中断,需先允许中断,而前者,做好有关设定就可以了。
设定中断屏蔽是为了确定是否允许某个内、外中断事件产生。如可外中断的输入点,可设定其为从OFF到ON产生中断,也可相反,也可不让其产生中断。
提示:中断允许与中断屏蔽是两个概念,前者是指,所运行的程序是否允许接受中断,后者是指,是否允许中断事件出现后产生中断。前者可用指令处理,而后者多为通过相关设定处理。
PLC处理中断事件是有个过程的。当发生中断事件时,PLC总是先记录发生的事件,并对其按优先级对其排队。优先级高的先执行,它执行完了,再执行优先级低的。所有中断任务处理完了,再转回执行正常的循环程序。一般讲,优先级与中断的任务号是对应的。中断编号越小,优先级越高。
要注意的是,已记录但未执行的中断,其后又发生相同的事件,PLC对此将不理睬。所以,不是发生的所有中断事件都会处理的。另外,对已作记录,但未执行的外中断任务,可用CLI指令取消。
提示:三菱中断子程序入口编号开始字符为I(不同的事件,有不同的编号),而不是P;子程序结束指令为IRET,而不是SRET。
提示:对多任务编程或模块化组织的PLC,它不调子程序,而是调用POU。
如果在一个I/O中断任务正在执行时,接收到一个不同的中断输入,输入的中断号在内部被记录,直至当前任务和其他较高优先级别的任务执行完毕。
以上只是对有关PLC的有关指令系统作些简要介绍。只是希望读者能从总体上,或从功能上理解它。至于指令的细节,请参阅有关说明书。
提示:弄通PLC指令,除了仔细阅读有关说明书,最好的方法是对指令作模拟或联机实际测试。在实际测试中理解要点与细节。
1.4.4 功能、功能块
1.概述
PLC系统提供的功能与功能块也是PLC指令系统的重要组成部分。目前的趋势是指PLC指令在减少,但代替它以至于比它功能更强的功能与功能块越来越多。
传统PLC也有功能、功能块。如西门子S7-300、400的FB41(CONT_C)、FB42(CONT_S)、FB43(PULSEGEN)功能块(FB),可很方便地用以实现模拟量的PID控制。这些功能块将在随后的有关编程介绍中再作说明。
再如欧姆龙新型PLC也新增系统功能块,在安装编程软件后,会自动加载到欧姆龙软件目录下的“Lib\FBL\omronlib”子文件夹中。而该文件夹下还有“PLC”、“Inverter”、“Position Con-troller”、“Temperature Controller”等若干子文件夹。这些子文件夹还含有多个子文件夹。如“PLC”文件夹下,就有“ENT”、“CLK”、“CPU”、“SCx”、“UNIT”、“CARD”等文件夹。在这些文件夹中,就有cxf文件。将这些文件加载到工程中,分别就会生成一个功能块,就可在工程程序中调用。
调用功能块与调用定时器之类指令基本一样,但要指定实例名。同时,还要对功能块的输入赋值,输出指定目标地址。
例如“PLC\CPU”文件夹中的CPU005_TOF_BCD.cxf文件,加载后生成的系统功能块是CPU005_TOF_BCD,其功能是实现输入从ON到OFF时输出OFF的延时。实际是OFF延时定时器。欧姆龙PLC原来只有ON延时定时器,有了此功能块也就有了OFF延时定时器了。图1-77所示为此功能块一个调用实例。
在该图程序中,“p_On”为常ON触点,以功能块使能“EN”ON,表示此功能块一直在调用。“tof1”为此功能块的实例名。功能块输入“IN”由“I:0.00”赋值,“I:0.00”ON,则“IN”ON,“I:0.00”OFF,则“IN”OFF。功能块输入“PT”,即定时设定值,为BCD码,单位为100ms。在此赋值为常数50,即设定延时5s。功能块输出“ENO”指定的目标地址为“10.00”。功能块延时OFF就是由它实现。功能块输出“ET”,即延时现值,指定的目标地址为“D0”,也为BCD码,单位也为100ms。
图1-77 OFF延时功能块一个调用实例
由此功能块的功能可知,执行此程序:“I:0.00”ON,“10.00”即时ON;“I:0.00”OFF,“10.00”延时5s后OFF。延时过程值将显示在“D0”中。
其他系统功能块各有各的功能,在此不再赘述。
可知,系统功能块实际上也是PLC指令,而且是功能更强的指令。新增功能块可方便地扩展PLC的指令系统,增加PLC的功能,使系统升级。而且系统功能块是按需加载。不用的不加载,不占PLC内存。
提示:西门子PLC系统功能块多为不可视的。国产PLC,LM及LK机的系统功能块多是可视,又可复制。欧姆龙系统功能块可视,但不能复制。
2.有关PLC定时功能块
新型PLC多不用定时指令而用定时功能块。类型很多。其中TON(其常开触点延时通、即时断),用以进行定时或时间控制,较为常用。图1-78所示为AB等多家PLC定时功能块梯形图符号。
图中,T1为该功能块的实例名,是结构变量。使用前要先定义,要占用PLC数据区。该结构有多个分量,如图所示。IN(或仅有输入线)为输入控制,为布尔量。它ON时,定时功能块工作,OFF,停止工作。PT(或Pre-set、PV)为时间设定值输入端。设定值用时间类型变量或时间类型常数。设定时间的最小分辨率为毫秒(GE PLC可以为秒、十分之一秒、毫秒或其他,由选用功能块决定)。Q(或DN、输出线)为控制输出,布尔量。定时功能块计时的时间达到或超过设定时间,则产生这个输出。它的常开触点(T1.Q)ON、常闭触点OFF。ET(或Accum、CV)为定时功能块计时所经历的时间。数据也是时间类型。IN ON开始经历时间显示。到设定时间值时,显示设定时间值。INOFF或T1.R(复位端)ON,则恢复0,并停止输出。
从上介绍可知,这样的定时功能块,其功能与延时定时器指令完全相同。所差的只是这里操作数为实例名,数据类型为结构,使用的数量几乎不受限制;而定时指令的操作数是定时器这样内部器件,使用的数量受PLC拥有的定时器数量限制。
图1-78 有关PLC定时功能块
3.有关PLC计数功能块
有增计数、减计数及可逆计数等功能块。以下仅对最为常用增计数功能块做简要介绍。其格式如图1-79所示。
这里C1为该功能块的实例名,是结构变量。使用前要先定义,要占用PLC数据区。该结构
图1-79 多种PLC增计数功能块
有多个分量,如该图所示。CU(图1-79a为Count up)为增计数输入端。R或RESET为复位端(AB计数器复位要用复位(R)指令)。PV或Preset设定(预置)值输入端。Q输出端。CV计数功能块计数现值。
如图,每当CU(或Count up)端从OFF到ON一次,C1作增1计数。当计到设定值,如图为10,或大于设定值,则输出端Q(或DN)ON。且继续计数,直到最大值(此值可选,单字、双字还可考虑符号位)。而当RESET ON,计数功能块复位(现值变为0),停止计数,输出OFF。
图中EN、ENO及图1-79a的CU为附加的。但只有EN处于ON状态,才可计数。而且只要计数正常ENO则ON。
从上介绍可知,这样的计数功能块,其功能与增计数器指令完全相同。所差的只是这里操作数为实例名,数据类型为结构,使用的数量几乎不受限制;而增计数指令的操作数是计数器这样内部器件,使用的数量受PLC拥有的计数器数量限制。
4.其他功能及功能块
除了上述定时、计数功能块,还有其他功能更强的功能块。这些功能块都封装在有关库中。如施耐德PLC就有:标准库、控制库、通信库、I/O管理库、运动库、系统库、诊断库、先期库、TCP Open库及运动功能块等。至于库中都有哪些功能块则与具体选用的PLC有关。
AB PLC的库也封装在它的编程软件中。以系统预定义的数据类型形式调用。
和利时LEC G3机的功能或功能块也称扩展指令。也是封装在相应指令库中。如果使用封装在Standard.lib(标准库)和SYSLIBCALLBACK.lib(系统库)中的扩展指令,直接调用就可以了。因为在创建工程时,这两个库中所有指令会自动加载到编程系统中。对封装在其他库中的扩展指令,在调用前,需用PowerPro编程软件的库管理器先行加载。然后才可使用。
和利时LEC G3机的指令库很多,而且是开放的,可以不断添加和生成新的指令(即函数、功能块)。因而,从某种意义上讲,它的指令数量及种类是无限多的,并可根据需要增减。
具体讲它的指令库可分为三类。
第一类:PowerPro内部开放指令库。指令执行代码存在于库文件之中,可以使用PowerPro软件打开库文件,可对指令的执行代码进行修改。用户也可以自己开发新的指令,存放在内部开放指令库中。当程序下装到PLC之中,占用用户程序空间较大。
第二类:PowerPro内部不开放指令库。指令执行代码存在于“库名 .hex”文件之中,用户无法使用PowerPro软件打开库文件,不能对指令的执行代码进行修改。使用时应保证hex文件的文件名与lib文件的文件名一致,且存在于同一目录下。当程序下装到PLC之中,占用用户程序空间较大。
第三类:PowerPro外部指令库。指令执行代码已经存在于PLC底层系统之中,用户无法修改此类库所包含的执行代码。当程序下装到PLC之中,占用用户程序空间较少。
分清这三类指令库,将有助于读者对LEC G3 PLC指令系统的理解,进而更好地使用LEC G3PLC机指令资源。
LEC G3 PLC指令库一经添加,即使不调用其中的指令,也会占用用户程序空间,因此在实际编程过程中,建议只添加需要的库。
已加载的库文件也可用库管理器予以去除。
“库管理器”是它的编程软件的一部分。其窗口如图1-80所示。在PowerPro的主菜单“窗口”下的“库管理器”项,或在“对象组织器”选定“资源”,再单击其上的“库管理器”,即可弹出。这时,再单击插入主菜单项,将弹出“打开”对话框。
从图1-80可选择扩展名为“Lib”的库文件,加载到所用编程软件的平台中。如图1-80所示,若单击“打开”,则把Iecsfc库文件加载。卸载,可在窗口的左上方选定要卸载的文件,再按键盘的“delete”键,待弹出对话框,再单击“是”即可。
图1-80 库管理器窗口