数据转换指令包含各种数制、码制之间的相互转换以及数据的求反、求补、取绝对值;符号位的扩展等操作、解码、编码、译码、数据分离、数据组合、数据查表等数据变换指令,见表7-42。通过这些指令,在程序中可以较好地解决PLC输入、输出的数据类型与内部运算数据类型不一致的问题。这些指令运用得当还可以实现各种复杂控制。
表7-42 数据转换指令及操作数
(续)
(续)
1.区块检查码计算指令:F70(BCC)
F70(BCC)指令常用于数据通信时检查数据传输是否正确。该指令是FP1指令系统中惟一的一条四操作数的指令。
指令功能:根据S1中的值所指定的计算方法,计算由S2指定首地址,长度为S3(字节数)的16位寄存器区的检查码BCC,区块检查码结果存放在D指定的16位寄存器的低8位中。
该指令用于检测信息传输过程中的错误,其中S1指定了使用十进制数据计算区块检查码BCC的方法。当S1=K0时,作加法运算;当S1=K1时,作减法运算;当S1=K2时,作异或运算。S2参与计算的数据区首地址。S3参与计算的数据字节数。D存放计算结果的寄存器。
图7-32 区块检查码计算指令示例
例7-25 区块检查码计算指令示例。如图7-32所示。
例题说明:当触发信号X0接通时,通过执行异或运算,计算从数据寄存器DT0开始的12个字节ASCII码数的区块检查码(BCC),结果存储在DT6的低字节。
2.码制变换指令:F71~F83
1)F71~F83是8条三操作数的码制变换指令,分别实现十六进制数据、BCD码、16位二进制数据、32位二进制数据与ASCII间的互换,其操作数S1、S2和D的意义如下:
S1为参加变换的常数或寄存器,32位数据时指的是低16位寄存器地址。S2为指定参加变换的字节数(二进制)或字符数(ASCII),视指令而定。
D为存放变换结果的16位寄存器或32位数据的低16位寄存器地址。可用除WX,IX、IY、K、H外的寄存器。
例7-26 F76(ABIN)指令应用示例,如图7-33所示。
图7-33 F76(ABIN) 指令应用示例
F76(ABIN)是将ASCII码数转换成二进制数的指令,其功能是根据S2指定的内容,将起始于S1指定的16位存储单元的ASCII数转换成16位二进制数,结果存储在由D指定的存储单元中。被转换的ASCII码数在S1中要颠倒顺序存储,S2设定被转换的ASCII码数的字节数。
例题说明:当X0接通时,在DT0和DT1中的4个ASCII码数转换成16位二进制数,结果存储在DT10中,如图7-34所示。
图7-34 S2=K4时的结果
注意事项:如果由S1和S2指定的区域大于要转换的数据,要确保在存储ASCII码数时,从高字节开始存储在S1和S2指定的区域中,将多余的字节置为“0”(ASCII为H30)或“空格”(ASCII为H20)。
2)F80~F83是4条双操作数的码制变换指令,分别实现16位和32位二进制数据与BCD码数据间的互换,其操作数S和D的意义如下:
S为参加变换的常数或寄存器。D为存放变换结果的16位寄存器或32位数据的低16位寄存器地址。
例7-27 F80(BCD)指令应用示例,如图7-35所示。
图7-35 F80(BCD)指令应用示例
F80(BCD)是将16位二进制数转换成4位BCD码数的指令,其功能是将S指定的16位二进制数转换成BCD码数,结果存储在D中,被转换的数据要在K0(H0)~K9999(H270F)的范围内。
例题说明:当触发信号X0接通时,定时器当前值存储单元EV0中的数据被转换成4位BCD码数,结果存储在输出继电器WY0中,如图7-36所示。
3.数据计算指令:F84~F88
F84~F88这5条指令是将D指定的16位数据或32位二进制数据分别求反、求补、取绝对值,并将结果存储在D或(D+1,D)中。操作数D不可用寄存器WX、K、H。
图7-36 指令的执行结果
4.16位数据符号位扩展指令:F89(EXT)
F89(EXT)是16位二进制数符号位的扩展指令,其功能为将D指定的16位数据的符号位全部复制到D+1寄存器的各个位中,保留D寄存器,扩展结果作为32位数据存储于(D+1,D)中。用该指令可将16位数据转变为32位数据。
例7-28 F89(EXT)指令应用示例。如图7-37。
图7-37 F89(EXT)指令应用举例
例题说明:当触发信号X0接通时,该指令将DT0中数据的符号位复制到DT1中,存放在DT0和DT1中的数据就可作为32位二进制数来处理,如图7-38所示。其中DT0中的数据HFB2E是“-1234”的补码。若DT0=H1234,则指令执行后DT0=H1234,DT1=H0,即将DT0的符号位“0”扩展到DT1中,DT1中的每一位都是0。
图7-38 指令的执行结果
5.编码/解码指令:F90~F92
1)F90(DECO)是解码指令,其功能是将S指定的16位二进制数根据n的设定进行解码,解码的结果存储在起始于D指定的存储单元的区域中。
其中,S为参与解码的数据或寄存器,n用十六进制数规定待解码的起始位和解码的位数,如图7-39所示。解码的位数与结果的关系见表7-43。
图7-39 n的格式示意图
表7-43 解码的位数与结果的对应关系
例7-29 F90(DECO)指令应用示例。如图7-40所示。(www.xing528.com)
例题说明:当触发信号X0接通时,将WX1中第7位开始的5位二进制数解码,结果存储在DT0中,5位二进制数为“01010”,对应的位地址是K10,解码后将目的单元的第10位置1,其余的数据位全为0,如图7-41所示。
图7-40 F90(DECO)指令应用示例
图7-41 解码的结果
如果解码条件n规定的起始位地址为H0(位地址为0),解码的位数为H4(4位),即对4位数据解码时,解码结果(16位二进制数)见表7-44。
表7-44 n=4解码结果的对应关系
(续)
2)F91(SEGT)是十六进制数的7段解码指令,其功能是将S指定的4位十六进制数转换成7段LED数码管(共阴)显示对应的字形码,结果存储在起始于D指定的16位存储单元的存储区域中。其中,S为被译码的数据或寄存器。D为存放译码结果的寄存器首地址。
在执行该指令时,将每4位二进制码译成7位的7段显示码,数码的前面补0变成8位。7段转换结果见表7-45。
表7-45 7段解码表
例7-30 F91(SEGT)指令应用举例。如图7-42所示。
功能说明:
当触发信号X0接通时,DT0中的数据被转换成4位十六进制数对应的7段字形码,结果存储在WY1和WY0中,如图7-43所示。
图7-42 F91(SEGT)指令应用举例
图7-43 指令的执行结果
3)F92(ENCO)为编码指令,其功能是将S指定的16位二进制数根据n的规定进行编码,结果存储在起始于D指定的16位存储单元的存储区域中,存储结果的单元中无效位设置为0
图7-44 n的格式示意图
其中,S为被编码的数据或寄存器首地址,n为编码控制字或存放控制字的寄存器。控制字n的格式如图7-44所示。
nL为n的bit0~bit3,用于设定编码数据的有效位长度,nL的取值范围为H1~H8o S的有效位长度=2nL。
nH为n的bit8~bit11,用于设定D寄存器从何位开始存放结果,nH取值范围为H0~HF。
6.数据组和/分离指令:F93、F94
1)F93(UNIT)是16位二进制数的组合指令,其功能是将S指定的1~4个16位存储单元的最低4位取出来组合成一个字,结果存储在D指定的16位存储单元中。
S:存放被组合数据的寄存器首地址
n:规定了被组合数据的个数,范围n=K0~K4。当n=K0时,不执行该命令。
D:存放组合结果的寄存器。当n<K4时,D中未被占用的高位数据位被自动复位为0。
2)F94(DIST)是16位二进制数的分离指令,其功能是将S指定的4位十六进制数分离,结果依次存储在D开始的1~4个16位存储单元的低4位(位地址0~3),其余的数据位保持不变。
S:参与分离的数据或寄存器
n:规定了分离数据的个数,范围n=K0~K4。当n=K0时,不执行该命令。
D:存放组合结果的寄存器首地址。分离结果只存放在寄存器的低四位中,D中未被占用的高位数据位被自动复位为0。
7.字符→ASCII转换指令:F95(ASC)
F95(ASC)是将字符常数转换成ASCII码的指令,其功能是将S指定的字符常数(以M开始)转换成对应的ASCII码,结果存储在D指定的16位存储单元开始的存储区域中。规定S指定的字符个数不得多于12个,即D指定的16位寄存器区不得多于6个。
8.表数据查找指令:F96(SRC)
F96(SRC)是在16位存储单元中查找指定数据的指令,其功能是在S2(首地址)和S3(末地址)指定的存储区域中查找与S1的内容相同的数据。
(1)首地址S2和末地址S3必须满足如下条件:
1)S2和S3属于同一类型的操作数。
2)S2≤S3,数据从S2~S3进行搜寻。
(2)当查找完成时,查找结果存储如下:
1)与S1的内容相同的数据个数存储在特殊数据寄存器DT9037中。
2)从S2开始的第一个存储单元算起,第一次发现该数据的位置被存储在特殊数据寄存器DT9038中。
例7-31 F96(SRC)指令应用示例。如图7-45所示。
例题说明:当触发信号X0接通时,该指令在DT10~DT20中查找与DT0内容相同的数。查找完成后,查找到与DT0内容相同的数据的次数存储在DT9037。从DT10开始,第一次发现该数据的位置存储在DT9038,如图7-46所示。
图7-45 F96(SRC)指令应用示例
图7-46 数据查找指令的执行结果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。