PLC中数值制式转换的原理及编程
在PLC编程中,对于一个整数,它的二进制或16进制或10进制的数值形式会自动转换,不需人为干预。可是将一个整数转换为BCD码或转换为AICII码,就不能自动转换,有的PLC有这样的转换指令,如S7-200,我们需要时,直接调用对应的转换指令就可以了。可是有的PLC没有这方面的转换指令,如需要这种数值制式转换,就得自己编写转换程序。要想编出转换程序,应必须先了解要转换的这二种数值制式之间的数学关系,只有了解了才能编出合理的转换程序。下面我们分别介绍几种数制转换的依据及编程。
一、16进制数转换为BCD码的数学依据及编程:
BCD码是以4位二进制数表示一位十进制数的一种数制形式,它源于电子线路的计数器,该计数器是由4位二进制计数器组成,4位二进制计数器共有16种输出状态:0000、0001、0010、0011……1111,由高位向低位各位权依次代表为8、4、2、1,这4位数之和表示一位16进制数或一位10进制数。用这16种状态表示一个数的称之为二进制(或称16进制)计数器,只用这16种状态的前10种状态表示一个数的计数器,称之为10进制计数器,这十进制编码为0000、0001、0010……1000、1001,这种每4位二进制数代表一位10进制数的编码称之为
一个字存储器有16个位,可记录4位BCD码,一个字记录最大的BCD码为 9999。即:1001_1001_1001_1001。
了解了这些就可以进行将整数转换为BCD码,或将BCD码转换为整数的编程:
(一)整数转换为BCD码编程
在PLC里,整数通常是以16进制(即2进制)数的形式存放在存储器内,将整数转换为BCD码编程思路是这样:将原整数存放在M1存储器里,M2为BCD码存放区,先将M2清0,如最大整数<10000,则M2选用一个字存储器就够,计算过程是:先判断M1是否大于10进数8000(转换16进制数为
下面使用S7-200编写的整数转换为BCD码的梯形图,供你参考。
本程序是将16进制数
(二)、BCD码转换为整数(16进制数)编程
转换构思:以4位BCD码为例,它占一个字(16个位),千位上的4为分别代表十进制数的8000、4000、2000、1000,而每位上的数字只能为0或1二种,百位、十位及个位都与之相似,我们就从千位数的最高位开始判断,如其值=1,说明此数含有8000,将8000的16进制数值(1F40)加在转换为16进制数的存储区里(运算前该区清0),如其值=0,说明此数不含有8000,就不进行加8000的运算,将BCD码存储器左移一位,此时再判断千位上的最高位,如=1,已不是8000而变为4000,即将4000的16进制数加在16进制数的存储区里,如=0,不加,将BCD码存储器再左移一位,进行2000位数的判断……,其编程如下:
BCD码转换为16进制数与16进制数转换为BCD码,二者互为反运算,编程也极为相似,这里就不做过多说明,仔细看编程注解就可以明白。本程序输入的BCD码为3000,放在VW10里,转换为16进制数放在VW30,监视VW30 ,其运算结果为16进制数16#BB8。
二、BCD码转换为AICII码与ASCII码转换为BCD码的数学依据及编程
(一)、BCD码转换为AICII码的编程思路及编程
一般串口通讯传递数据均用ASCII码,ASCII码表示一位10进制的数(0~9)占用一个字节,其高4位用“3” 表示,低4位用BCD码表示,如数字 5 的ASCII码为:“35”即:0011_0101。因此,若将一个整数转换为ASCII码,必须先将该整数转换为BCD码,再由BCD码转换为ASCII码。前面关于整数转换为BCD码的编程已经讲完,这里不再重述,只讲如何将BCD码转换为ASCII码的思路及编程。
现举一例:一个4位BCD码:1234,即:0001_0010_0011_0100,转换为ASCII码为:31 32 33 34,即:00110001_00110010_00110011_00110100。
下面的梯形图就是用S7-300编写的将4为BCD码1234转换为ASCII码的程序。供大家参考,如有不清楚的地方可以提出,本人可以给与解答。
由串口通讯传递来的数据是ASCII,需将ASCII码转换为BCD码,才可用以显示,转换为整数才能用于运算。下面的程序就是将ASCII码转换为BCD码,再由BCD码转换为整数的梯形图,供大家分析参考。
三、二进制数与格雷码相互转换的数学依据及编程
(一)、格雷码转换为二进制码的逻辑运算关系
根据格雷码转换为二进制码的逻辑关系,用S7-200编写的梯形图。见下图:
说明:梯形图中
1、MW0 为格雷码存数区,本图是置入格雷码值为“0001_
2、MW2为二进制数存数区,即转换后的二进制数存入此区。
3、I1.0 为手控转换按钮,是为试验用的,T101断电延时定时器是为防按钮颤抖用的。实际应用时可不用,选用内部的一“位信号”来控制程序运行就可以了。
4、试验此程序,你可先将要转换的格雷码写入MW0,存盘下载,运行时,监视程序最后一条,按下按钮(I1.0),按钮抬起时,MW2的数值就是转换后的二进制数值。
(二)、用二进制码转换为格雷码的思路及编程
前面用S7-200编写的格雷码转换为二进制码的梯形图,现在再用二进制码转换为格雷码的关系式,编写了“用S7-200编写的二进制码转换为格雷码的梯形图”,供大家参考,此程序是经过上机验证的,好用。
编程说明: 二进制数转换为格雷码的转换原则是:将二进制数的最高位数“
在梯形图中
1、MW0 为二进制存数区,本图是置入二进制数值为“16#D
2、MW2为格雷码数存数区,即转换后的格雷码存入此区。
3、I1.0 为手控转换按钮,是为试验用的,T101断电延时定时器是为防按钮颤抖用的。实际应用时可不用,选用内部的一“位信号”来控制程序运行就可以了。
4、试验此程序,你可先将要转换的二进制数写入MW0,存盘下载,运行时,监视程序最后一条,按下按钮(I1.0),按钮抬起时,MW2的数值就是转换后的格雷码数值。
楼主最近还看过