JZGKCHINA
工控技术分享平台
尊重原创 勿抄袭
勿私放其他平台
01
应用背景
昨天,咱一优质资深老客户突然找到我,很严肃地跟我说有个非常严重并且非常着急的问题,能让咱多年资深工程师都无法解决的,那肯定的确是大问题,对话如下:
仔细一看,还真是64位双精度浮点数,但是咱触摸屏的mcgsPRO软件已经支持64位浮点数了啊,所有浮点型变量,都是按照双精度浮点来处理的:
但在modbusRTU驱动内,的确如客户所说,没有64位双精度浮点数的选项,是个大问题。
仔细想想,肯定又是开发部那群xx(文明用语,此处缺省为小伙伴)在偷懒,64位双精度浮点数目前应用不广,用得人少,所以就偷懒没做,但现在不是内部批斗的时候,得先找办法解决客户现场问题。
02
问题处理
聪明的小脑袋瓜子极速运转,一下子就出来了解决方案:
① 首先分开读64个位回来?然后自己按照IEEE-754标准来计算?
等等,但是mcgsPro没有64位浮点的IEEE-754标准计算指令啊,只有32位?
自己写脚本计算IEEE-754???
② 好像没有第二了,没啥办法了
03
结束语
既然没啥其他办法了,那咱就这样结束吧,等开发部那群小伙伴帮我支持64位双精度浮点再说吧,谢谢大家支持,谢谢大家白跑一趟。
开玩笑呢,怎么能让大家白跑一趟呢。
等开发部处理,重新修改驱动,那肯定一时半会搞不完,走流程都要那么久,客户工程师朋友还在现场等下班呢。
04
重新开始问题处理
聪明的小脑袋瓜子再次运转起来,雍正八阿哥(BUG)保佑,我想起来mcgsPro版内的modbusTCP驱动有支持64位浮点数,开发部的小伙伴偷懒没偷全,有漏网之鱼:
客官们可能就会说,你这是modbusTCP啊,流量计是modbusRTU的,难不成你还现在去买个RTU转TCP网关啊,蚊都训喇!
遇事不要慌,我来看看。
说起网关,剑指工控某位身家超2.7亿元的著名网友曾如此评价昆仑通态MCGS触摸屏:这网关啥都好,就是多了个屏幕。
广告时间:
昆仑通态HMI配套的mcgsPro拥有丰富的通讯协议,串口、网口、物联网等,均有支持,配合软件内实时数据库变量系统,软件内可实现灵活的数据协议转换,例如modbusRTU转modbusTCP、各类PLC协议转modbus、各类modbus转MQTT、PLC协议转HTTP、modbus转数据库接口等等等等等等
软件是死的,人是活动,脑袋要懂得转弯。
新的方案破壳而出:
① 使用modbusRTU串口驱动,按照2个32位整型把数据读回来
② 建立modbusTCP网口转发设备,按照2个32位整型转发处理,建立modbusTCP协议接口
③ 使用modbusTCP协议驱动读本机IP,直接读64位浮点数
简单来说,就是将modbusRTU读回来的数据原封不动的转给modbusTCP服务器端口,通过modbusTCP客户端来按照64位浮点数读取出来
05
实施步骤
① 使用modbusRTU串口驱动,按照2个32位无符号整型把数据读回来
② 建立modbusTCP网口转发设备,按照2个32位无符号整型转发处理,建立modbusTCP协议服务器接口
③ 使用modbusTCP客户端协议驱动读本机IP,直接读64位浮点数
④ 对应进行窗口组态,安排测试
按照想法设置好程序了,咱现在开始测试,测试前呢,先找来一段实际通讯的数据,按照数据帧数值来测试,因为我也不会算IEEE-754对吧,随便输几个数据出来结果也不知道对不对,所以我们参考下面这个modbuspoll通讯的数据:
对modbus比较熟的朋友应该就能看出来,0x 00 00 00 00 D0 00 40 74,转换成64位浮点数,就是333.0了,不熟的朋友请重看几遍曹总的剑指工控modbus详解公开课(请插入链接)。
然后我们开始我们的实际测试,为了测试方便,我把两个32位整型地址的输入框,修改成16进制了:
实测满分!
06
结束语2
到最后有朋友可能会问了,我的屏没有网口怎么办?那我只能说一句:
作 者 简 介
阮旭芬
广州番禺 昆仑通态
莞福大区客户经理