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

2.2 数据处理指令

在西门子S7系列PLC的梯形图中,用方框表示某些指令、函数(FC)和函数块(FB),输入信号均在方框的左边,输出信号均在方框的右边。梯形图中有一条提供“能流”的左侧垂直线,当其左侧逻辑运算结果RLO为“1”时,能流流到方框指令的左侧使能输入端EN(Enable input),“使能”有允许的意思。只有在使能输入端有能流时,方框指令才能执行。

如果方框指令EN端有能流流入,而且执行时无错误,则使能输出ENO(Enable Output)端将能流流入下一个软元件,如图2-1所示。如果执行过程中有错误,能流将在出现错误的方框指令处终止。

图2-1 MOVE指令

2.2.1 移动指令

1.MOVE指令

MOVE(移动)指令是用于将输入端IN的源数据传送(复制)给输出端OUT1的目的地址,并且转换为OUT1指定的数据类型,源数据保持不变,如图2-1所示。IN和OUT1可以是Bool类型之外的所有基本数据类型和DTL、Struct、Array等数据类型。IN还可以是常数。

同一条指令的输入参数和输出参数的数据类型可以不相同,如MB0中的数据传送到MW10。如果将MW4中超过255的数据传送到MB6,则只将MW4的低字节(MB5)中的数据传送到MB6,应避免出现这种情况。

如果想把一个数据同时传给多个不同的存储单元,可单击MOVE指令方框中的图标 来添加输出端,如图2-1中最右侧MOVE指令。若添加多了,可通过选中输出端OUT,然后按键盘上的〈Delete〉键进行删除。

在图2-1中,将十六进制数16#1234(十进制为4660)传送给MW0;若将超过255的1个字中的数据(MW0中的数据4660)传送给1个字节(MB2),此时只将低字节(MB1)中的数据(16#34)传送给目标存储单元(MB2);将同一个数据(4660)通过增加MOVE指令的输出端(OUT2)将其传送给MW4和MW6这两个不同的存储单元。在3个MOVE指令执行无误时,能流流入Q0.0。

视频“移动值指令”可通过扫描二维码2-2播放。

2-2 移动值指令

2.SWAP指令

SWAP(交换)指令用于调换二字节和四字节数据元素的字节顺序,但不改变每个字节中的位顺序,需要指定数据类型。

IN和OUT为Word数据类型时,SWAP指令交换输入端IN输入的高、低字节后,保存到OUT指定的地址,如图2-2所示。

图2-2 SWAP指令

IN和OUT为DWord数据类型时,SWAP指令交换4B中数据的顺序,交换后保存到OUT指定的地址,如图2-2所示。

在监控状态下,可以改变数据的显示格式,使其观察的数据一目了然,数据可在十进制和十六进制之间转换。在图2-2中,若MW0中显示的数据是十进制数4660而不是十六进制数16#1234,则执行交换指令后,MW10中显示的数据就不能明显表示出由数据十六进制数16#1234通过交换高低字节而来。右击地址MW0,在弹出的菜单中选中“修改”,然后单击其中的“显示格式”,便可在十进制和十六进制之间相互转换,如图2-3所示。

图2-3 数据显示格式的转换

2.2.2 比较指令

1.比较指令

比较指令用来比较数据类型相同的两个数IN1和IN2的大小,相比较的两个数IN1和IN2分别在触点的上面和下面,它们的数据类型必须相同。操作数可以是I、Q、M、L、D存储区中的变量或常数。比较两个字符串时,实际上比较的是它们各自对应字符的ASCII码的大小,第一个不相同的字符决定了比较的结果。

图2-4中比较指令的运算符号及数据类型可视为一个等效的常开触点,比较符号可以是“==(等于)”“<>(不等于)”“>(大于)”“>=(大于等于)”“<(小于)”和“<=(小于等于)”,比较的数据类型有多种,比较指令的运算符号及数据类型在指令的下拉式列表中可见,如图2-4所示。当满足比较关系式给出的条件时,等效触点闭合。

图2-4 比较指令的运算符号及数据类型

生成比较指令后,双击触点中间比较符号下面的问号,单击出现的 按钮,用下拉式列表设置要比较的数的数据类型。如果想修改比较指令的比较符号,只要双击比较符号,然后单击出现的 按钮,就可以用下拉式列表修改比较符号。

【例2-1】 用比较指令实现一个周期振荡电路,如图2-5所示。

图2-5 使用比较指令实现一个周期振荡电路

