购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 功能指令

2.2.1 比较指令

S7-1200 PLC共有10个常见的比较指令,见表2-5,用于比较数据类型相同的两个数IN1与IN2的大小,操作数可以是I、Q、M、L、D等存储区中的变量或常量。在比较指令中,当满足比较关系式给出的条件时,等效触点接通。

表2-5 比较指令

表2-6为等于、不等于、大于等于、小于等于、大于、小于等多种比较指令触点的满足条件,其前提是要比较的两个值必须具有相同的数据类型。

表2-6 比较指令触点的满足条件

下面以“大于等于”比较指令为例进行说明。图2-1(a)为可以使用“大于等于”指令确定第一个比较值(<操作数1>)是否大于等于第二个比较值(<操作数2>),可以通过指令右上角黄色三角的第一个选项来选择大于等于指令,如图2-2(b)所示,也可以通过右下角黄色三角的第二个选项来选择数据类型,如整数、实数等,如图2-2(c)所示。

图2-1 大于等于比较指令

(1)CMP==:等于

可以使用“等于”指令判断第一个比较值(<操作数1>)是否等于第二个比较值(<操作数2>)。如果满足比较条件,则指令返回逻辑运算结果(RLO)“1”。如果不满足比较条件,则指令返回RLO“0”。

(2)CMP<>:不等于

使用“不等于”指令判断第一个比较值(<操作数1>)是否不等于第二个比较值(<操作数2>)。如果满足比较条件,则指令返回逻辑运算结果(RLO)“1”。如果不满足比较条件,则指令返回RLO“0”。

(3)CMP>=:大于或等于

可以使用“大于或等于”指令判断第一个比较值(<操作数1>)是否大于或等于第二个比较值(<操作数2>)。如果满足比较条件,则指令返回逻辑运算结果(RLO)“1”。如果不满足比较条件,则指令返回RLO“0”。

(4)CMP<=:小于或等于

可以使用“小于或等于”指令判断第一个比较值(<操作数1>)是否小于或等于第二个比较值(<操作数2>)。如果满足比较条件,则指令返回逻辑运算结果(RLO)“1”。如果不满足比较条件,则该指令返回RLO“0”。

(5)CMP>:大于

可以使用“大于”指令确定第一个比较值(<操作数1>)是否大于第二个比较值(<操作数2>)。如果满足比较条件,则指令返回逻辑运算结果(RLO)“1”。如果不满足比较条件,则指令返回RLO“0”。

(6)CMP<:小于

可以使用“小于”指令判断第一个比较值(<操作数1>)是否小于第二个比较值(<操作数2>)。如果满足比较条件,则指令返回逻辑运算结果(RLO)“1”。如果不满足比较条件,则指令返回RLO“0”。

除了上述常见比较指令,还有EQ_Type等其他比较指令,见表2-7。

表2-7 比较指令及说明

2.2.2 移动指令

1. MOVE指令

MOVE指令是将数据元素复制到新的存储器地址,移动过程中不更改源数据,如图2-2所示,将IN输入操作数中的内容传送给OUT1输出操作数中,并始终沿地址升序方向传送。如果使能输入EN的信号状态为“0”或IN参数的数据类型与OUT1参数的指定数据类型不对应,则使能输出ENO的信号状态为“0”

图2-2 MOVE指令

MOVE指令可传送的数据类型见表2-8。

表2-8 MOVE指令可传送的数据类型

在MOVE指令中,若IN输入端数据类型的位长度超出了OUT1输出端数据类型的位长度,则传送源值中多出来的有效位会丢失。若IN输入端数据类型的位长度小于OUT1输出端数据类型的位长度,则用0填充传送目标值中多出来的有效位。

在初始状态,指令框中包含1个输出(OUT1),可以用鼠标单击图符 扩展输出数目。在该指令框中,应按升序排列所添加的输出端。执行该指令时,将IN输入端操作数中的内容发送到所有可用的输出端。如果传送结构化数据类型(DTL,Struct,Array)或字符串(String)的字符,则无法扩展指令框。MOVE指令的多个变量输出如图2-3所示。

2. MOVE_BLK指令

MOVE_BLK指令如图2-4所示,可将存储区(源区域)中的内容移动到其他存储区(目标区域)中,实现块移动功能,使用参数COUNT可以指定待复制到目标区域中的元素个数,通过IN输入端的元素宽度指定待复制元素的宽度,并按地址升序执行复制操作。

图2-3 MOVE指令的多个变量输出

图2-4 MOVE_BLK指令

3. UMOVE_BLK指令

UMOVE_BLK指令如图2-5所示,可将存储区(源区域)中的内容连续复制到其他存储区(目标区域)中,实现无中断块的移动功能,使用参数COUNT可以指定待复制到目标区域中的元素个数,可通过IN输入端的元素宽度来指定待复制元素的宽度。

4. FILL_BLK指令

