[西门子] 西门子SCL语言中的移位指令

[复制链接]
查看236 | 回复0 | 2024-10-29 16:06:24 | 显示全部楼层 |阅读模式

西门子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_);

循环指令用在前面说的彩灯控制中就比较方便,编写效率也更加的快,程式简单明了。还可以用在程序流程中当做流程步鄹。物料分拣等等。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则