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

2.4 比较、运算和移动指令

2.4.1 比较指令

如图2-48所示,西门子S7-1200 PLC有10个比较操作,用来比较数据类型相同的两个操作数的大小。操作数可以是I/Q/M/L/D存储区中的变量或常量。当满足比较关系式给出的条件时,等效触点就会接通。

图2-48 比较操作

表2-20为等于、不等于、大于等于、小于等于、大于、小于等6种比较指令触点的满足条件。

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

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

图2-49 “等于”比较指令的应用

如果满足条件,则返回比较结果(RLO)“1”。如果不满足条件,则返回比较结果(RLO)“0”。比较结果(RLO)通过以下方式与当前路径的比较结果(RLO)进行逻辑运算:

①串联比较指令,采用“与”运算;

②并联比较指令,采用“或”运算。

指定比较指令上方操作数占位符中的第一个比较值(<操作数1>)。指定比较指令下方操作数占位符中的第二个比较值(<操作数2>)。比较字符串通过字符的ASCII码进行比较,如“a”大于“A”,从左到右执行比较,第一个不同的字符决定比较结果。

表2-21为值在范围内、值在范围外、检查有效性、检查无效性等4种比较指令的满足条件。

表2-21 4种比较指令的满足条件

2.4.2 运算指令

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

1.加(ADD)指令

西门子S7-1200 PLC的加(ADD)指令可以从“基本指令”下的“数学函数”中直接添加,如图2-50(a)所示,根据如图2-50(b)所示选择数据类型,将输入IN1的值与输入IN2的值相加,在输出OUT(OUT=IN1+IN2)处查询相加结果。

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

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

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

图2-50 加(ADD)指令的应用

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

③浮点数为无效值。

表2-22 加(ADD)指令的参数

图2-51举例说明了加(ADD)指令的工作原理:如果操作数%I0.0的信号状态为“1”,则执行加(ADD)指令,将操作数%IW64的值与%IW66的值相加,相加结果存储在操作数%MW0中。如果加(ADD)指令执行成功,则使能输出ENO的信号状态为“1”,同时置位输出%Q0.0。

图2-51 加(ADD)指令的工作原理

2.减(SUB)指令

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

图2-53举例说明了减(SUB)指令的工作原理:如果操作数%I0.0的信号状态为“1”,则执行减(SUB)指令,从操作数%IW64的值中减去%IW66的值,并将相减结果存储在操作数%MW0中。如果减(SUB)指令执行成功,则使能输出ENO的信号状态为“1”,同时置位输出%Q0.0。

图2-52 减(SUB)指令形式

图2-53 减(SUB)指令的工作原理

3.乘(MUL)指令

如图2-54所示,可以使用乘(MUL)指令将输入IN1的值乘以输入IN2的值,并在输出OUT(OUT=IN1*IN2)处查询相乘结果,与加(ADD)指令一样,可以在指令框中扩展输入数目,按升序对扩展的输入进行编号。表2-23为乘(MUL)指令的参数。

图2-54 乘(MUL)指令形式

表2-23 乘(MUL)指令的参数

图2-55举例说明了乘(MUL)指令的工作原理:如果操作数%I0.0的信号状态为“1”,则执行乘(MUL)指令,将操作数%IW64的值乘以操作数IN2的常数值“4”,相乘结果存储在操作数%MW20中。如果成功执行乘(MUL)指令,则输出ENO的信号状态为“1”,并将置位输出%Q0.0。

图2-55 乘(MUL)指令的工作原理

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

除(DIV)指令和返回余数(MOD)指令形式如图2-56所示。前者是返回相除后的商。后者是返回相除后的余数。需要注意的是,MOD指令只有在整数相除时才能应用。

图2-56 除(DIV)指令和返回余数(MOD)指令形式

图2-57举例说明了除(DIV)指令和返回余数(MOD)指令的工作原理:如果操作数%I0.0的信号状态为“1”,则执行除(DIV)指令,用操作数%IW64的值除以操作数IN2的常数值“4”,相除后的商存储在操作数%MW20中,余数存储在操作数%MW30中。

图2-57 除(DIV)指令和返回余数(MOD)指令的工作原理

除了上述运算指令,西门子S7-1200 PLC还有NEG、INC、DEC、ABS等运算指令,具体说明如下。

①NEG:将输入IN的值取反,保存在OUT中。

②INC和DEC:将参数IN/OUT的值分别加1和减1。

③ABS:求输入IN的值中有符号整数或实数的绝对值。

浮点数函数运算的梯形图及对应的描述见表2-24。需要注意的是,三角函数指令和反三角函数指令的角度均为以弧度为单位的浮点数。

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

2.4.3 移动指令

移动指令可将数据元素复制到新的存储器地址,并从一种数据类型转换为另一种数据类型,在移动过程中不更改数据元素。常见的移动指令形式和功能见表2-25。

表2-25 移动指令形式和功能

1.MOVE

MOVE的应用如图2-58所示,可将IN输入端操作数中的数据元素%MW20传送到OUT1输出端的操作数%MW40中,并始终沿地址升序方向传送。表2-26列出了MOVE可传送的数据类型。

