咱拐个弯?昆仑通态HMI modbusRTU 的双精度浮点读取_浮点数

JZGKCHINA

工控技术分享平台


尊重原创 勿抄袭

勿私放其他平台


01

应用背景

昨天,咱一优质资深老客户突然找到我,很严肃地跟我说有个非常严重并且非常着急的问题,能让咱多年资深工程师都无法解决的,那肯定的确是大问题,对话如下: 

咱拐个弯?昆仑通态HMI modbusRTU 的双精度浮点读取_双精度_02

 仔细一看,还真是64位双精度浮点数,但是咱触摸屏的mcgsPRO软件已经支持64位浮点数了啊,所有浮点型变量,都是按照双精度浮点来处理的: 

咱拐个弯?昆仑通态HMI modbusRTU 的双精度浮点读取_双精度_03

但在modbusRTU驱动内,的确如客户所说,没有64位双精度浮点数的选项,是个大问题。 

咱拐个弯?昆仑通态HMI modbusRTU 的双精度浮点读取_双精度_04

仔细想想,肯定又是开发部那群xx(文明用语,此处缺省为小伙伴)在偷懒,64位双精度浮点数目前应用不广,用得人少,所以就偷懒没做,但现在不是内部批斗的时候,得先找办法解决客户现场问题。

 

02

问题处理

聪明的小脑袋瓜子极速运转,一下子就出来了解决方案:

① 首先分开读64个位回来?然后自己按照IEEE-754标准来计算?



等等,但是mcgsPro没有64位浮点的IEEE-754标准计算指令啊,只有32位?

自己写脚本计算IEEE-754???

咱拐个弯?昆仑通态HMI modbusRTU 的双精度浮点读取_双精度_05


② 好像没有第二了,没啥办法了


03

结束语

既然没啥其他办法了,那咱就这样结束吧,等开发部那群小伙伴帮我支持64位双精度浮点再说吧,谢谢大家支持,谢谢大家白跑一趟。 

咱拐个弯?昆仑通态HMI modbusRTU 的双精度浮点读取_双精度_06


开玩笑呢,怎么能让大家白跑一趟呢。

等开发部处理,重新修改驱动,那肯定一时半会搞不完,走流程都要那么久,客户工程师朋友还在现场等下班呢。


04

重新开始问题处理

聪明的小脑袋瓜子再次运转起来,雍正八阿哥(BUG)保佑,我想起来mcgsPro版内的modbusTCP驱动有支持64位浮点数,开发部的小伙伴偷懒没偷全,有漏网之鱼:

咱拐个弯?昆仑通态HMI modbusRTU 的双精度浮点读取_数据_07

 客官们可能就会说,你这是modbusTCP啊,流量计是modbusRTU的,难不成你还现在去买个RTU转TCP网关啊,蚊都训喇!

遇事不要慌,我来看看。

说起网关,剑指工控某位身家超2.7亿元的著名网友曾如此评价昆仑通态MCGS触摸屏:这网关啥都好,就是多了个屏幕。


广告时间:


昆仑通态HMI配套的mcgsPro拥有丰富的通讯协议,串口、网口、物联网等,均有支持,配合软件内实时数据库变量系统,软件内可实现灵活的数据协议转换,例如modbusRTU转modbusTCP、各类PLC协议转modbus、各类modbus转MQTT、PLC协议转HTTP、modbus转数据库接口等等等等等等


软件是死的,人是活动,脑袋要懂得转弯。

咱拐个弯?昆仑通态HMI modbusRTU 的双精度浮点读取_数据_08


新的方案破壳而出:

① 使用modbusRTU串口驱动,按照2个32位整型把数据读回来

② 建立modbusTCP网口转发设备,按照2个32位整型转发处理,建立modbusTCP协议接口

③ 使用modbusTCP协议驱动读本机IP,直接读64位浮点数

 简单来说,就是将modbusRTU读回来的数据原封不动的转给modbusTCP服务器端口,通过modbusTCP客户端来按照64位浮点数读取出来

 

05

实施步骤

① 使用modbusRTU串口驱动,按照2个32位无符号整型把数据读回来

咱拐个弯?昆仑通态HMI modbusRTU 的双精度浮点读取_数据_09


② 建立modbusTCP网口转发设备,按照2个32位无符号整型转发处理,建立modbusTCP协议服务器接口


咱拐个弯?昆仑通态HMI modbusRTU 的双精度浮点读取_浮点数_10

③ 使用modbusTCP客户端协议驱动读本机IP,直接读64位浮点数

咱拐个弯?昆仑通态HMI modbusRTU 的双精度浮点读取_数据_11

咱拐个弯?昆仑通态HMI modbusRTU 的双精度浮点读取_浮点数_12

④ 对应进行窗口组态,安排测试

咱拐个弯?昆仑通态HMI modbusRTU 的双精度浮点读取_数据_13

 按照想法设置好程序了,咱现在开始测试,测试前呢,先找来一段实际通讯的数据,按照数据帧数值来测试,因为我也不会算IEEE-754对吧,随便输几个数据出来结果也不知道对不对,所以我们参考下面这个modbuspoll通讯的数据: 

咱拐个弯?昆仑通态HMI modbusRTU 的双精度浮点读取_数据_14

 对modbus比较熟的朋友应该就能看出来,0x 00 00 00 00 D0 00 40 74,转换成64位浮点数,就是333.0了,不熟的朋友请重看几遍曹总的剑指工控modbus详解公开课(请插入链接)。

然后我们开始我们的实际测试,为了测试方便,我把两个32位整型地址的输入框,修改成16进制了: 

咱拐个弯?昆仑通态HMI modbusRTU 的双精度浮点读取_双精度_15

实测满分!

 

06

结束语2

到最后有朋友可能会问了,我的屏没有网口怎么办?那我只能说一句:

咱拐个弯?昆仑通态HMI modbusRTU 的双精度浮点读取_浮点数_16


作 者 简 介

阮旭芬

 广州番禺 昆仑通态  

莞福大区客户经理