台达十进制转换成ASCII码 点击:5951 | 回复:7



hyf0517

    
  • 精华:0帖
  • 求助:8帖
  • 帖子:9帖 | 16回
  • 年度积分:0
  • 历史总积分:58
  • 注册:2012年2月24日
发表于:2012-11-05 19:39:39
楼主
求助帖10分-已结帖
我想把主站采集进来的10进制模拟量,转换成ASCII码。用RS指令发到从站去。因为我用的RS指令中的ASCII。只有转换成ASCII才能发送到从站中去。那个有办法呢?我在台达指令表里倒是看到16进制转换成ASCII码的指令,就是没看到十进制转换ASCII的。十进制转换成十六进制也没有。



wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-11-05 23:27:10
1楼

     台达PLC没搞过,但编程思路是一样的,我可以告诉你编程思路:1、将16进制数先转换为BCD码数,如有现成指令可直接使用,如没有可以编程:如被转换的数≤9999,可用一字存储器作BCD码存数区,设它为MW10,先将它清0,再将待转换的16进制数与1000(即16#03E8)比较,如>1000,将待转换的16进制数减去03E8,再将MW10加1,将余数与1000比较,如仍如>1000,再将余数减去03E8,再将MW10加1。。。直到余数<1000为止,将MW10左移4位后,再用余数与100(即16#64)比较,如余数>100,将余数减去16#64,再将MW10加1,再比较。。。直到余数<100,将MW10左移4位,再用同样的方法将余数与10(即16#A)比较,直到余数<10,将MW10再左移4位后,将余数或到MW10中,此时的MW10内容即为转换后的BCD码值。

     转换为BCD码后,就可用16进制转换成ASCII码的指令将转换为BCD码数转换为ASCII。

莫其麟

  • 精华:14帖
  • 求助:0帖
  • 帖子:120帖 | 5688回
  • 年度积分:0
  • 历史总积分:29157
  • 注册:2004年2月27日
发表于:2012-11-06 19:16:01
2楼
我未实际用过RS指令,但按通常的理解,台达PLC中十进制与十六进制是一致的;
可能我的理解有误。

wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-11-06 21:43:38
3楼
PLC的十进制与十六进制是一致的,但转换为ASCII的16进制数,不是通常的16进制数,而是转换为BCD码再用16进制的符号形式来表示的。如:10进制数 1234=16#04D2,即在存储器的内容为:0000_0100_1101_0010,必须先将它转换为BCD码 :0001_0010_0011_0100,用16进制数表示为:16#1234。用16#1234转换为ASCII码为:31_32_33_34.

ljbcompany

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 1289回
  • 年度积分:0
  • 历史总积分:5847
  • 注册:2011年4月24日
发表于:2012-11-07 11:13:34
4楼

发送数据有8位和16位两种,模式就用ASCII!只须把命令中的数值直接转换成"HXX"的形式。比如:8位模式发送"05",只要将"0"和"5"写成H30、H35;16位模式发送"05",则要写成H3530(具体可以查一下表)。

hyf0517

  • 精华:0帖
  • 求助:8帖
  • 帖子:9帖 | 16回
  • 年度积分:0
  • 历史总积分:58
  • 注册:2012年2月24日
发表于:2012-11-09 21:57:09
5楼
回复内容:
对:wyb2866255---王者之师关于PLC的十进制与十六进制是一致的,但转换为ASCII的16进制数,不是通常的16进制数,而是转换为BCD码再用16进制的符号形式来表示的。如:10进制数 1234=16#04D2,即在存储器的内容为:0000_0100_1101_0010,必须先将它转换为BCD码 :0001_0010_0011_0100,用16进制数表示为:16#1234。用16#1234转换为ASCII码为:31_32_33_34. 内容的回复:


那到底台达的十进制转换成ASCII码需要什么指令,举个例子可以吗?例如我从模拟量模块读出的数据放到D100里面。然后我到底要怎么转换用些什么指令才能把D100里面的数据转换成ASCII码。

wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-11-09 23:31:08
6楼

关于“例如我从模拟量模块读出的数据放到D100里面。然后我到底要怎么转换用些什么指令才能把D100里面的数据转换成ASCII码。 ”的回答:

    1、先将D100用 I-BCD(即整数转换为BCD码)指令转换为BCD码放到存储器D110里,

    2、再用HTA(即16进制转换ASCII)指令将D120转换为ASCII码放到存储器D120里,。

    我在S7-200编程时就是这样处理的,好用。

wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-11-10 09:41:17
7楼

下面是用s7-200编写的转换ASCII码的程序,从中可以看出:对整数有现成指令ITA,可直接将整数转换为ASCII码。当用16进制数转换为ASCII码,必须先将16进制数转换为BCD码,再将BCD码转换为ASCII,其转换结果才是正确的。

   监视结果为:

     从表中显示结果可以看出:1、VB104~VB107 是直接将整数1234 用整数转换ASCII码指令ITA转换为ASCII码。从网络2可知:16#4D2,其10进制数为1234。如直接用16进制数转换ASCII码指令HTA 将16进制数转换为ASCII码,其结果是错误的(见VB120~VB123),必须先用I-BCD指令将其转换为BCD码再通过16进制转换ASCII指令HTA进行转换,其结果才是正确的(见VB124~VB127)。


热门招聘
相关主题

官方公众号

智造工程师