故事作者:万泉河

最近创作

看看TA的故事

【万泉河】MODBUS通讯浮点数格式错乱

已锁定

万泉河

  • 帖子

    10817
  • 精华

    132
  • 被关注

    901

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

【万泉河】MODBUS通讯浮点数格式错乱

2982

8

2020-11-26 11:54:52


前段时间, 一个项目上用到MODBUS与仪表的通讯, 通讯数据中有浮点数格式的数据。

 

现在直接使用浮点数的仪表多了,所以这很正常。而在以前,则基本不会有。大部分都还是约定一个小数点的位置,用整数来传递。

 

然后就不可避免的遇到了数值转换的问题。

 

问题的根源是所谓的通讯过程中大头还是小头在先的问题。这个世界上的设备厂家分成了两个阵营,而且都还挺有道理。所以一直谁也说服不了对方,让对方放弃。

 

所以最终是两套标准同时运行。这同时也向我们展示了所谓的标准化,并不是统一标准。虽然大家都知道统一标准对大家都好,但没办法。这个文明世界不是一夜之间建成的,然后在建设过程中就必然出来各种不协调。后续的发展智能在这种不协调基础上将错就错。而不可能希冀于全盘掀翻再造。

 

这个问题我是在调试的时候才发现的。之前所有精力都用在做标准化的MODBUS块了,所以细节没有考虑充分。

 

遇到的时候就有点心慌。虽然之前在S7-300以及S7-200系统中也有多次处理浮点数格式转换的问题,但那个时候是绝对地址编程,要颠倒次序很简单。

 

而在PORTAL系统中,符号寻址是主流,过去的经验用不上了。因而临时抱佛脚,把所有功底都用上了。简单试了下已有函数没有思路, 就简单用AT来实现了。

 

AT的本质其实还是旧的STEP7的思维。证据是要想使用AT语法, FB块必须切换为非优化模式。

所以,我断定在优化模式下一定有解决方法。所以尽管项目已经完工,但仍然留了个心病。

而一旦闲下来有空了,我就会找机会研究把这个问题解决,以作为未来的技术储备。

 

提前有准备,将来有需要的时候,可以直接使用。即所谓不打没准备的仗。

这就是标准化设计的精髓所在。

而且因为所积累的技术细节都是模块化的,可随时升级替换的,所以只要积累足够多,未来的设计工作就会越来越轻松。

 

大家也注意到了, 我不愿意去精确枚举哪家哪家产品使用的什么CPU, 使用的大头或者小头。因为这相当枯燥。因为大头和小头并没有明显的优劣区分,至于谁家产品用了大头用了小头, 很多时候也不会直接写在颜面上。需要另外渠道去获得。

 

而对一些简单的智能仪表,你还没那么容易获得。

 

所以,其实,我们只需要知道其结果区别即可。

 

如某位网友总结的:

要么高低字交换、要么高低字交换后,高低字各自的高低字节再交换、要么就是高低字各自的高低字节交换、要么就是保持不变!


所以总结下来, 交换顺序无非是:

ABCD

BADC

CDAB

DCBA

 

所以, 我打算是, 管他现场设备是什么CPU,什么协议的, 直接做个通用的浮点数拼接和劈开的函数,模式分成1,2,3,4,对应上面的几种交换顺序。现场调试的时候,4个值分别试一下, 哪个值能得到正确的数值,就自然采用哪个模式,就够了!

 

其实真要静下心来研究, 也很简单。核心在于,PORTAL的DWORD_TO_REAL函数, 是32位逐位复制的,而不是像DINT一样,在整数值后面加了个小数点就算转成浮点了。

 

由此,双向做了2个函数FC_2WORD_TO_REAL和FC_REAL_TO_2WORD,前者,把两个WORD拼成浮点数,函数的返回值就是浮点数的结果。




而后者把浮点数劈开,分成2个WORD,但每次根据需求,只送出W1或者W2之中的一个。这样便于程序中的调用。在给通讯缓冲区准备数据的时候, 只需要逐条调用即可。



 

由于实际上我们并没有机会各种仪表都遇到,所以也并没有足够的机会把所有模式都测试到,但原理搞通了,即便有些小的错误,将来调试中简单处理即可。

 

这里把例子程序分享给需要者。

例子包含2个函数以及分别的调用演示。



 

获取方法:关注公众号《PLC标准化编程》,后台回复MODBUS 或者REAL 或者FLOAT的任何一个,都可以得到链接。


如果觉得有用,欢迎对本文进行打赏。

 

后来的读者,如果链接已损坏,请加微信ZHO6371995咨询获取。



【万泉河】MODBUS通讯浮点数格式错乱 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3233条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。