第5章S7-1200的指令25.1数据处理指令5.1.1比较指令31.比较指令2.范围内与范围外比较指令例5-1用接通延时定时器和比较指令组成占空比可调的脉冲发生器53.OK与NOT_OK指令65.1.2使能输入和使能输出1.BCD码:BCD(Binary-codedDecimal)是二进制编码的十进制数的缩写,BCD码用4位二进制数表示一位十进制数,每一位BCD码允许的数值范围为2#0000~2#1001;对应于十进制数0-9。4位二进制数共有16种组合,有6种组合(2#1010~2#1111)没有在BCD码中使用。BCD码的最高位二进制数用来表示符号、负数为1,正数为0;一般令负数和正数的最高4位二进制数分别为1111和0000。16位BCD码的范围为999十999、32位BCD码的范围为-999999~+9999999。-8627拨码开关译码芯片PLC的四个输出点后接一个译码芯片用PLC的输入点读取拨码开关的输出82.EN与ENO令MW32=F983,则输出MW34=-983下列指令使用EN/ENO:数学运算指令、传送与转换指令、位移与循环指令、字逻辑运算指令等。下列指令不使用EN/ENO:位逻辑指令、比较指令、计数器指令、定时器指令和程序控制指令。95.1.3数据转换指令1.CONV指令2.浮点数转换为双整数指令3.SCAL_X指令OUT=VALUE(MAX-MIN)+MIN例如:如果MAX=1000,MIN=200,则0.4→520;1.2→11604.NORM_X指令OUT=(VALUE-MIN)/(MAX-MIN)105.1.4数据传送指令1.MOV指令输入输出数据类型可以不一样,如:MB0→MW2低字节中;MW4→MB6,但是如果MW4超过255,则只传送低字节中的数值。2.SWAP指令IN和OUT为数据类型Word时,SWAP指令交换输入IN的高、低字节后,保存到OUT指定的地址。IN和OUT为数据类型Dword时,交换4个字节中数据的顺序,交换后保存到OUT指定的地址。如:16#AABBCCDD→16#DDCCBBAA113.全局数据块和数组数组由相同数据类型的多个元素组成,数组元素的数据类型可以是所有的基本数据类型。全局数据块的生成方法:演示124.FILL_BLK与UFILL_BLK指令FILLBLK指令将输入参数取设置的值填充到输出参数OUT指定起始地址的目标数据区。IN和OUT必须是D、L(数据块或块的局部数据)中的数组元素,IN还可以是常数。COUNT为填充的数组元素的个数,数据类型为DInt或常数。5.MOVE_BLK与UMOVE_BLK指令6.块填充和快传送指令的实验(演示)135.1.5位移与循环位移指令1.位移指令移位指令SHR和SHL将输入参数IN指定的存储单元的整个内容逐位右移或左移若干位,移位的位数用输入参数N来定义,移位的结果保存在输出参数OUT指定的地址。无符号数移位和有符号数左移后空出来的位用0填充。有符号数右移后空出来的位用符号位(原来的最高位)填充,正数的符号位为0.节负数的符号位为1。142.循环移位指令循环移位指令ROR和ROL将输入参数IN指定的存储单元的整个内容逐位循环右移或循环左移若干位,即移出来的位又送回存储单元另一端空出来的位,原始的位不会丢失。N为移位的位数,移位的结果保存在输出参数OUT指定的地址。153.使用循环移位指令的彩灯控制器165.2数学运算指令5.2.1数学运算指令数学运算包括数学运算指令、浮点数函数运算指令、逻辑运算指令。1.四则运算指令17数学运算指令中的ADD、SUB、MUL和DIV分别是加、减、乘、除指令、它们执行的操作数的数据类型可选SInt,Int,DInt,USInt,UInt,UDInt和Real,IN1和IN2可以是常数。IN1、IN2和OUT的数据类型应该相同。18【例】压力变送器的量程为0~10MPa,输出信号为0~10V,被CPU集成的模拟量输入的通道0(地址为IW64)转换为0~27648的数字。假设转换后的数字为N,试求以kPa为单位的压力值。解:0~10MPa(0~10000kPa)对应于转换后的数字0~27648,转换公式为P=(10000×N)/27648(kPa)注意:在运算时一定要先乘后除,否则会损失原始数据的精度。20【例】使用浮点数运算计算上例以kPa为单位的压力值。将上例改写为:p=(10000xN)/27648=0.361690XN(kPa)212.其它整数数学运算指令(1)MOD指令用MOD指令来求除法的余数。(2)NEG指令NEG(negation)将输入IN的值的符号取反后,保存在输出OUT中,IN和OUT的数据类型可以是SInt,Int,DInt和Real,输入IN还可以是常数。(3)INC与DEC指令执行指令INC与DEC时,参数IN/OUT的值分别被加1和减1。IN/OUT的数据类型可选SInt,USInt,Int,UInt,DInt和UDInt(有符号或无符号的整数)。22(4)绝对值指令ABSABS指令用来求输入IN中的有符号整数(SInt,Int宁DInt或实数(Real)的绝对值,将结果保存在输出OUT中。IN和OUT的数据类型应相同。(5)MIN与MAX指令MIN(minimum)指令比较输入IN1和IN2的值,将其中较小的值送给输出OUT。MAX(maximum)指令比较输入IN1和IN2的值,将其中较大的值送给输出OUT。INI和IN2的数据类型相同才能执行指定的操作。23(6)LIMIT指令LIMIT指令检查输入IN的值是否在参数MIN和MAX指定的范围内,如果IN的值没有超出该范围,将它直接保存在OUT指定的地址中。如果IN的值小于MIN的值或大于MAX的值,将MIN或MAX的值送给输出OUT。243.浮点数函数运算指令浮点数(实数)数学运算指令的操作数IN和OUT的数据类型为Real。浮点数自然指数指令EXP和浮点数自然对数指令LN中的指数和对数的底数为2.71828。浮点数开平方指令SQRT和LN指令的输入值如果小于0。输出OUT返回一个无效的浮点数。浮点数三角函数指令和反三角函数指令中的角度均为以弧度为单位的浮点数。如果输入值是以度为单位的浮点数,使用三角函数指令之前应先将角度值乘以π/180.0,转换为弧度值。浮点数反正弦函数指令ASIN和浮点数反余弦函数指令ACOS的输入值的允许范围为-1.0—1.0,ASIN和ATAN的运算结果的取值范围为-π/2—+π/2弧度,ACOS的运算结果的取值范围为0—π弧度。求以10为底的对数时,需要将自然对数值除以2.302585(10的自然对数值)。例如:lg100=ln100/2.302585=4.605170/2.302585=2。252627【例】测量远处物体的高度时,已知被测物体到测量点的距离L和以度为单位的夹角θ,求被测物体的高度H,H=Ltanθ,角度的单位为度。假设以度为单位的实数角度值在MD116,乘以π/180=0.0174533得角度的弧度值,运算的中间结果保存在数据类型为Real的临时局部变量Tempt中。L的实数值在MD128,运算结果在MD132。285.2.2逻辑运算指令1.逻辑运算指令逻辑运算指令对两个输入IN1和IN2逐位进行逻辑运算。逻辑运算的结果存放在输出OUT指定的地址。“与”(AND)运算时两个操作数的同一位如果均为1,运算结果的对应位为1,否则为0。“或”(OR)运算时两个操作数的同一位如果均为0,运算结果的对应位为0,否则为1。29“异或(XOR)运算时两个操作数的同一位如果不相同,运算结果的对应位为1,否则为0。以上指令的操作数IN1、IN2和OUT的数据类型为十六进制的Byte,Word和Dword。取反指令INV将输入IN中的二进制整数逐位取反,即各位的二进制数由0变1,由1变0,运算结果存放在输出OUT指定的地址。302.解码与编码指令假设输入参数IN的值为n,解码(译码)指令DECO(Deode)将输出参数OUT的第n位置位为1,其余各位置0,相当于数字电路中译码电路的功能。利用解码指令,可以用输入IN的值来控制OUT中某一位的状态。如果输入IN的值大于31,将取的值除以32以后,用余数来进行解码操作。IN的数据类型为UInt,OUT的数据类型可选Byte、Word和DWord。IN的值为0-7(3位二进制数)时,输出OUT的数据类型为8位的字节。IN的值为0-15(4位二进制数)时,输出OUT的数据类型为16位的字。IN的值为0-31(5位二进制数)时,输出OUT的数据类型为32位的双字。例如IN的值为5时,输出为2#00100000(16#20),仅第5位为l。31编码指令ENCO(Ericode)与解码指令相反,将IN中为1的最低位的位数送给输出参数OUT指定的地址,IN的数据类型可选Byte、Word和Dword,OUT的数据类型为INT。323.SEL与MUX指令指令SEL(Select)的Bool输入参数G为0时选中IN0,G为l时选中IN1,并将它们保存到输出参数OUT指定的地址。指令MUX(Multiplex,多路开关选择器)根据输入参数K的值,选中某个输入数据,并将它传送到输出参数OUT指定的地址。如K=m时,将选中输入参数INm。如果K的值超过允许的范围,将选中输入参数ELSE。参数K的数据类型为Uint;Inn、ELSE、OUT可以取12种数据类型,它们的数据类型应相同。335.3程序控制指令5.3.1程序控制指令1.跳转与标签指令没有执行跳转指令时,各个程序段按从上到下的先后顺序执行,这种执行方式称为线性扫描。JMP跳转指令中止程序的线性扫描跳转到指令中的地址标签所在的目的地址。跳转时不执行跳转指令与标签之间的程序,跳到目的地址后,程序继续按线性扫描的方式顺序执行。跳转指令可以往前跳,也可以往后跳。只能在同一个代码块内跳转,即跳转指令与对应的跳转目的地址应在同一个代码块内。在一个块内,同一个跳转目的地址只能出现一次。JMPN指令的线圈断电时,将跳转到指令给出的标签处,执行标签之后的第一条指令。342.返回指令RETRET指令的线圈通电时,停止执行当前的块,不再执行该指令后面的指令,返回调用它的块后,执行调用指令之后的指令。RET指令的线圈断电时,继续执行它下面的指令。RET线圈的上面是块的返回值,数据类型为Bool。如果当前的块是OB,返回值被忽视。355.3.2扩展指令中的程序控制指令1.RE_TRIGR指令监控定时器又称看门狗(Watchdog),每次扫描循环它都被自动复位一次,正常工作时最大扫描循环时间小于监控定时器的时间设定值,它不会起作。以下情况扫描循环时间可能大于监控定时器的设定时间,监控定时器将会起作用:1)用户程序很长;2)一个扫描循环内执行中断程序的时间很长;3)循环指令执行的时间太长。可以在程序中的任意位置使用指令RE_TRIGR(重新触发循环时间监视),来复位监控定时器。362.STP指令STP指令的EN输入为1状态时,使PLC进入STOP模式。STP指令使CPU集成的输出、信号板和信号模块的数字量输出或模拟量输出进入组态时设置的安全状态。可以使输出冻结在最后的状态,或用替代值设置为安全状态。默认的数字量输出状态为FALSE,默认的模拟量输出值为0。3.GET_ERROR与GET_ERR_ID指令GET_ERROR指令用来提供有关程序块执行错误的信息,用输出参数ERROR显示发生的程序块执行错误,并且将详细的错误信息填入预定义的ErrorStruct(错误结构)数据类型。可以用程序来分析错误信息,并作出适当的响应。第一个错误消失时,指令输出下一个错误的信息。GET_ERR_ID指令用来报告错误的ID(标识符)。如果块执行时出现错误,且指令的EN输入为1状态,出现的第一个错误的标识符保存在指令的输出参数“ID”中,ID的数据类型为Word。第一个错误消失时,指令输出下一个错误的ID。374.ErrorStruc