FILL_BLK指令如图2-6所示,用IN输入的值填充一个存储区域(目标区域),用OUT输出指定的起始地址填充目标区域,实现填充块功能,可以使用参数COUNT指定复制操作的重复次数。执行该指令时,将选择IN输入的值,并复制到目标区域COUNT参数中指定次数。

图2-5 UMOVE_BLK指令

图2-6 FILL_BLK指令

5. SWAP指令

SWAP指令可以更改输入IN中字节的顺序,并在输出OUT中查询结果,实现交换功能。SWAP指令应用示意图如图2-7所示,说明了如何使用“交换”指令交换数据类型为DWord操作数的字节。表2-9为SWAP指令的参数。

图2-7 SWAP指令应用示意图

表2-9 SWAP指令的参数

2.2.3 数学运算指令

在数学运算指令中,ADD、SUB、MUL和DIV分别是加、减、乘、除指令,其操作数的数据类型可选SInt、Int、 DInt、 USInt、 UInt、 UDInt和Real等。在运算过程中,操作数的数据类型应该相同。

1. 加法(ADD)指令

加法指令可以从TIA软件右边指令窗口的“基本指令”→“数学函数”中直接添加,如图2-8(a)所示。使用ADD指令时,根据如图2-8(b)所示选择数据类型,将输入IN1的值与输入IN2的值相加,并在输出OUT(OUT = IN1+IN2)处查询总和。

在初始状态下,指令框中至少包含两个输入(IN1和IN2),可以用鼠标单击图符 扩展输入数目,如图2-8(c)所示,在功能框中按升序对插入的输入编号,执行该指令时,将所有可用输入参数的值相加,并将求得的和存储在输出OUT中。

图2-8 ADD指令

表2-10列出了ADD指令的参数。根据参数说明,只有使能输入EN的信号状态为“1”时才执行该指令。如果成功执行该指令,则使能输出ENO的信号状态也为“1”。如果满足下列条件之一,则使能输出ENO的信号状态为“0”:

① 使能输入EN的信号状态为“0”;

② 指令结果超出输出OUT指定数据类型的允许范围;

③ 浮点数具有无效值。

表2-10 ADD指令的参数

2. 减法(SUB)指令

如图2-9所示,可以使用减法(SUB)指令从输入IN1的值中减去输入IN2的值,并在输出OUT(OUT = IN1-IN2)处查询差值。SUB指令的参数与ADD指令的参数相同。

3. 乘法(MUL)指令

如图2-10所示,可以使用乘法(MUL)指令将输入IN1的值乘以输入IN2的值,并在输出OUT(OUT = IN1*IN2)处查询乘积。与ADD指令一样,可以在指令功能框中扩展输入的数字,并在功能框中以升序对相乘的输入编号。表2-11为MUL指令的参数。

图2-9 SUB指令

图2-10 MUL指令

表2-11 MUL指令的参数

4. 除法(DIV)和返回除法余数(MOD)指令

DIV和MOD指令如图2-11所示。需要注意的是,MOD指令只有在整数相除时才能应用。

图2-11 DIV和MOD指令

除了上述运算指令,还有MOD、NEG、INC、DEC和ABS等数学运算指令,具体说明如下:

(1)MOD指令:除法指令只能得到商,余数被丢掉,MOD指令可以用来求除法的余数。

(2)NEG指令:将输入IN的值取反,保存在OUT中。

(3)INC和DEC指令:参数IN/OUT的值分别加1和减1。

(4)绝对值指令ABS:求输入IN中有符号整数或实数的绝对值。

对于浮点数函数运算,其梯形图和对应的描述见表2-12。

表2-12 浮点数函数运算梯形图和对应的描述

2.2.4 其他功能指令

1. 转换操作指令

如果在一个指令中包含多个操作数,则必须确保数据类型是兼容的。如果操作数不是同一数据类型,则必须进行转换,转换方式有两种。

(1)隐式转换

如果操作数的数据类型是兼容的,则由系统按照统一规则自动执行隐式转换。可以根据设定的严格或较宽松的条件进行兼容性检测,例如块属性中默认的设置为执行IEC检测,自动转换的数据类型相对要少。编程语言LAD、FBD、SCL和GRAPH支持隐式转换。编程语言STL不支持隐式转换。

(2)显式转换

如果操作数的数据类型不兼容或者由编程人员设定转换规则,则可以进行显式转换(不是所有的数据类型都支持显式转换)。显式转换指令及说明见表2-13。

表2-13 显式转换指令及说明

2. 移位和循环指令

移位指令可以将输入参数IN中的内容向左或向右逐位移动。循环指令可以将输入参数IN中的全部内容循环地逐位左移或右移,空出的位用输入IN移出位的信号状态填充,可以对8位、16位、 32位及64位的字或整数进行操作。移位和循环指令及说明见表2-14。

表2-14 移位和循环指令及说明

