移位指令在PLC控制中是比较常用的,移位指令分为左、右移位和循环左、右移位及寄存器移位指令三大类。前两类移位指令按移位数据的长度又分为字节型、字型、双字型3种,移位指令最大移位位数N≤数据类型(B、W、DW)对应的位数,移位位数(次数)N为字节型数据。
1.左、右移位指令
左、右移位数据存储单元的移出端与SM1.1(溢出)端相连,移出位被放到SM1.1特殊存储单元,移位数据存储单元的另一端补0。当移位操作结果为0时,SM 1.0自动置位。移位指令格式见表6-3。
表6-3 移位指令格式及功能
(1)被移位的数据是无符号的。
(2)左移位指令SHL(ShiR Left)。使能输入有效时,将输入的字节、字或双字IN左移N位后(右端补0),将结果输出到OUT所指定的存储单元中,最后一次移出位保存在SM1.1(溢出)。
(3)右移位指令SHR(ShiR mght)。使能输入有效时,将输入的字节、字或双字IN右移N位后,将结果输出到OUT所指定的存储单元中,最后一次移出位保存在SM1.1。
(4)移位次数Ⅳ与移位数据长度有关,如果Ⅳ小于实际的数据长度,则执行Ⅳ次移位;如果N大于实际的数据长度,则执行移位的次数等于实际的数据长度。
2.循环左、右移位
循环移位将移位数据存储单元的首尾相连,同时又与溢出标志SM1.1连接,SM1.1用来存放被移出的位。指令格式见表6-4。
表6-4 循环移位指令格式及功能
(1)被移位的数据是无符号的。
(2)循环左移位指令ROL(Rotate Left)。使能输入有效时,字节、字或双字IN数据循环左移N位后,将结果输出到OUT所指定的存储单元中,并将最后一次移出位送SM1.1。
(3)循环右移位指令ROR(Rotate Right)。使能输入有效时,字节、字或双字IN数据循环右移N位后,将结果输出到OUT所指定的存储单元中,并将最后一次移出位送SM1.1。
(4)移位次数N与移位数据长度有关,如果N小于实际的数据长度,则执行N次移位;如果N大于实际的数据长度,则执行移位的次数等于实际的数据长度。(www.xing528.com)
3.左、右移位及循环移位指令对标志位、ENO的影响及操作数的寻址范围
移位指令影响的特殊存储器位:SM 1.0(零);SM1.1(溢出)。如果移位操作使数据变为0,则SM1.0置位。
影响允许输出ENO正常工作的出错条件是:SM4.3(运行时间),0006(间接寻址错误)。
N、IN、OUT操作数的数据类型为B、W、DW。
例如,将VD 10右移2位送ACO。梯形图程序如图6-2所示。
图6-2 移位指令应用梯形图
4.移位寄存器指令SHRB
移位寄存器指令是一个移位长度可指定的移位指令。在顺序控制和步进控制中,应用移位寄存器编程是很方便的。移位寄存器指令格式示例见表6-5。
表6-5 寄存移位指令示例
梯形图中DATA为数值输入,指令执行时将该位的值移入移位寄存器。S-BIT为寄存器的最低位。Ⅳ为移位寄存器的长度(1~64),N为正值时左移位(由低位到高位),DATA值从S-BIT位移入,移出位进入SM1.1;N为负值时右移位(由高位到低位),SBIT移出到SM1.1,另一端补充DATA移入位的值。
每次使能有效时,整个移位寄存器移动1位,最高位的计算方法:[N的绝对值-1+(S-BIT的位号)]/8,余数即是最高位的位号,商与S.BIT的字节号之和即是最高位的字节号。移位指令影响的特殊存储器位:SM1.1(溢出)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。