西门子SCL语言中的移位指令 移位指令是PLC应用中非常灵活,应用也非常广泛的指令。主要根据一定的格式进行规律输出,主要分左移、右移、循环移位(左或右循环移位)几条指令。 右移指令:SHR 右移指令就是将输入IN的数据,按要求向右移N位,低位移出高位移出位补零,并将新的数据存入另一个数据中。这其中有几种情况需要注意: ·当移位数N=0时,相当于输入值不移位,直接输出; ·当移位数N不等于0,并且小于输入值的位数时,则按指定的N的值进行移位,并将新的数值输出; ·当移位数N大于输入数据的位数时,则参数 IN 的值将向右移动该位数个位置,移动后相当于为零; 在SCL语言中书写方式为: #D_1 := SHR(IN := #D_0, N := 1); 指令各个参数如下图所示: 左移指令:SHL 用法与右移指令一样的规则,只是将移动方向变为由右向左移动,低位空出补零。对于移位数N的注意事项与上述一样。左移指令与右移指令有点互为逆过程的意思。 书写格式:#D_0 := SHL(IN:=_dword_in_, N:=_usint_in_) 移位过程示意图如下所示: 循环右移指令:ROR 使用“循环右移”指令,将参数 IN 的内容逐位向右循环移位,并将结果赋值给指定的操作数。参数 N 用于指定应将特定值循环移位的位数。用移出的位填充因循环移位而空出的位。 如果参数 N 的值为“0”,则将输入 IN 的值作为结果。 如果参数 N 的值大于可用位数,则输入 IN 中的操作数值将循环移动指定位数个位。 下图显示了如何将 DWORD 数据类型操作数的内容向右循环移动 3 位: 指令输入格式: #D_0 := ROR(IN:=_dword_in_, N:=_usint_in_); 循环移位意思就是将一个原始值进行无限循环执行,而不会像单方向的移位一样,多次循环后就变为零。 循环左移指令:ROL 使用“循环左移”指令,可以将参数 IN 的内容逐循环左移,并将结果作为函数值返回。参数 N 用于指定应将特定值循环移位的位数。用移出的位填充因循环移位而空出的位。 如果参数 N 的值为“0”,则将输入 IN 的值作为结果。 如果参数 N 的值大于可用位数,则输入 IN 中的操作数值将循环移动指定位数个位。 下图显示了如何将 DWORD 数据类型操作数的内容向左循环移动 3 位: 指令参数: 指令输入格式: #D_0 := ROL(IN:=_dword_in_, N:=_usint_in_); 循环指令用在前面说的彩灯控制中就比较方便,编写效率也更加的快,程式简单明了。还可以用在程序流程中当做流程步鄹。物料分拣等等。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |