曾姚王
纸上得来终觉浅,绝知此事要躬行!
级别: 略有小成
精华主题: 0
发帖数量: 270 个
工控威望: 348 点
下载积分: 15736 分
在线时间: 146(小时)
注册时间: 2021-07-24
最后登录: 2024-11-21
查看曾姚王的 主题 / 回贴
楼主  发表于: 37天前
今天用台达的一个DVP-08SN 485RTU读一个仪表的数据,始终是1,后来用串口读出,发现数据类型只有选择FLOAT INVERSE才正确,请问,浮点反转这个数据是怎么回事。读出42F6CCCDH怎么浮点数是123.4
[ 此帖被曾姚王在2024-10-17 17:03重新编辑 ]
暴躁小白兔
级别: 探索解密
精华主题: 0
发帖数量: 147 个
工控威望: 195 点
下载积分: 3839 分
在线时间: 91(小时)
注册时间: 2021-05-11
最后登录: 2024-11-21
查看暴躁小白兔的 主题 / 回贴
1楼  发表于: 37天前
图片:
什么仪表,秀出来长长见识
------------------------------------
在工业通信和数据采集领域,"Float Inverse"(浮点反转)这个术语通常用于描述一种特定的数据格式,特别是在Modbus协议中。在这种格式下,浮点数的字节序(byte order)是相反的,也就是说,浮点数的高位字节(most significant byte, MSB)存储在较低的地址,而低位字节(least significant byte, LSB)存储在较高的地址。这种存储方式与标准的大端(big-endian)或小端(little-endian)字节序相反。

在某些情况下,仪表或设备可能使用浮点反转格式来存储或传输浮点数。例如,根据西门子官方支持论坛的讨论
,当从Modbus仪表读取浮点数时,如果发现读取的值与预期不符,可能需要考虑字节序的问题。在这种情况下,可能需要在读取数据后对字节序进行调整,以获得正确的浮点数值。

处理浮点反转数据的一般步骤可能包括:

读取包含浮点数的两个连续的Modbus寄存器(通常为16位,或2个字节)。
交换这两个寄存器的字节序,使得原本的高位字节变为低位字节,反之亦然。
将调整后的字节重新组合成一个浮点数,以获得正确的数值。
需要注意的是,处理浮点反转数据时,应确保了解设备的文档和规范,以正确理解数据格式和所需的字节序调整。在某些情况下,可能需要使用特定的软件工具或编程技巧来实现这一过程。
楼主留言:
谢谢,我再看看怎么转,台达都十几年没用了。
[ 此帖被暴躁小白兔在2024-10-18 14:13重新编辑 ]
hgz284631157
工控小君
级别: 略有小成
精华主题: 0
发帖数量: 313 个
工控威望: 421 点
下载积分: 1299 分
在线时间: 186(小时)
注册时间: 2009-04-07
最后登录: 2024-11-21
查看hgz284631157的 主题 / 回贴
2楼  发表于: 37天前
123.4 是42F6CCCD H  (H表示16进制)   对应的十进制是 1123470541
高迈德io模块
佛山高迈德科技专业研发生产Profinet转modbus模块
级别: 探索解密
精华主题: 0
发帖数量: 146 个
工控威望: 175 点
下载积分: 464 分
在线时间: 15(小时)
注册时间: 2024-09-21
最后登录: 2024-10-29
查看高迈德io模块的 主题 / 回贴
3楼  发表于: 35天前
浮点数?16进制的?
佛山高迈德科技专业研发生产Profinet转modbus模块,Profinet/EIP远程IO,can转Profinet模块,PLC转网段NAT模块,PLC串口转网口模块。
sjm213
有小知识,无大学问。
级别: 论坛版主

精华主题: 7 篇
发帖数量: 5200 个
工控威望: 7423 点
下载积分: 158799 分
在线时间: 3161(小时)
注册时间: 2007-11-21
最后登录: 2024-11-22
查看sjm213的 主题 / 回贴
4楼  发表于: 35天前
42F6CCCD对应的浮点数为什么是123.4,这是二进制浮点数的结构决定的;


至于为何要反转,你可以监控一下台达存储数据的两个寄存器,比如说是D10/D11,那么现在D10里数值的16进制是42F6,D11里面数值的16进制是CCCD。
而台达的32位数据结构是[D11,D10],所以这个数值就变成了CCCD42F6,显然是不对的。