图2-58 MOVE的应用

表2-26 MOVE可传送的数据类型

若IN输入端数据元素的位长度超出了OUT1输出端数据元素的位长度,则在传送数据元素时多出来的有效位会丢失。若IN输入端数据元素的位长度小于OUT1输出端数据元素的位长度,则用0填充少的有效位。

在初始状态,在指令框中包含1个输出端(OUT1),可以用鼠标单击图符 扩展输出端数目,并按升序排列扩展输出端数目,在执行MOVE指令时,可将IN输入端操作数中的数据元素传送到所有可用的输出端。如果传送结构化数据类型(Dtl,Struct,Array)或字符串(String)的字符,则无法扩展输出端数目。

MOVE只有在使能输入EN的信号状态为“1”时才能够执行。在这种情况下,输出ENO的信号状态为“1”。若EN的信号状态为“0”,则将ENO使能输出复位为“0”。

2.MOVE_BLK

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

图2-59 MOVE_BLK(块移动)指令形式

【练习2-1】相同数据类型数组之间的复制。

首先在TIA软件中添加新数据类型,如图2-60所示,如定义a_array为10个字节的数组,即Array[0..9]of Byte。数组的数据类型和数组限值可以通过如图2-61所示进行修改。

图2-60 添加新数据类型

图2-61 修改数组的数据类型和数组限值

一旦添加新数据类型,即可添加新数据块,如图2-62所示。在添加时,选择如图2-60所示中定义的数据类型,即a_array,则DB1中就有了一个a_array数组。同理,可以添加另外一个数据类型为b_array、有20个字节的数组,即Array[0..19]of Byte,并添加一个DB2。

图2-63为MOVE_BLK(块移动)指令的工作原理,就是利用MOVE_BLK(块移动)指令,将DB1中的a_array[2]到a_array[4]共3个数据元素复制到DB2中以b_array[7]开始的3个地址中。

图2-62 添加一个含数组a_array的DB

图2-63 MOVE_BLK(块移动)指令的工作原理

【练习2-2】不同数据类型数组之间的复制。

如果想在数据块中存储不同数据类型的数组(如位、字节、字、双整数或实数等),并且将这些数组复制到另一个数据块中,则必须将数据块结构化,以便有可能将所有数据类型中相同数据类型的数组依次存储起来。

所有相同数据类型的变量(如字节等)必须在数组变量中集成一组(块)后,才可以使用MOVE_BLK(块移动)指令将一个数组变量中的所有数据块复制到另一个数据块中,如图2-64所示,即将DB3中的5个数据块移动到DB4中。图2-65为其梯形图。

图2-64 将DB3中的5个数据块移动到DB4中

图2-65 将DB3中的5个数据块移动到DB4中的梯形图

3.UMOVE_BLK

如图2-66所示,使用UMOVE_BLK(无中断块移动)指令可将存储区(源区域)中的数据元素块复制到其他存储区(目标区域),用参数COUNT指定待复制数据元素块的个数,用IN输入端数据元素块的宽度指定待复制数据元素块的宽度按地址升序执行操作。

图2-66 UMOVE_BLK(无中断块移动)指令形式

4.FILL_BLK和SWAP

除上述3个移动指令外,填充块指令(FILL_BLK,UFILL_BLK)和交换指令(SWAP)也可以当作特殊情况的移动指令,见表2-27。

表2-27 填充块指令和交换指令及其功能

续表

图2-67为FILL_BLK指令形式,用输入IN的值填充一个存储区域(目标区域),用输出OUT指定的起始地址填充目标区域,用参数COUNT指定填充操作的次数。

图2-67 FILL_BLK指令形式

使用SWAP指令可以更改输入IN的值中字节的顺序,在输出OUT中查询结果。图2-68为SWAP指令的执行操作。表2-28为SWAP指令的参数。

图2-68 SWAP指令的执行操作

表2-28 SWAP指令的参数

【练习2-3】在选择开关%I0.0为ON时将%MW20字节的高低进行交换,并送入%MW40。

图2-69为梯形图。表2-29为执行SWAP指令后的结果。如果操作数%I0.0的信号状态为“1”,则执行SWAP指令,更换%MW20的字节顺序,并存储在操作数%MW40中。如果成功执行了SWAP指令,则输出ENO的信号状态为“1”,并置位输出%Q0.0。

图2-69 梯形图

表2-29 执行SWAP指令后的结果

2.4.4【实例9】单按钮控制灯

1.PLC控制任务说明

用比较指令和计数器编写开/关灯的程序,要求控制按钮I0.0被按下一次,灯Q0.0亮,被按下两次,灯Q0.0、Q0.1全亮,被按下三次,灯Q0.0、Q0.1全灭,如此循环。

2.电气接线图

图2-70为单按钮控制灯的电气接线图。表2-30为输入/输出元件及其控制功能。

图2-70 单按钮控制灯的电气接线图

表2-30 输入/输出元件及其控制功能

3.PLC编程

