S7-200 PLC的移位指令可以对字节(B)、字(W)、双字(DW)进行左移、右移、循环左移、循环右移等操作。指令格式如表3-4所示。 移位指令中的IN为源操作数;N为移位的位数:OUT为目的操作数;DATA为移位寄存器指令的待移入位数据;S - BIT为移位寄存器指令的最低位;N为移位寄存器指令的位数及方向控制字。要求源操作数和目的操作数的数据类型必须与指令类型相匹配。
(1)左移指令SHL_W 对于左移指令.按指定位数(N)对源操作数(IN)依次左移N位,左边移出位自然丢失,右边空缺应补0,并将移位结果保存在目的操作数(OUT)中,源操作数(IN)保持不变。应用示例如图3-4所示。
(2)右移指令SHR_W 对于右移指令,按指定位数(N)对源操作数(IN)依次右移N位,右边移出位自然丢失,左边空缺位补0,并将移位结果保存在目的操作数(OUT)中,源操作数(IN)保持不变。应用示例如图3-5所示。
(3)循环左移指令ROL_W 对于循环左移指令,按指定位数(N)对源操作数(IN)依次循环左移N位,左边移出位补充到右边空缺位,并将移位结果保存在目的操作数(OUT)中,源操作数(IN)保持不变。应用示例如图3-6所示。
图3-6 西门子plc ROL_W 循环左移指令应用示例
(4)循环右移指令 对于循环右移指令,按指定位数(N)对源操作数(IN)依次循环右移N位,右边移出位补充到左边空缺位,并将移位结果保存在目的操作数(OUT)中,源操作数(IN)保持不变。应用示例如图3-7所示。
图3-7 ROR_W 循环右移指令应用示例 (5)移位寄存器 移位寄存器(SHRB)指令实际上是一种自定义移位寄存器。移位寄存器(SHRB)指令将DATA数值移入移位寄存器,并由S_BIT指定移位寄存器的最低位,由N指定移位寄存器的长度和移位方向(+N表示“移位加”,-N表示“移位减”,移位寄存器的最大长度为64位),移出位则放置在特殊功能存储器SM1.1(移出标志位)中。 使用以下公式可计算“移位寄存器”的最高位的地址(MSB.b)。
其中,该公式计算出的整数部分为“移位寄存器”的最高位的字节地址,余数部分为“移位寄存器”的最高位的位序。例如:如果S_BIT为V33.4和N为14,则“移位寄存器”的最高位的地址为V35.1。
图3-8 移位寄存器指令应用示例 移位寄存器指令的应用示例如图3-8所示。 在“移位减”(N为负值)中,输入数据(DATA)移入移位寄存器的最高位,并移出最低位(S_BIT)。移出的数据被放置在SM1. 1中。移位原理如图3-9所示。
图3-10 “移位加”的移位原理 在“移位加”(N为正值)中,输入数据(DATA)移入移位寄存器的最低位(由S-BIT指定),并移出移位寄存器的最高位。移出的数据被放置在SM1.1中。移位原理如图3-10所示。