Modbus通讯-数据转换问题

参考

lab_3D

Profibus-DP通讯中数据类型实数(REAL)和字(WORD)的转换_real转换成word-CSDN博客

目录

一,浮点数Real与word转换

二,字符串String与word转换

三,byte、word、dword三者之间的关系及转换

四,结语


在PLC与屏或第三方控制器通讯过程中,我们常常会用到Modbus通讯协议。用过Modbus的朋友应该都比较了解Modbus,Modbus交换的数据有四种,0x线圈-类型Byte、1x离散量-类型Byte、3x输入寄存器、4x保持寄存器。而我们需要交换的数据类型可能不止这些,比如浮点数Real、字符串String、整数int、dint 等。而常常PLC软件里没有直接转换的函数或转换后的数值不是我们所需要的,这时就需要我们自己来考虑数据的转换了。下面我来写几个我常用的一些数据类型转换,如有比较方便的方法可以多多交流沟通。

(*注:本人用的PLC基本是基于Codesys系统平台的,其他系统的不知道能不能通用。如有需要,请自行测试*)

一,浮点数Real与word转换

浮点数的处理和word位的处理是有很大区别的。(可自行百度查看)

word算是位处理,(16bit)

浮点数是通过指数尾数的处理方式,如下图

浮点数Real占32位,word占16位,所以Real占位是2个word。

1,通过codesys自带的WORD_TO_REAL与REAL_TO_WORD来转。

如上图所示,如果用自带的Word转Real,精度范围就比较小,而且Word的最大值为65535、dword最大值为4294967295对数据大小很有限制。

2,通过指针的方式转换

指针也就是存取变量的内存地址,REAL占32位,Dword也是占32位。Real转Dword也就是把Real的内存地址里的数据赋值给dword。同理Dword转Real也一样。

3,通过联合体的方式转换

如下图,rtest01转成2个word,程序段7-9,把2个word再转回rtest02。

二,字符串String与word转换

        字符串也就是一个字符数组,一个字符占一个byte(可以对照ASCII表查看字符对应的数值)。如果字符串里包含有中文的话在codesys里是有另一个字符串Wstring变量类型,此变量一个字符占一个Word位。用时需要看自己的需求。

1,既然是数组那么我们就可以用For循环来循环赋值

2,通过指针的方式来转String、Byte

3,通过联合体来转换

        用联合体时需要注意,对应的字符串占多少个byte。

三,byte、word、dword三者之间的关系及转换

        byte、word、dword在程序中占内存的大小如下表所示

        在程序中很多时候,也需要对dword、word、byte数据做处理,如上两个部分对Real和String的转换有时转byte比较方便有时转dword比较方便。而有时处理word的数据时还要考虑高低位是否相反的情况,也就是常说的大小端问题。

        这时我们就需要转换word、dword的高低位,dword拆分word,word拆分byte,byte组合成word,word组合成dword。

        在处理byte、word、dword时有一个很方便的工具:移位操作SHL(逻辑左移)、SHR(逻辑右移)。对于SHL、SHR不是特别了解的可以自行搜索、测试下。对于这三个数据的转换也是可以使用指针、联合体的方式来转换的,在此就不多做说明。本部分主要用SHL、SHR来处理。

        1,Byte合并word、dword

        2,Word拆分成Byte

        3,word组合成Dword

        4,dword拆分成word、byte

四,结语

        当然,数据处理的方式也不止这些。以上仅仅是个人在编程中使用到的,如果感觉麻烦也可以做成功能块或函数来直接使用。

        如有比较方便的方法也希望可以多多交流沟通。

  • 32
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值