图2-71为单按钮控制灯的梯形图。在梯形图中,所用的计数器都为加法计数器,当加到3时,必须复位计数器。程序段1为根据按钮上升沿的情况进行计数。其中,PV=10,是大于3的任意数,因为到了3就被复位。程序段2为计数值=1,1#灯Q0.0亮。程序段3为计数值=2,1#灯Q0.0、2#灯Q0.1全亮。程序段4为计数值=3,1#灯Q0.0、2#灯Q0.1全灭,且通过M0.0复位计数器。

图2-71 单按钮控制灯的梯形图

图2-71 单按钮控制灯的梯形图(续)

2.4.5【实例10】用一个按钮控制四个灯(先亮后灭)

1.PLC控制任务说明

用一个按钮控制四个灯,以达到控制灯的亮灭。用PLC组成一个控制器,每按一次按钮,增加一个灯亮,待四个灯全亮后,每按一次按钮,灭一个灯,灭的顺序是先亮的那个灯后灭、后亮的那个灯先灭。

2.电气接线图

图2-72为用一个按钮控制四个灯的电气接线图。表2-31为输入/输出元件及其控制功能。

图2-72 用一个按钮控制四个灯的电气接线图

表2-31 输入/输出元件及其控制功能

3.PLC编程

根据任务要求,设置一个状态值变量MW0,当MW0=0时开始,按下按钮,MW0依次加1(INC指令),直至MW0=4,进入灯逐个亮的过程;待MW0=4后,进入灯逐个灭的过程,此时,MW0依次减1(DEC指令),直至MW0=0,进行下一个循环。

【实例10】的程序相对比较复杂,为了能够确保程序的正常执行,MW0在初始状态时必须为0,引入一个OB100,以便进行初始化。程序是从头至尾按顺序循环执行的,一个循环被称为一个扫描周期,如图2-73所示。

图2-73 程序的执行

在上电运行或复位时,OB100初始化一次,完成如下任务:刷新输入/输出映像区;自诊断;清除数据区;分配输入/输出映像区的地址;等等。

“添加新块”界面如图2-74所示,在如图2-75所示中选择“组织块”中的“Startup”,即OB100后,就可以在正常的OB1中进行梯形图的编程,将“0”移动到状态值变量MW0中,如图2-76所示。

图2-74 “添加新块”界面

图2-75 添加组织块OB100

先亮后灭的控制方式可以得出如下规律:当MW0=1时,1#灯Q0.0亮;当MW0=2时,1#灯Q0.0、2#灯Q0.1亮;当MW0=3时,1#灯Q0.0、2#灯Q0.1、3#灯Q0.2亮;当MW0=4时,1#灯Q0.0、2#灯Q0.1、3#灯Q0.2、4#灯Q0.3亮。这个规律可以使用“>=”比较指令实现,梯形图如图2-77所示。程序段1是当MW0=0时,灯逐个亮,M10.0为ON。程序段2是当M10.0为ON时,按下按钮进行计数,1~3,为灯亮的过程。程序段3是当M10.0为OFF时,按下按钮进行计数,3~1,为灯灭的过程。程序段4是当MW0=4时,复位M10.0。程序段5~程序段8为根据MW0的不同值,显示不同灯的状态。

图2-76 OB100的梯形图

图2-77 先亮后灭控制方式的梯形图

图2-77 先亮后灭控制方式的梯形图(续)

2.4.6【实例11】用一个按钮控制四个灯(先亮先灭)

1.PLC控制任务说明

用一个按钮控制四个灯,以达到控制灯的亮灭。用PLC组成一个控制器,每按一次按钮,增加一个灯亮,待四个灯全亮后,每按一次按钮,灭一个灯,灭的顺序是先亮的那个灯先灭、后亮的那个灯后灭。

2.PLC编程

【实例11】的电气接线图和I/O定义与【实例10】一样。状态值MW0的变化规律也是相同的。唯一的区别在于输出控制的灯不同,分为灯逐个亮的过程和灯逐个灭的过程。

在灯逐个亮的过程中:当MW0=1时,1#灯Q0.0亮;当MW0=2时,1#灯Q0.0、2#灯Q0.1亮;当MW0=3时,1#灯Q0.0、2#灯Q0.1、3#灯Q0.2亮;当MW0=4时,1#灯Q0.0、2#灯Q0.1、3#灯Q0.2、4#灯Q0.3亮。在灯逐个灭的过程中:当MW0=3时,2#灯Q0.1、3#灯Q0.2、4#灯Q0.3亮;当MW0=2时,3#灯Q0.2、4#灯Q0.3亮;当MW0=1时,4#灯Q0.3亮;当MW0=0时,全灭。

OB100相同,OB1前的四个程序段也是相同的,【实例11】梯形图与【实例10】梯形图的主要区别为程序段5~程序段8,如图2-78所示。

图2-78 先亮先灭控制方式的梯形图

图2-78 先亮先灭控制方式的梯形图(续)

图2-78 先亮先灭控制方式的梯形图(续) RkvLfrEoh3Dvd4qFK7XfZ0hxZmQqsHg/ke3LjBD7h+fELl70F37aI7rbkpB+iW1I

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