Modbus 通讯在工业现场应用非常广泛,当然也会有多技术难点,本文主要讲解基于通讯的数据处理,不讲通讯的基础知识,你过你连Modbus通讯的报文都不知道是什么,那可以不用往下看了。
通讯读取普通的数据可能大家都会处理,如果遇到浮点数的数据类型,那就需要一定的处理才能使用。
一、Modbus RTU中的浮点数处理
这位同学在通讯中遇到一个浮点数的问题,搞了好久没有处理好。
在我的追问下,得知是和一个温度仪表通讯,采集仪表的02和03地址数据,这个数据是一个32位的数据,从表格里面我获取到一个重要详细,这个数据是以大端模式进行排布的。
浮点数的大端模式存储遵循IEEE标准格式,高位字节存储在内存低地址,低位字节存储在内存高地址。而三菱PLC中浮点数是以端的类型排布的,因此,需要把数据的高16位和低16位交换处理。
如下图,浮点数数据保存在D0~D3这4个寄存器,我们要先把D0和D1通过SWAP和ADD指令进行合并,然后保存到D100这个32位浮点数数据的高位寄存器(D101);然后把D2和D3通用的方法合并到D100(地位寄存器)。最后通过一条浮点数传送指令传送到D102,就能得到最终的数据。
二、Modbus ASCII中的浮点数处理
Modbus有2种类型的报文,RTU比较简单处理,如果得到的数据是字符类型的浮点数,比如和智能相机通讯,对方测量到某物体长度位5.2534mm,把这个数据通过ASCII码发送过来时,需要对照ASCII表(下图只是ASCII表中一部分),5对应 H35,小数点.对应H2E,2对应H32,3对应H33,4对应H34,也就是这个浮点数转换成字符应该是 35 2E 32 35 33 34。
假如这个字符串给到了PLC的D0~D5这6个寄存器,下面用PLC用MOV指令模拟数据给如
数据的排布由于是8位的数据类型,需要两两合并成一个16位的寄存器,使用SWAP指令把第2、第4、第6个寄存器转移到高位,再加上上一个寄存器,就能合并成16位数据,结果保存到D10、D11、D12,最后通过一条字符串转浮点数的指令DEVAL,把数据转换成浮点数保存到D20(由于三菱软件浮点数只显示3位,所以最后一位看不到,但是真实数据是有的,你用于其他计算或者显示到触摸屏,都会运算最后一位小数的)
相信通过以上内容,大家以后都能应对浮点数转换的问题了。
-
MODBUS
+关注
关注
28文章
2194浏览量
80153 -
通讯
+关注
关注
9文章
929浏览量
35807 -
浮点数
+关注
关注
0文章
62浏览量
16170 -
RTU
+关注
关注
0文章
442浏览量
29716
原文标题:通讯中浮点数数据的处理
文章出处:【微信号:gkongbbs,微信公众号:工控论坛】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
labview数据类型与PLC 数据类型之间的转换(来自于写入浮点数到汇川 PLC中的数据转换关键的修改)
labview和单片机通讯浮点数如何处理?
浮点数在内存中的存储

评论