字移位指令的移位范围为0~15。双字移位指令的移位范围为0~31。长字移位指令的移位范围为0~63。对字、双字和长字移位指令,移出的位信号丢失,移空的位用0补足。例如将一个字左移6位,移位前后位排列次序如图2-12所示。

图2-12 左移6位

带有符号位整数的移位范围为0~15。双整数的移位范围为0~31。长整数的移位范围为0~63。只能向右移,移出的位丢失,移空的位用符号位状态补足。如整数为负值,符号位为1;整数为正值,符号位为0。例如,将一个整数右移4位,移位前后位排列次序如图2-13所示。

图2-13 右移4位

3. 字逻辑运算指令

字逻辑运算指令可以对Byte(字节)、Word(字)、DWord(双字)或LWord(长字)逐位进行“与”“或”“异或”逻辑运算操作。“与”操作可以判断两个变量在相同的位数上有多少位为1,通常用于变量的过滤,例如一个字变量与常数W#16#00FF相“与”,则可以将字变量中的高字节过滤为0。“或”操作可以判断两个变量中为1位的个数。“异或”操作可以判断两个变量中有多少位不相同。字逻辑运算指令还包含编码、解码等操作。字逻辑运算指令及说明见表2-15。

表2-15 字逻辑运算指令及说明

2.2.5 【实例2-1】用一个按钮控制5盏照明灯先亮后灭

实例说明

某房间用一个按钮来控制5盏照明灯,以达到调节房间亮度的目的。现在由S7-1200 CPU 1215C DC/DC/DC作为一个控制器接入按钮和照明灯,要求每按一次按钮增加1盏照明灯,等照明灯全部亮起来后,每按一次按钮,灭1盏照明灯,灭照明灯的顺序是先亮的后灭、后亮的先灭。

实施步骤

步骤1:电气接线和输入/输出定义

图2-14为电气原理图。表2-16为输入/输出定义。

图2-14 电气原理图

表2-16 输入/输出定义

步骤2:PLC编程

根据实例要求,可以设置一个变量MW10(灯控制字),当MW10=0时为开始状态;按下启动按钮,MW10可以依次加1(INC指令),直到MW10=5,这个过程为逐渐亮灯过程;MW10=5之后,进入灭灯过程,此时MW0仍执行依次加1(INC指令),直到MW10=9;当MW10=10时,自动赋值为0,进行下一轮循环。

对于先亮后灭的方式,可以得出如下规律:MW10≥1时,EL1亮;MW10≥2且MW10<9时,EL2亮;MW10≥3且MW10<8时,EL3亮;MW10≥4且MW10<6时,EL4亮;MW10=5时,EL5亮。这个逻辑可以采用“>=”等比较指令实现,梯形图如图2-15所示。

图2-15 【实例2-1】的梯形图

图2-15 【实例2-1】的梯形图(续)

小贴士

灯控制字的引入是本实例的要点。它构成了一个反复循环的过程。另外,如果有先亮先灭控制顺序要求的话,则只需要修改程序段3中的判断逻辑即可。

2.2.6 【实例2-2】用一个按钮控制5盏照明灯依次亮、灭

实例说明

PLC按照既定的亮、灭要求,用一个按钮来控制5盏照明灯,比如每次按次序点亮1盏照明灯,即第1次按下按钮亮第1盏照明灯,其余照明灯灭;第2次按下按钮亮第2盏照明灯,其余照明灯灭,依此类推,第5次按下按钮亮第5盏照明灯,其余照明灯灭;再按1次按钮,照明灯全灭,进入新的循环。

实施步骤

步骤1:电气接线和输入/输出定义

电气接线和输入/输出定义同【实例2-1】。

步骤2:梯形图编程

表2-17是亮、灭规律与变量情况。其中,MW8作为灯控制字,可实现0~5随按钮动作变化;QB0直接与Q0.0~Q0.4相连,用MOVE指令实现照明灯的输出控制,可以实现任何规律的亮、灭要求。

表2-17 亮、灭规律与变量情况

图2-16为梯形图,程序说明如下:

图2-16 【实例2-2】的梯形图

图2-16 【实例2-2】的梯形图(续)

程序段1:通过初始化M1.0变量将照明灯亮、灭存放变量MB10~MB14、控制字MW8按要求设置。

程序段2:通过按钮实现MW8按0→1→…→5→0变化。

程序段3:按照表2-17的亮、灭规律与变量情况实现照明灯输出控制。

小贴士

照明灯亮、灭规律可以直接存放在MB10开始的字节,也可以为其他任何形式的流水灯、先亮先灭、先亮后灭、间隔点亮等要求提供借鉴方案。 zs0pOARU7vSqSVBAjpj+lxbgYglpFfITa/MrpDZRCiPElYuHbIEI61MKcvvd1ipz

点击中间区域
呼出菜单
上一章
目录
下一章
×