MD10用于保存定时器TON的已耗时间值ET,其数据类型为Time。输入比较指令上面的操作数后,指令中的数据类型自动变为“Time”。IN2输入5后,不会自动变为5s,而是显示5ms,它是以ms为单位的,要么直接输入“T#5S”或“5s”,否则容易出错。

【例2-2】 要求用3盏灯(分别为红灯、绿灯、黄灯)表示地下车库车位数的显示。系统工作时若空余车位大于10个,绿灯亮;空余车位为1~10个,黄灯亮;无空余车位,红灯亮。空余车位显示控制程序如图2-6所示。

图2-6 空余车位显示控制程序

视频“比较指令”可通过扫描二维码2-3播放。

2-3比较指令

2.范围内与范围外比较指令

范围内比较指令IN_RANGE(也称值在范围内)与范围外比较指令OUT_RANGE(也称值在范围外)可以等效为一个触点。如果有能流流入指令框,则执行比较。图2-7中IN_RANGE指令的参数VAL满足MIN≤VAL≤MAX(-123≤MW2≤3579),或OUT_RANGE指令的参数VAL满足VAL< MIN或VAL>MAX(MB5<28或MB5>118)时,等效触点闭合,有能流流出指令框的输出端。如果不满足比较条件,没有能流流出。如果没有能流流入指令框,则不执行比较,没有能流流出。

图2-7 范围内与范围外比较指令

指令的MIN、MAX和VAL的数据类型必须相同,可选SInt、Int、DInt、USInt、UInt、UDInt、Real,可以是I、Q、M、L、D存储区中的变量或常数。双击指令名称下面的问号,点击出现的按钮 ,用下拉式列表框设置要比较的数据的数据类型。

读者可使用范围内和范围外比较指令实现【例2-2】的控制要求。

3.OK与NOT_OK指令

OK与NOT_OK指令用来检测输入数据是否是实数(即浮点数)。如果是实数,OK指令触点闭合,反之NOT_OK指令触点闭合。触点上面变量的数据类型为Real,如图2-8所示。

在图2-8中,当MD10和MD20中为有效的实数时,会激活“实数比较指令”,如果结果为真,则Q0.0接通。

图2-8 OK与NOT_OK指令及使用

2.2.3 移位和循环移位指令

下面介绍移位指令和循环移位指令。

1.移位指令

移位指令SHL(或SHR)将输入参数IN指定的存储单元的整个内容逐位左移(或右移)若干位,移位的位数用输入参数N来定义,移位的结果保存在输出参数OUT指定的地址。

无符号数移位和有符号数左移后空出来的位用0填充。有符号数右移后空出来的位用符号位(原来的最高位填充),正数的符号位为0,负数的符号位为1。

移位位数N为0时不会发生移位,但是IN指定的输入值会被复制给OUT指定的地址。如果N大于被移位的存储单元的位数,所有原来的位都被移出后,将全部被0或符号位取代。移位操作的ENO总是为“1”状态。

将基本指令列表中的移位指令拖放到梯形图后,单击移位指令后将在方框指令中名称下面问号的右侧和名称的右上角出现黄色三角符号,将鼠标移至(或单击)方框指令中名称下面和右上角出现的黄色三角符号时,会出现按钮 ;单击方框指令名称下面问号右侧的按钮 ,可以用下拉式列表设置变量的数据类型和修改操作数的数据类型,单击方框指令名称右上角的按钮 ,可以用下拉式列表设置移位指令类型,如图2-9所示。

图2-9 移位指令

执行移位指令时应注意,如果将移位后的数据要送回原地址,应使用边沿检测触点(P触点或N触点),否则在能流流入的每个扫描周期都要移位一次。

左移 n 位相当于乘以2 n ,右移 n 位相当于除以2 n ,当然得在数据存在的范围内,如图2-10所示。整数200左移3位,相当于乘以8,等于1600;整数-200右移2位,相当于除以4,等于-50。

视频“移位指令”可通过扫描二维码2-4播放。

2-4 移位指令

2.循环移位指令

循环移位指令ROL(或ROR)将输入参数IN指定的存储单元的整个内容逐位循环左移(或循环右移)若干位后,即移出来的位又被送回存储单元另一端空出来的位,原始的位不会丢失。N为移位的位数,移位的结果保存在输出参数OUT指定的地址。N为0时不会发生移位,但是IN指定的输入值会被复制给OUT指定的地址。移位位数N可以大于被移位的存储单元的位数,执行指令后,ENO总是为“1”状态。

图2-10 移位指令的应用

