三菱PLCFX2N 十六进制转十进制 点击:7661 | 回复:4



liucheng159

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 3回
  • 年度积分:0
  • 历史总积分:195
  • 注册:2011年4月22日
发表于:2012-09-28 12:52:17
楼主
求助帖10分-已结帖
485通讯接收到     高位D200 十六进制是9  低位 D201 十六进制是DE  都是十六进制数。  我想转换成十进制 存放在D300中    应该是2526     

  具体用什么指令去转换




笑孔丘

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 95回
  • 年度积分:0
  • 历史总积分:103
  • 注册:2011年9月22日
发表于:2012-09-28 16:16:05
1楼

貌似没有那个指令,你可以计算一下,而且貌似通讯传输过来的会默认转换成10进制,如果那样能的话,D=L+H*256

 

广州@阿君——王者之师

  • [版主]
  • 精华:25帖
  • 求助:18帖
  • 帖子:503帖 | 6997回
  • 年度积分:0
  • 历史总积分:66772
  • 注册:2010年6月26日
发表于:2012-09-28 16:52:10
2楼

楼主你好!

你没有说清楚你读过来的D200 D201是不是可变的;还是就D200=16#9  D201=16#DE~~~

如果不是可变的话下图仅供你参考:

 

wyb2866255---王者之师

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

     可以这样编程:

   1、设D250、D251为十进制数存数区,转换前将其清0。

   2、用D200、D201的数(此时为16#9DE)与16#3E8(十进制数1000)比较,如大于0,则用D200、D201的数减去16#3E8,其差送回D200、D201,同时使D250、D251字存储器加1,再用D200、D201的数与16#3E8比较,如大于0,则用D200、D201的数减去16#3E8,其差送回D200、D201,同时使D250、D251字存储器加1。。。直到D200、D201的数与16#3E8(十进制数1000)比较小于0为止。将D250、D251字存储器左移4位。

   3、再用D200、D201的数(即余数)与16#64(十进制数100)比较,如大于0,则用D200、D201的数减去16#64,其差送回D200、D201,同时使D250、D251字存储器加1,再用D200、D201的数与16#64比较,如大于0,则用D200、D201的数减去16#64,其差送回D200、D201,同时使D250、D251字存储器加1,直到D200、D201的数与16#64(十进制数100)比较小于0为止,将D250、D251字存储器左移4位。

   4、再用D200、D201的数(即余数)与16#A(十进制数10)比较,如大于0,则用D200、D201的数减去16#A,其差送回D200、D201,同时使D250、D251字存储器加1,再用D200、D201的数与16#A比较,如大于0,则用D200、D201的数减去16#A,其差送回D200、D201,同时使D250、D251字存储器加1。。。直到D200、D201的数与16#A(十进制数10)比较小于0为止。将D250、D251字存储器左移4位。

   5、将D250、D251字存储器与D200、D201的数(即余数)相或运算,或的结果送入D250、D251字存储器,此时的D250、D251字存储器的数即为原D200、D201的数(16进制数9DE)转换为十进制的数。

     这是4位BCD码转换程序,最大可转换的数为9999,折合16进制数为:16#270F.

芳季

  • [版主]
  • 精华:5帖
  • 求助:5帖
  • 帖子:86帖 | 5336回
  • 年度积分:0
  • 历史总积分:20165
  • 注册:2003年1月31日
发表于:2012-09-28 21:15:18
4楼

怎么不可以用BCD指令吗?十六进制直接转成BCD码啦。


热门招聘
相关主题

官方公众号

智造工程师