此类指令主要涉及对数据的非数值运算类操作,主要包括传送、移位、字节交换、循环 移位和填充。
4.3.1 传送类指令
传送类指令可用来在各存储单元之间进行一个或多个数据的传送。按指令一次所传送数 据的个数可分为单一传送指令和块传送指令。
1.单一传送
指令可用来进行一个数据的传送,数据类型可以是字节、字、双字和实数。本类指令使 能流输出ENO 断开的出错条件:SM4.3(运行时间)、0006(间接寻址)。
(1)MOVB,字节传送指令。
使能输入有效时,把一个单字节无符号数据由 IN 传送到 OUT 所指的字节存储单元。
IN 的寻址范围:VB、IB、QB、MB、SB、SMB、LB、AC、
*VD、*AC、*LD 和常数。
OUT 的寻址范围:VB、IB、QB、MB、SB、SMB、LB、AC、*VD、*AC 和*LD。
指令格式: MOVB IN1, OUT
例: MOVB VB0, QB0
(2)BIR,传送字节立即读指令。
使能输入有效时,立即读取单字节物理输入区数据 IN,并传送到 OUT 所指的字节存储 单元。
IN 的寻址范围:IB
OUT 的寻址范围:VB、IB、QB、MB、SB、SMB、LB、
AC、*VD、*AC 和*LD。
指令格式: BIR IN1, OUT
例: BIR IB0, VB10
(3)BIW,传送字节立即写指令。
使能输入有效时,立即将 IN 单元的字节数据写到 OUT 所指的 物理输出区。
IN 的寻址范围:VB、IB、QB、MB、SB、SMB、LB、AC、
*VD、*AC、*LD 和常数。
OUT 的寻址范围:QB
指令格式: BIW IN1, OUT
例: BIW VB0, QB0
(4)MOVW,字传送指令。
使能输入有效时,把一个1 字长有符号整数由 IN 传送到 OUT 所指的字存储单元。
114 可编程序控制器应用教程(第二版)
(5)MOVD,双字传送指令。
使能输入有效时,把一个双字长有符号数据由IN 传送到 OUT 所指的双字存储单元。
(6)MOVR,实数传送指令。
使能输入有效时,把一个32 位实数由 IN 传送到 OUT 所指的双字长存储单元。
2.块传送
指令可用来进行一次多个(最多 255 个)数据的传送,数据块类型可以是字节块、字 块、双字块。
3 条指令中 N 的寻址范围都是:VB、IB、QB、MB、SB、SMB、LB、AC、*VD、
*AC、*LD 和常数。
使ENO 断开的出错条件:SM4.3(运行时间)、0006(间接寻址)、0091(数超界)。
(1)BMB,字节块传送指令。
使能输入有效时,把从输入字节IN 开始的 N 个字节型数据传送到从 OUT 开始的 N 个 字节存储单元。
IN、OUT 的寻址范围:VB、IB、QB、MB、SB、SMB、LB、*VD、*AC、*LD。
指令格式: BMB IN1, OUT, N 例: BMB VB0, LB0, 30
(2)BMW,字块传送指令。
使能输入有效时,把从输入字IN 开始的 N 个字型数据传送到从 OUT 开始的 N 个字存 储单元。
IN 的寻址范围:VW、IW、QW、MW、SW、SMW、LW、AIW、T、C、*VD、
*AC、*LD。
OUT 的寻址范围:VW、IW、QW、MW、SW、SMW、LW、AIW、T、C、AQW、
*VD、*AC、*LD。
指令格式: BMW IN1, OUT, N 例: BMW IW0, QW0, 30
(3)BMD,双字块传送指令。
使能输入有效时,把从输入双字IN 开始的 N 个双字型数据传送到从 OUT 开始的 N 个 双字存储单元。
IN、OUT 的寻址范围:VD、ID、QD、MD、SD、SMD、LD、*VD、*AC、*LD。
指令格式: BMD IN1, OUT, N 例: BMD VD0, LD0, 10
4.3.2 移位指令
移位指令都是对无符号数进行的处理,执行时只考虑要移位的存储单元的每一位数字状 态,而不管数据的值的大小。本类指令在一个数字量输出点对应多个相对固定状态的情况下 有广泛的应用。
1.左移和右移
左移和右移根据所移位的数的长度分别又可分为字节型、字型、双字型。
移位操作特点:
移位数据存储单元的移出端与 SM1.1(溢出)相连,所以最后被移出的位被放到 SM1.1 位存储单元。
移位时,移出位进入 SM1.1,另一端自动补 0。例如在右移时,移位数据的最右端 位移入SM1.1,左端每次补 0。SM1.1 始终存放最后一次被移出的位。
移位次数与移位数据的长度有关,如果所需移位次数大于移位数据的位数,则超出 的次数无效。如字左移时,若移位次数设定为 20,则指令实际执行结果是只能移 位16 次,而不是设定值 20 次。
如果移位操作使数据变为 0,则零存储器位(SM1.0)自动置位。
移位次数 N 为字节型数据。
移位指令影响的特殊存储器位:SM1.0(零)、SM1.1(溢出)。
使能流输出ENO 断开的出错条件:SM4.3(运行时间)、0006(间接寻址)。
(1)字节左移和字节右移
SLB 和 SRB,字节左移和字节右移。使能输入有效时,把字节型输入数据 IN 左移或右 移N 位后,再将结果输出到 OUT 所指的字节存储单元。最大实际可移位次数为 8。
指令格式: SLB OUT, N (字节左移)
SRB OUT, N (字节右移)
例: SLB MB0, 2
SRB LB0, 3
以第一条指令为例,指令执行情况如表4.16 所示。
表 4.16 指令 SLB 执行结果
移位次数 地址 单元内容 位 SM1.1 说明 0 MB0 10110101 x 移位前
1 MB0 01101010 1 数左移,移出位 1 进入 SM1.1,右端补 0 2 MB0 11010100 0 数左移,移出位 0 进入 SM1.1,右端补 0
116 可编程序控制器应用教程(第二版)
(2)字左移和字右移。
SLW 和 SRW,字左移和字右移。指令盒与字节移位比较,只有名称变为 SHR_W 和 SHR_W。使能输入有效时,把字型输入数据 IN 左移或右移 N 位后,再将结果输出到 OUT 所指的字存储单元。最大实际可移位次数为16。
指令格式: SLW OUT, N (字左移)
SRW OUT, N (字右移)
例: SLW MW0, 2
SRW LW0, 3
以第二条指令为例,指令执行情况如表4.17 所示。
表 4.17 指令 SRW 执行结果 移位次数 地址 单元内容 位SM1.1 说明 0 LW0 1011010100110011 x 移位前
1 LW0 0101101010011001 1 右移,1 进入 SM1.1,左端补 0 2 LW0 0010110101001100 1 右移,1 进入 SM1.1,左端补 0 3 LW0 0001011010100110 0 右移,0 进入 SM1.1,左端补 0
(3)双字左移和双字右移。
SLD 和 SRD,双字左移和双字右移。指令盒与字节移位比较,只有名称变为 SHL_DW 和SHR_DW,其他部分完全相同。使能输入有效时,把双字型输入数据 IN 左移或右移 N 位 后,再将结果输出到OUT 所指的双字存储单元。最大实际可移位次数为 32。
指令格式: SLD OUT, N (双字左移)
SRD OUT, N (双字右移)
例: SLD MD0, 2
SRD LD0, 3
2.循环左移、循环右移
循环左移和循环右移根据所循环移位的数的长度分别又可分为字节型、字型、双字型。
循环移位特点:
移位数据存储单元的移出端与另一端相连,同时又与 SM1.1(溢出)相连,所以最 后被移出的位被移到另一端的同时,也被放到SM1.1 位存储单元。例如在循环右移 时,移位数据的最右端位移入最左端,同时又进入 SM1.1。SM1.1 始终存放最后一 次被移出的位。
移位次数与移位数据的长度有关,如果移位次数设定值大于移位数据的位数,则执 行循环移位之前,系统先对设定值取以数据长度为底的模,用小于数据长度的结果 作为实际循环移位的次数。如字左移时,若移位次数设定为36,则先对 36 取以 16 为底的模,得到小于16 的结果 4,故指令实际循环移位 4 次。
移位次数 N 为字节型数据。
如果移位操作使数据变为0,则零存储器位(SM1.0)自动置位。
移位指令影响的特殊存储器位:SM1.0(零)、SM1.1(溢出)。
使能流输出ENO 断开的出错条件:SM4.3(运行时间)、0006(间接寻址)。
(1)字节循环左移和字节循环右移。
RLB 和 RRB,字节循环左移和字节循环右移。使能输入有效时,把字节型输入数据 IN 循环左移或循环右移N 位后,再将结果输出到 OUT 所指的字节存储单元。实际移位次数为 设定值取以8 为底的模所得的结果。
指令格式: RLB OUT, N (字节循环左移)
RRB OUT, N (字节循环右移)
例: RLB MB0, 2
RRB LB0, 3
(2)字循环左移和字循环右移。
RLW 和 RRW,字循环左移和字循环右移。指令盒与字节循环移位只有名称变为 ROL_W 和 ROR_W,其他部分完全相同。使能输入有效时,把字型输入数据 IN 循环左移或 循环右移N 位后,再将结果输出到 OUT 所指的字存储单元。实际移位次数为设定值取以 16 为底的模所得的结果。
指令格式: RLW OUT, N (字循环左移)
RRW OUT, N (字循环右移)
例: RLW MW0, 2
RRW LW0, 3
(3)双字循环左移和双字循环右移。
RLD 和 RRD,双字循环左移和双字循环右移。指令盒与字节循环移位只有名称变为 ROL_DW 和 ROR_DW,其他部分完全相同。使能输入有效时,把双字型输入数据 IN 循环 左移或循环右移 N 位后,再将结果输出到 OUT 所指的双字存储单元。实际移位次数为设定 值取以32 为底的模所得的结果。
指令格式: RLD OUT, N (双字循环左移)
RRD OUT, N (双字循环右移)
例: RLD MD0, 2
RRD LD0, 3
以指令RRW LW0, 3 为例,指令执行情况如表 4.18 所示。
表 4.18 指令 RRW 执行结果
移位次数 地址 单元内容 位 SM1.1 说明 0 LW0 1011010100110011 x 移位前
1 LW0 1101101010011001 1 右端1 移入 SM1.1 和 LW0 左端 2 LW0 1110110101001100 1 右端1 移入 SM1.1 和 LW0 左端 3 LW0 0111011010100110 0 右端0 移入 SM1.1 和 LW0 左端
118 可编程序控制器应用教程(第二版)
3.寄存器移位
SHRB,寄存器移位指令。
该指令在梯形图中有3 个数据输入端:DATA 为数值输入, 将 该位的值移入移位寄存器;S_BIT 为移位寄存器的最低位端;N 指 定移位寄存器的长度。每次使能输入有效时,整个移位寄存器移动 1 位。
移位特点:
移位寄存器长度在指令中指定,没有字节型、字型、双字型之分。可指定的最大长度为 64 位,可正也可负。
移位数据存储单元的移出端与 SM1.1(溢出)相连,所以最后被移出的位被放到 SM1.1 位存储单元。
移位时,移出位进入SM1.1,另一端自动补以 DATA 移入位的值。
移位方向分为正向移位和反向移位。正向移位时长度 N 为正值,移位是从最低字节的 最低位 S_BIT 移入,从最高字节的最高位移出;反向移位时,长度为 N 为负值,移位是从 最高字节的最高位移入,从最低字节的最低位S_BIT 移出。
最高位的计算方法:(N 的绝对值-1+(S_BIT 的位号))/8,相除结果中,余数即是最高位 的位号,商与S_BIT 的字节号之和即是最高位的字节号。
移位指令影响的特殊存储器位:SM1.1(溢出)。
使能流输出 ENO 断开的出错条件:SM4.3(运行时间)、0006(间接寻址)、0091(操 作数超界)、0092(计数区错误)。
指令格式: SHRB DATA, S_BIT, N 例: SHRB I0.5, V20.0, 5
以本条指令为例,指令执行情况如表4.19 所示。
表 4.19 指令 SHRB 执行结果
脉冲数 I0.5 值 VB20 内容 位 SM1.1 说明 0 1 101 10101 x 移位前。移位时,从VB20.4 移出 1 1 101 01011 1 1 移入 SM1.1,I0.5 的脉冲前值进入右端 2 0 101 10111 0 0 移入 SM1.1,I0.5 的脉冲前值进入右端 3 0 101 01110 1 1 移入 SM1.1,I0.5 的脉冲前值进入右端
4.3.3 字节交换指令
SWAP,字节交换指令。使能输入有效时,将字型输入数据 IN 的高字节和低字节进行
SWAP,字节交换指令。使能输入有效时,将字型输入数据 IN 的高字节和低字节进行