在图2-11中,M1.0为系统存储器,首次扫描为“1”,即首次扫描时将十进制数125(16#7D)赋给MB10,将十进制数-125(16#83,表示负数时使用补码形式,即原码取反后加1且符号位不变,-125的原码的二进制形式为2#1111 1101,反码为2#1000 0010,补码为2#1000 0011,即16#83)赋给MB20。

图2-11 循环移位指令的应用——指令执行前

在图2-11中,当I0.0出现一次上升沿时,循环左移和循环右移指令各执行一次,都循环移一位,MB10的数据16#7D(2#0111 1101)向左循环移一位后为2#1111 1010,即为16#FA;MB20的数据16#83(2#1000 0011)向右循环移一位后为2#1100 0001,即16#C1,如图2-12所示。从图2-12中可以看出,循环移位时最高位移入最低位,或最低位移入最高位,即符号位跟着一起移,始终遵循“移出来的位又被送回存储单元另一端空出来的位”的原则,可以看出,带符号的数据进行循环移位时,容易发生意想不到的结果,因此应谨慎使用循环移位。

图2-12 循环移位指令的应用——指令执行后

2.2.4 转换指令

1.CONV指令

CONV(Convert,转换)指令将数据从一种数据类型转换为另一种数据类型,如图2-13所示,使用时单击一下指令的“问号”位置,可以从下拉式列表中选择输入数据类型和输出数据类型。

图2-13 数据转换指令

参数IN和OUT的数据类型可以为Byte、Word、DWord、SInt、Int、DInt、USInt、UInt、UDInt、BCD16、BCD32、Real、LReal、Char、WChar。

EN输入端有能流流入时,CONV指令可以将IN输入指定的数据转换为OUT指定的数据类型。数据类型BCD16只能转换为Int,BCD32只能转换为DInt。

2.ROUND和TRUNC指令

ROUND(取整)指令用于将浮点数转换为整数。浮点数的小数点部分舍入为最接近的整数值。如果浮点数刚好是两个连续整数的一半,则实数舍入为偶数。如ROUND(10.5)=10,ROUND(11.5)=12,如图2-14所示。

TRUNC(截取)指令用于将浮点数转换为整数,浮点数的小数部分被截取成零,如图2-14所示。

图2-14 取整和截取指令

3.CEIL和FLOOR指令

CEIL(上取整)指令用于将浮点数转换为大于或等于该实数的最小整数,如图2-15所示。

FLOOR(下取整)指令用于将浮点数转换为小于或等于该实数的最大整数,如图2-15所示。

图2-15 上取整和下取整指令

4.SCALE_X和NORM_X指令

SCALE_X(缩放或称标定)指令可以将浮点数输入值VALUE(0.0≤VALUE≤1.0)线性转换(映射)为参数MIN(下限)和MAX(上限)定义的数值范围之间的整数。转换结果保存在OUT指定的地址,如图2-16所示。

图2-16 SCALE_X和NORM_X指令

单击方框指令名称下面的问号,用下拉列表设置变量的数据类型。参数MIN、MAX和OUT的数据类型应相同,可以是SInt、Int、Dint、USInt、UInt、UDInt和Real,MIN和MAX也可以是常数。

各变量之间的线性关系如图2-17所示。将图2-16中SCALE_X指令的参数代入该线性关系公式后可求得OUT的值:

OUT=VALUE×(MAX-MIN)+MIN=0.4×(1000-200)+200=520

如果参数VALUE小于0.0或大于1.0,可以生成小于MIN或大于MAX的OUT,此时ENO为“1”状态。

NORM_X指令是将整数输入VALUE(MIN≤VALUE≤MAX)线性转换(标准化或称规格化)为0.0~1.0之间的浮点数,转换结果保存在OUT指定的地址,如图2-16所示。

NORM_X的输出OUT的数据类型为Real,单击方框指令名称下面的问号,用下拉列表设置输入VALUE变量的数据类型。输入参数MIN、MAX和VALUE的数据类型应相同,可以是SInt、Int、DInt、USInt、UInt、UDInt和Real,也可以是常数。

各变量之间的线性关系如图2-18所示。将图2-16中NORM_X指令的参数代入该线性关系公式后可求得OUT的值:

OUT=(VALUE-MIN)/(MAX-MIN)=(500-200)/(1000-200)=0.375

如果参数VALUE小于MIN或大于MAX,可以生成小于0.0或大于1.0的OUT,此时ENO为“1”状态。使ENO为“0”状态的条件与指令SCALE_X的相同。

图2-17 SCALE_X指令的线性关系

图2-18 NORM_X指令的线性关系 KK9vDPC2O1Zk1FjFoguR+wLdP36r6OR9ola1aaTmAiSPygXXscRXrdeJRjhqz9Kz

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