PLC中数值制式转换的原理及编程 点击:1231 | 回复:2



wyb2866255

    
  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-01-20 21:44:52
楼主

            PLC中数值制式转换的原理及编程

PLC编程中,对于一个整数,它的二进制或16进制或10进制的数值形式会自动转换,不需人为干预。可是将一个整数转换为BCD码或转换为AICII码,就不能自动转换,有的PLC有这样的转换指令,如S7-200,我们需要时,直接调用对应的转换指令就可以了。可是有的PLC没有这方面的转换指令,如需要这种数值制式转换,就得自己编写转换程序。要想编出转换程序,应必须先了解要转换的这二种数值制式之间的数学关系,只有了解了才能编出合理的转换程序。下面我们分别介绍几种数制转换的依据及编程。

一、16进制数转换为BCD码的数学依据及编程:

BCD码是以4位二进制数表示一位十进制数的一种数制形式,它源于电子线路的计数器,该计数器是由4位二进制计数器组成,4位二进制计数器共有16种输出状态:0000000100100011……1111,由高位向低位各位权依次代表为8421,这4位数之和表示一位16进制数或一位10进制数。用这16种状态表示一个数的称之为二进制(或称16进制)计数器,只用这16种状态的前10种状态表示一个数的计数器,称之为10进制计数器,这十进制编码为000000010010……10001001,这种每4位二进制数代表一位10进制数的编码称之为8421,即BCD码。个位上的4位有效数(1)分别代表10进制数的8421,十位上的4位有效数(1)分别代表10进制数的80402010,百位上的4位有效数(1)分别代表10进制数的800400200100,千位上的4位有效数(1)分别代表10进制数的8000400020001000……

一个字存储器有16,可记录4BCD码,一个字记录最大的BCD码为 9999。即:1001_1001_1001_1001

了解了这些就可以进行将整数转换为BCD码,或将BCD码转换为整数的编程:

(一)整数转换为BCD码编程

     PLC里,整数通常是以16进制(即2进制)数的形式存放在存储器内,将整数转换为BCD码编程思路是这样:将原整数存放在M1存储器里,M2BCD码存放区,先将M20,如最大整数<10000,则M2选用一个字存储器就够,计算过程是:先判断M1是否大于10进数8000(转换16进制数为1F40),如大于,用M1 - 1F40,将差-->M1M2 1 ,如小于,不作减8000运算,接着将M2左移一位,再判断M1是否大于10进数4000(转算16进制数为0FA0),如大于,用M1 - FA0,将差-->M1M2 1 如小于,不作减运算,接着将M2 左移一位.....接着按同样判断处理过程,判断2000100080040020010080402010,判断完10后,将M2左移4位,再将M1或到M2中,此时的M2即为转换BCD码数。

下面使用S7-200编写的整数转换为BCD码的梯形图,供你参考。

   本程序是将16进制数270F 送入VW10进行BCD码转换,转换完毕,其结果放入VW30里,在运行处于监视状态下,看网络6,就可看到VW30=9999.

()BCD码转换为整数(16进制数)编程

转换构思:以4BCD码为例,它占一个字(16个位),千位上的4为分别代表十进制数的8000400020001000,而每位上的数字只能为01二种,百位、十位及个位都与之相似,我们就从千位数的最高位开始判断,如其值=1,说明此数含有8000,将800016进制数值(1F40)加在转换为16进制数的存储区里(运算前该区清0),如其值=0,说明此数不含有8000,就不进行加8000的运算,将BCD码存储器左移一位,此时再判断千位上的最高位,如=1,已不是8000而变为4000,即将400016进制数加在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进制的数(09)占用一个字节,其高4位用“3 表示,低4位用BCD码表示,如数字 5 ASCII码为:“35”即:0011_0101。因此,若将一个整数转换为ASCII码,必须先将该整数转换为BCD码,再由BCD码转换为ASCII码。前面关于整数转换为BCD码的编程已经讲完,这里不再重述,只讲如何将BCD码转换为ASCII码的思路及编程。

现举一例:一个4BCD码:1234,即:0001_0010_0011_0100,转换为ASCII码为:31 32 33 34,即:00110001_00110010_00110011_00110100

下面的梯形图就是用S7-300编写的将4BCD1234转换为ASCII码的程序。供大家参考,如有不清楚的地方可以提出,本人可以给与解答。

    (二)、ASCII码转换为BCD码的数学依据及编程

     由串口通讯传递来的数据是ASCII,需将ASCII码转换为BCD码,才可用以显示,转换为整数才能用于运算。下面的程序就是将ASCII码转换为BCD码,再由BCD码转换为整数的梯形图,供大家分析参考。

 

        三、二进制数与格雷码相互转换的数学依据及编程

(一)、格雷码转换为二进制码的逻辑运算关系

 根据格雷码转换为二进制码的逻辑关系,用S7-200编写的梯形图。见下图:

说明:梯形图中

       1MW0 为格雷码存数区,本图是置入格雷码值为“0001_1101”,转换后的格雷码为“0001_0110”。在实际应用时,可改为将你要转换的格雷码送入MW0就可以了。

      2MW2为二进制数存数区,即转换后的二进制数存入此区。

      3I1.0 为手控转换按钮,是为试验用的,T101断电延时定时器是为防按钮颤抖用的。实际应用时可不用,选用内部的一位信号来控制程序运行就可以了。

     4、试验此程序,你可先将要转换的格雷码写入MW0,存盘下载,运行时,监视程序最后一条,按下按钮(I1.0,按钮抬起时,MW2的数值就是转换后的二进制数值。

 

 (二)、用二进制码转换为格雷码的思路及编程

        前面用S7-200编写的格雷码转换为二进制码的梯形图,现在再用二进制码转换为格雷码的关系式,编写了S7-200编写的二进制码转换为格雷码的梯形图,供大家参考,此程序是经过上机验证的,好用。

        编程说明: 二进制数转换为格雷码的转换原则是:将二进制数的最高位数1”,直接送入格雷码数的最高位,将二进制数的次高位数与最高位数相异或,送入格雷码数的次高位,再将二进制数的次高位数与次次高位数相异或,送入格雷码数的次次高位。。。直到二进制数的次低位数与最低位数相异或,送入格雷码数的最低位为止。

 

      在梯形图中
     
1MW0 为二进制存数区,本图是置入二进制数值为“16#D3”,转换后的格雷码为“16#BA”。在实际应用时,此条可改为将你要转换的二进制数存数区(比如VW100)送入MW0就可以了。
   2
MW2为格雷码数存数区,即转换后的格雷码存入此区。
   3
I1.0 为手控转换按钮,是为试验用的,T101断电延时定时器是为防按钮颤抖用的。实际应用时可不用,选用内部的一位信号来控制程序运行就可以了。
   4
、试验此程序,你可先将要转换的二进制数写入MW0,存盘下载,运行时,监视程序最后一条,按下按钮(I1.0,按钮抬起时,MW2的数值就是转换后的格雷码数值。



楼主最近还看过



彩云之滇东北

  • 精华:37帖
  • 求助:5帖
  • 帖子:148帖 | 2725回
  • 年度积分:0
  • 历史总积分:21121
  • 注册:2005年6月14日
发表于:2012-01-21 08:30:10
1楼

收藏了                                

lixueliang

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 14回
  • 年度积分:0
  • 历史总积分:62
  • 注册:2006年7月20日
发表于:2014-06-28 23:21:30
2楼

学习了,谢谢。

收藏!


热门招聘
相关主题

官方公众号

智造工程师