移位指令将累加器1的低字或累加器1的全部内容左移或右移若干位(见表3-10)。
表3-10 移位指令
1.有符号数右移指令
有符号的整数或双整数右移后空出来的位填以符号位对应的二进制数,正数的符号位为0,负数的符号位为1。最后移出的位被保存到状态字的CC1位。图3-83中的整数右移指令SHR_I将MW40中的16位有符号整数右移4位。移位位数N的数据类型为WORD,其常数用十六进制数表示。
打开PLCSIM,将程序下载到仿真PLC,将仿真PLC切换到RUN-P模式。在PLCSIM中将-8000输入MW40,在变量表中设置MW40和MW42的显示格式为BIN(二进制),可以看到右移4位的效果(见图3-84)。-8000右移4位相当于除以24,移位后的数为-500。右移后空出来的位用符号位1填充。
图3-83 有符号数右移指令
图3-84 变量表
令MW38分别为0和20(移位位数大于16),观察移位的结果。移位位数大于16时原有的数据被全部移出去了,MW42的各位均为符号位1,其值为16#FFFF(实际上为0)将MW40的值改为8000,重复上述的操作。
下面是用STEP 7转换图3-83中的程序得到的语句表程序。
2.无符号数移位指令
无符号的字(Word)和双字(DWord)可以左移和右移,移位后空出来的位填以0。
图3-85是无符号字左移4位的移位指令,在PLCSIM中将50输入MW44。在变量表中设置MW44和MW46的显示格式为BIN(二进制),可以看到左移4位的效果(见图3-86)。50左移4位相当于乘以42,移位后的数为800,左移后空出来的低4位添0。(www.xing528.com)
图3-85 无符号数左移指令
图3-86 变量表
将移位次数分别修改为2、8和16,观察移位的结果。
将图3-85中的OUT的实参MW46改为MW44,下载后观察程序运行的结果并解释原因。在I0.4的触点右边添加一个上升沿检测线圈,下载后令I0.4为1状态,观察程序运行的结果。
3.循环移位指令
语句表中的循环移位指令(见图3-87)将累加器1的整个内容逐位循环左移或循环右移0~32位(见表3-11),即移出来的位又送回累加器1另一端空出来的位,最后移出的位保存到状态字的CC1位。梯形图中N为移位的位数,移位的结果保存在输出参数OUT指定的地址。此外还有双字通过CC1循环左移和右移指令,这两条指令很少使用。
在PLCSIM中输入MD50和MW48的十六进制数值,在变量表中设置MD50和MD54的显示格式为BIN(二进制),图3-87和图3-88给出了双字循环左移8位的例子。
表3-11 循环移位指令
图3-87 循环左移指令
图3-88 变量表
将移位次数分别修改为0、4、16和20,观察移位的结果。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。