用于实现二进制、ASCII码、BCD码和十六进制数之间的相互转换,以及数据的求补、取反、求绝对值、编码、解码、组合和分离等操作,数据转换指令共有26条,如表3-64所示。
表3-64 数据转换指令
数据转换指令在PLC指令中属于比较复杂的一类指令,只有在掌握了二进制、ASCII码、BCD码、原码、反码、补码、7段字形码等相关基本概念的基础上才能真正理解和掌握这类指令。另外,FP1系列PLC中的C14型和C16型PLC不支持功能号为F70~F78等9条指令,其余的C24型、C40型、C56型和C72型则都支持。
1.F70(BCC)
该指令为区块检查码的计算指令,其功能是根据S1设定的计算方式,计算由S2指定的16位存储单元开始,数据长度为S3字节的ASCII码数据块的校验码(BCC),结果存储在由D指定的16位存储单元的低字节中,高字节保持不变,指令格式及操作数范围如表3-65所示。
S1的设定使用十进制数计算区块检查码的方法,K0表示加法运算,K1表示减法运算,K2表示逻辑“异或”运算。
表3-65 指令格式及操作数范围
在表3-65的梯形图中,当触发信号使X0接通时,通过执行加法运算,计算从数据寄存器DT1开始的10个字节ASCII码数据块的校验码(BCC),结果存储在DT18的低字节。
2.F71(HEXA)
该指令为十六进制数转换成ASCII码数的指令,其功能是根据S2设定的内容,将S1指定的16位存储单元开始的十六进制数转换成对应的ASCII码数,结果存储在由D指定的16位存储单元开始的区域中,指令格式及操作数范围如表3-66所示。
表3-66 指令格式及操作数范围
当触发信号X0接通时,将存储在DT0中的4个字节数据转换成ASCII码数,结果存储在DT11和DT10中,指令中S2指定将要转换的数据的字节数。当S2=K1(一个字节)时,只转换S1的低字节。S2=K4(4个字节)时的结果如图3-44所示。
图3-44 S2=K4时F71(HEXA)指令执行结果
一个十六进制数(4位二进制)对应的ASCII码数采用8位二进制(一个字节)表示,将十六进制数转换成ASCII码数后,数据长度为原来的2倍。
十六进制数的ASCII码数对应的二进制(B)、十六进制(H)和十进制(D)数如表3-67所示。
表3-67 ACSII码数
3.F72(AHEX)
该指令是将ASCII码数转换成十六进制数的指令,功能是根据S2指定的内容,将S1指定的起始于16位存储单元的ASCII码数转换成十六进制数,结果存储在起始于由D指定的16位存储单元的存储区域中,指令格式及操作数范围如表3-68所示。
表3-68 指令格式及操作数范围
当触发信号使X0接通时,将存储在数据寄存器DT10和DT11中的4个ASCII码数转换成十六进制数,结果存储在DT0中,如图3-45所示。
一个ASCII码数采用8位二进制(一个字节)表示,转换成十六进制数后,数据长度为原来ASCII码数的一半。
图3-45 S2=K4时指令的执行结果
4.F73(BCDA)
该指令是将BCD码数转换为ASCII码数的指令,其功能是根据S2指定的内容,将起始于S1指定的16位存储单元的BCD码数转换成ASCII码数,结果存储在起始于由D指定的16位存储单元的存储区域中,指令格式及操作数范围如表3-69所示。
表3-69 指令格式及操作数范围
当触发信号使X0接通时,存储在DT0中的4位BCD码数(2个字节)被转换成ASCIII码数,结果存储在DT11和DT10中,如图3-46所示。
S2指定了原数据的字节数及转换后数据的存储方向(正/反方向),设定格式如图3-47所示。若表3-69中S2=H1002,则指令执行后结果反向存储,DT10=H3635,DT11=H3837。
图3-46 S2=H2时的结果
图3-47 S2的设定格式
一个BCD码数占4位(半字节),一个ASCII码数占8位(一个字节),因此转换成ASCII码数后,数据长度为原来的2倍。
5.F74(ABCD)
该指令是将ASCII码数转换成BCD码数的指令,其功能是根据S2指定的内容,将起始于S1指定的16位存储单元的ASCII码数转换成BCD码数,结果存储在起始于由D指定的16位存储单元的存储区域中,指令格式及操作数范围如表3-70所示。
表3-70 指令格式及操作数范围
S2指定了原数据的字节数及转换后数据的存储方向(正/反方向),设定格式如图3-48所示。当触发信号使X0接通时,存储在DT1、DT0中的4个字节ASCII码数转换成4位BCD码数,结果存储在DT10中,如图3-49所示。若表3-70中S2=H1004,则指令执行后结果反向存储,DT10=H8765。
图3-48 S2的设定格式
图3-49 S2=H4时的结果
一个BCD码数只占半字节,一个ACSII码数占8位(一个字节),因而转换成BCD码数后,数据的长度为原来的一半。
6.D75(BINA)
该指令是将二进制数转换成ASCII码数的指令,其功能是将S1指定的16位二进制数转换成ASCII码数,结果根据S2的设定存储在起始于由D指定的16位存储单元的存储区域中。在目的存储单元D中,数据的存储顺序是按照转换后的数字由高字节开始存储(逆序),指令格式及操作数范围如表3-71所示。
表3-71中,当触发信号使X0接通时,存储在DT0中的16位二进制数(-123)被转换成对应的ASCII码数,结果存储在DT10和DT11中,如图3-50所示。
表3-71 指令格式及操作数范围
这里S2=K4,转换后的数据为4个字节。需要注意的是,PLC中的数据都是以补码的形式存储的,此处DT0中的数据(HFF85)是-123的补码。若S2=K6,转换后为6个字节,多余的低位存储单元中被填以空格(ASCII码为H20),此时DT12=H3332,DT11=H312D,DT10=H2020。
S2设定了保存结果的存储单元的字节数(ASCII码数),在转换负数时,“-”也被转换成对应的ASCII码(ASCII码为H2D)。若转换的是正数,“+”号不被转换。如果由S2指定的区域大于转换所需的空间,多余的低位存储单元中被填以空格。
7.F76(ABIN)
该指令是将ASCII码数转换成二进制数的指令,其功能是根据S2的设定,将起始于S1指定的16位存储单元的ASCII码数转换成16位二进制数,结果存储在由D指定的存储单元中。被转换的ASCII码数在S1中要颠倒顺序存储,S2设定被转换的ASCII码数的字节数,指令格式及操作数范围如表3-72所示。
表3-72 指令格式及操作数范围
当X0接通时,在DT0和DT1中的4个ASCII码数转换成16位二进制数,结果存储在DT10中,如图3-51所示。
如果由S1和S2指定的区域大于要转换的数据所需的保存区域,从高字节开始存储到S1和S2指定的区域中,并将多余的字节置为“0”(ASCII码为H30)或“空格”(ASCII码为H20)。
8.F77(DBIA)
该指令是将32位二进制数转换成ASCII码数的指令,功能是将S1指定的32位二进制数转换成ASCII码数,结果根据S2的设定存储在起始于由D指定的16位存储单元的存储区域中。在D中,数据的存储按照逆转后的数字顺序由高字节开始存储,指令格式及操作数范围如表3-73所示。
图3-50 S2=K4时的结果
图3-51 S2=K4时的结果
表3-73 指令格式及操作数范围
当触发信号X0接通时,存储在DT0和DT1中的32位二进制数被转换成对应的ASCII码数,转换后的数据存储在DT10~DT14中,如图3-52所示。
图3-52 S2=K10时的结果
需要说明的是,此处DT0和DT1中的数HFF439EB2是被转换数据-12345678的补码。指令中S2用于设定保存结果中存储单元的字节数。若被转换的是负数,“-”号也被转换成对应的。ASCII码(ASCII码为H2D);若被转换的数据是正数,则“+”号不转换。
如果由S2指定的存储单元数大于所需要的空间,多余的字节将被置为“空格”(ASCII码为H20)。
9.F78(DABI)
该指令是将ASCII码数转换成32位二进制数的指令,其功能是根据S2的设定,将起始于S1指定的16位存储单元的ASCII码数转换成32位二进制数,结果存储在起始于由D指定的16位存储单元的存储区域中,指令格式及操作数范围如表3-74所示。
表3-74 指令格式及操作数范围
指令中S2用于设定被转换数据的字节数,当触发信号使X0接通时,DT0~DT4中的10个ASCII码数被转换成32位二进制数,结果存储在DT11和DT10中,如图3-53所示。
图3-53 S2=K10时的结果
10.F80(BCD)
该指令将16位二进制数转换成4位BCD码数的指令,其功能是将S指定的16位二进制数转换成BCD码数,结果存储在D中,被转换的数据要在K0(H0)~K9999(H270F)的范围内,指令格式及操作数范围如表3-75所示。
表3-75 指令格式及操作数范围
当触发信号使X0接通时,定时器当前值存储单元EV0中的数据被转换成4位BCD码数,结果存储在输出继电器WY0中,如图3-54所示。
11.F81(BIN)
该指令是将4位BCD码数转换成16位二进制数的指令,能够将S指定的4位BCD码数转换成16位二进制数,结果存储在D中,指令格式及操作数范围如表3-76所示。
表3-76 指令格式及操作数范围
当触发信号使X0接通时,DT0中的内容(4位BCD码数)被转换成二进制数,结果存储在DT10中,如图3-55所示。
图3-54 指令的执行结果
图3-55 指令的执行结果
12.F82(DBCD)
该指令是将32位二进制数转换成8位BCD码数的指令,其功能是将S指定的32位二进制数转换成8位BCD码数,结果存储在(D+1,D)中,被转换数据需在K0(H0)~K99999999(H5F5EOFF)的范围内,指令格式及操作数范围如表3-77所示。
表3-77 指令格式及操作数范围
当触发信号使X0接通时,DT1和DT0中的二进制数被转换成8位BCD码数,结果存储在DT11和DT10中,如图3-56所示。
13.F83(DBIN)
该指令是将8位BCD码数转换成32位二进制数的指令,功能是将S指定的用BCD码表示的8位十进制数转换成32位二进制数,结果存储在D+1和D中,被转换数据要在K0(H0)~K99999999(H5F5E0FF)的范围内,指令格式及操作数范围如表3-78所示。
图3-56 指令的执行结果
表3-78 指令格式及操作数范围
当触发信号使X0接通时,DT1和DT0中的8位BCD码数被转换成32位二进制数,结果存储在DT11和DT10中,即将BCD码数K23456789转换成二进制数(对应的十六进制为H165EC15),如图3-57所示。
图3-57 指令的执行结果
14.F84(INV)
该指令是将16位二进制数求反的指令,功能是将D指定的16位二进制数的每一位(0或1)按位取反,结果仍存储在D中,指令格式及操作数范围如表3-79所示。
表3-79 指令格式及操作数范围
当触发信号使X0接通时,对DT0中的数据求反,结果存储在DT0中,如图3-58所示。
15.F85(NEG)(www.xing528.com)
该指令是16位二进制数的求补指令,其功能是将D指定的16位二进制数求补,求补的方法是将所有数据位求反后再加1,结果仍存储在D中,指令格式及操作数范围如表3-80所示。
表3-80 指令格式及操作数范围
当触发信号使X0接通时,将DT0中的16位二进制数求补,结果仍存储在DT0中,如图3-59所示。
图3-58 指令的执行结果
图3-59 指令的执行结果
与计算机中的求补运算不同,FP1系列PLC的求补指令F85(NEG)在执行时是将所有的数据位(包括最高位的符号位)求反后再加1。而计算机中,正数的补码与原码相同,但对负数的求补运算是将除了符号位(即最高位)以外的数据位取反再在最低位上加1,所以要注意两者的不同。
16.F86(DNEG)
该指令是将32位二进制数求补的指令,与F85类似,其功能是将D指定的32位二进制数求补,结果仍存储在D中,指令格式及操作数范围如表3-81所示。
表3-81 指令格式及操作数范围
当触发信号使X0接通时,对DT1和DT0中的数据求补,结果仍存储在DT1和DT0中,如图3-60所示。
图3-60 指令的执行结果
17.F87(ABS)
该指令是求16位二进制数绝对值的指令,其功能是求由D指定的带符号的16位二进制数的绝对值,结果仍存储在D中,指令格式及操作数范围如表3-82所示。
表3-82 指令格式及操作数范围
当触发信号使X0接通时,该指令求DT0中数据的绝对值,结果存储在DT0中,如图3-61所示。图中DT0=HFFFF是“-1”的补码,其绝对值为1。
18.F88(DABS)
该指令是求32位二进制数绝对值的指令,功能是求由D指定的带符号的32位二进制数的绝对值,结果仍存储在D+1和D中,指令格式及操作数范围如表3-83所示。
图3-61 指令的执行结果
表3-83 指令格式及操作数范围
当触发信号使X0接通时,该指令求DT1和DT0中数据的绝对值,结果仍存储在DT1和DT0中,如图3-62所示。图中的(DT1,DT0)=HFFFE1DC0是“-123456”的补码,其绝对值为123456。
图3-62 指令的执行结果
19.F89(EXT)
该指令是16位二进制数符号位的扩展指令,其功能是将由D指定的16位二进制数的符号位复制到D+1,结果存储在D+1和D中。若D中的16位二进制数是负数(最高位为1),扩展后D中的数据保持不变,D+1中的每一位都是1,指令格式及操作数范围如表3-84所示。
表3-84 指令格式及操作数范围
当触发信号使X0接通时,该指令将DTo中数据的符号位复制到DT1中,存放在DT0和DT1中的数据就可作为32位二进制数来处理,如图3-63所示。
图3-63 指令的执行结果
其中DT0中的数据HFB2E是“-1234”的补码。若DT0=H1234,则指令执行后DT0=H1234,DT1=H0,即将DT0的符号位“0”扩展到DT1中,DT1中的每一位都是0。
20.F90(DECO)
该指令是解码指令,其功能是将S指定的16位二进制数根据n的设定进行解码,结果存储在起始于由D指定的存储单元的区域中,指令格式及操作数范围如表3-85所示。
表3-85 指令格式及操作数范围
n的设定格式如图3-64所示。
解码的位数与结果的对应关系如表3-86所示。
表3-86 解码的位数与结果的对应关系
当触发信号使X0接通时,将WX1中第7位开始的5位二进制数解码,结果存储在DT0中,5位二进制数为“01010”,对应的位地址是K10,解码后将目的单元的第10位置为1,其余的数据位全为0,如图3-65所示。
图3-64 n的格式
图3-65 解码的结果
如果解码条件n规定的起始位地址为H0(位地址为0),解码的位数为H4(4位),即对4位数据解码时,解码结果(16位二进制数)如表3-87所示。
表3-87 解码结果
(续)
21.F91(SEGT)
该指令是十六进制数的7段解码指令,其功能是将S指定的4位十六进制数转换成7段LED数码管(共阴)显示对应的字形码,结果存储在起始于D指定的16位存储单元的存储区域中,指令格式及操作数范围如表3-88所示。
表3-88 指令格式及操作数范围
用于7段字形码显示的数据占8位,来表示一个十六进制数,十六进制数的7段字形码如表3-89所示。
表3-89 7段解码表
当触发信号使X0接通时,DT0中的数据被转换成4位十六进制数对应的7段字形码,结果存储在WY1和WY0中,如图3-66所示。
图3-66 指令的执行结果
22.F92(ENCO)
该指令为编码指令,其功能是将S指定的16位二进制数根据n的规定进行编码,结果存储在起始于D指定的16位存储单元的存储区域中,存储结果的单元中无效位设置为0,指令格式及操作数范围如表3-90所示。n的设定格式如图3-67所示。
表3-90 指令格式及操作数范围
图3-67 n的格式
当触发信号使X0接通时,该指令将WX1和WX0中的32位数编码,结果存储在DT0中,如图3-68所示。
图3-68 编码的结果
如果设定编码条件的起始位地址为H0(位地址为0),编码的位数为H4(24=16位),对16位二进制数进行编码时,编码的结果如表3-91所示。
表3-91 16位二进制数编码的结果
23.F93(UNIT)
该指令是16位二进制数的组合指令,其功能是将S指定的1~4个16位存储单元的最低4位取出来组合成一个字,结果存储在D指定的16位存储单元中,指令格式及操作数范围如表3-92所示。
n规定了被组合数据的个数,范围为K0~K4。当n=K0时,不执行该命令;当n<K4时,D中未被占用的高位数据位被自动复位为0。
当触发信号使X0接通时,将输入继电器WX0~WX2的低4位取出来组合成一个字存放在DT1中,如图3-69所示。
表3-92 指令格式及操作数范围
图3-69 n=K3时的数据组合
24.F94(DIST)
该指令是16位二进制数的分离指令,其功能是将S指定的4位十六进制数分离,结果依次存储在D开始的1~4个16位存储单元的低4位(位地址0~3),其余的数据位保持不变,指令格式及操作数范围如表3-93所示。
表3-93 指令格式及操作数范围
n规定了分离数据的个数,范围为K0~K4。当n=K0时,不执行该命令。
当触发信号使X0接通时,DT0中的4位十六进制数的3位(从低位开始)被分离出来,分离出来的数据分别存放在WR0、WR1、WR2的最低位中,如图3-70所示。
25.F95(ASC)
该指令是将字符常数转换成ASCII码的指令,其功能是将S指定的字符常数(以M开始)转换成对应的ASCII码,结果存储在D指定的16位存储单元的存储区域中。当S指定的字符个数小于12时,多余的目的单元以空格填充(ASCII码为H20),指令格式及操作数范围如表3-94所示。
图3-70 n=K3时的数据分离
表3-94 指令格式及操作数范围
当触发信号使X0接通时,字符常数“AB123456EF”被转换成对应的ASCII码,结果逆序存储在DT0~DT5中,如图3-71所示。
图3-71 指令的执行结果
FP1系列PLC中的C14型和C16型PLC不支持本条指令,其余的C24型、C40型、C56型和C72型都支持,这是需要注意的。
26.F96(SRC)
该指令是在16位存储单元中查找指定数据的指令,其功能是在S2(首地址)和S3(末地址)指定的存储区域中查找与S1的内容相同的数据,指令格式及操作数范围如表3-95所示。
其中首地址S2和末地址S3必须满足如下条件:
1)S2和S3属于同一类型的操作数。
2)S2≤S3,数据从S2至S3进行搜寻。
当查找完成时,查找结果存储情况如下:
表3-95 指令格式及操作数范围
1)与S1的内容相同的数据个数存储在特殊数据寄存器D79037中;
2)从S2开始的第一个存储单元算起,第一个被查找到的数据位置,被存储在特殊数据寄存器DT9038中。
当触发信号使X0接通时,该指令在DT10~DT20中查找与DT0内容相同的数。查找完成后,查找到与DT0内容相同的数据次数存储在DT9037。从DT10开始,第一次发现该数据存储在D79038,如图3-72所示。
图3-72 数据查找指令的执行结果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。