2.3 数据处理指令
2.3.1 传送指令
1.传送(MOV)指令
MOV指令(FNC 12)将源操作数(S·)传送到指定的目标操作数(D·)中,图2-4中的X000为ON时,将数据K2X010传送给K2Y010;将常数20传送给D0,将32位整数(D11、D10)传送给(D13、D12),定时器T0开始定时,并将当前值实时传送给D20;把定时器T0的第一个扫描周期定时值1传送给D22。
图2-4 传送指令
视频“MOV指令”可通过扫描二维码2-2播放。
二维码2-2
2.移位传送(SMOV)指令
SMOV指令(FNC 13)将源操作数(S·)和目标操作数(D·)的内容(数值范围是0~9999)转换成4位数的BCD码,再将源操作数(S·)对应BCD码中从m1位数起到m2位数对应的部分,传送到目标操作数(D·)中以n位数为起始的位置,然后转化成BIN(二进制)码,然后保存在目标操作数(D·)中,如图2-5所示。
图2-5 移位传送指令
3.取反传送(CML)指令
CML指令(FNC 14)将源操作数(S·)中的数据逐位取反(0→1,1→0,即进行“非”运算),然后传送到目标操作数数据(D·)中。若源数据为常数K,该数据自动转换为二进制数,CML用于反逻辑输出时非常方便,如图2-6所示,其中指令的作用是将D0中低8位取反后传送到数据寄存器D2和Y007~Y000中。
图2-6 取反和块传送指令
视频“CML指令”可通过扫描二维码2-3播放。
二维码2-3
4.块传送(BMOV)指令
BMOV指令(FNC 15)将源操作数(S·)指定的软元件开始的n个数据组成的数据块传送到指定的目标地址区。如果软元件号超出允许范围,数据仅传送到允许的范围。BMOV指令不能用于32位整数。源数据区与目标数据区可以交叉,建议不交叉使用,否则源数据在传送过程中会被改写,如图2-6所示。
5.多点传送(FMOV)指令
FMOV指令(FNC 16)是将同一个数据传送到一指定目标地址开始的连续n(n≤512)个软件元件中。传送后n个软元件中的数据完全相同。如果软元件号超出允许的范围,仅仅传送允许范围内的数据。在图2-7中,当X000常开触点接通时,常数K123分别送给D0~D19这20个数据寄存器,可以使用这样的方法对多个连续的数据寄存器清零或赋某一特定数值。
6.交换(XCH)指令
XCH指令(FNC 17)是将指定的两个目标操作数中的数据相互交换。交换指令应采用脉冲执行方式,否则在每一个扫描周期都要交换一次。在图2-7中,当X000常开触点接通时,把数据寄存器D20和D21中数据相互交换,把数据寄存器(D23、D22)和(D25、D24)中数据相互交换。
7.高低字节互换(SWAP)指令
SWAP指令(FNC 147)是将指定字元件中高低两个字节相互交换(一个16位的字由两个8位的字节组成),在图2-7中,当X000常开触点接通时,会把D30中的高低字节的值互换,32位指令“DSWAP P D40”是指首先交换D40中高字节和低字节的值,然后交换D41中的高字节和低字节的值。
SWAP指令应采用脉冲执行方式,否则程序会在每一个扫描周期都进行交换一次的操作。
8.变换指令
(1)BCD转换指令
BCD变换指令(FNC 18)是将源操作数(S·)中的二进制数变换为BCD码(BCD码是将十进制数字0~9用四位二进制数表示,如5的BCD码为0101)后,送到目标操作数(D·)中。如果16位运算的执行结果超过了0~9999的范围,或32位运算的执行结果超过了0~99999999的范围,执行此指令将会出错。在图2-8中,当X000常开触点接通时,会将D0中数据转换为BCD码传送给K4Y000。
(2)BIN转换指令
BIN变换指令(FNC 19)是将源操作数(S·)中的BCD码变换为二进制(BIN)数后送到目标操作数(D·)中。在图2-8中,当X000常开触点接通时,会将K4X000中四位BCD码转换为二进制数据传送给D1。如果源操作数中的数据不是BCD码,执行此指令将会出错。
图2-7 多点传送、交换及高低字节互换指令
图2-8 变换指令
【例2-1】移位传送指令的数据组合(如图2-9所示)。
图2-9中采用拨码盘输入数据,但102与101、100并不是从连续的输入端输入,对D1转换值将其第1位(m1=1)起的1位部分(m2=1)内容传送到D2的第3位(n=3),然后将其转换为BIN码。
图2-9 移位传送指令的数据组合示例程序