做MODBUS RTU通讯时,如何读取设备寄存器40001中的浮点数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了做MODBUS RTU通讯时,如何读取设备寄存器40001中的浮点数相关的知识,希望对你有一定的参考价值。
首先澄清一点:做Modbus通讯时,Modbus传回的数据只有Byte数据,实数还是整数是由您的地址来决定的。如果您调用的是浮点数的地址,浮点数占用4个字节,即2个连续的整数地址。所以转换为实数时和您使用的地址有关。接阿鸣的描述,补充如下:西门子所有数据以字节为单位,顺序都是按照低字节、高字节的依次顺序排列的。而Modbus协议是按照字或位为单位(因此,字地址和位地址不会发生冲突,可以任意调用)。顺序(以浮点数的2个字举例)是按照低字的高字节、低字的低字节、高字的高字节、高字的高字节的顺序排列的,因此,所有顺序与西门子的顺序完全是反的。注意是字中的高低字节的位置发生变化,而非阿鸣说的高低字发生变化。如果需要转换,用移位等指令很容易可以实现。 参考技术A 可以转换为实数。在双字中(两个寄存器地址),转换时要注意高字和低字互换。。转帖:为何有些HMI软件使用ModbusRTU读取S7-200中的实数会出现错误?有些HMI软件使用ModbusRTU通信协议时,处理存储在数据保持寄存器中的实数(浮点数)的方式与西门子的实数保存格式不同。西门子的PLC遵循“高字节低地址、低字节高地址”的规律。ModbusRTU的保持寄存器总是以“字(双字节)”为单位,而一个实数需要4个字节(双字)表示。HMI软件在处理时可能会把保持寄存器的两个“字”互换位置,造成不能识别以西门子格式表示的实数。如果HMI软件一方无法处理这种实数,则可在S7-200CPU中编程将存入数据缓冲区(保持寄存器区)的实数的高字和低字互换。modbus rtu协议介绍及开发
0 背景
在《一文读懂串口及各种电平信号含义》中介绍过串口、UART、TTL、RS232/485等概念的基本含义,其中 modbus 是一种应用层的协议,本文对该协议的具体原理以及使用方法做一个介绍
1 modbus 协议简介
Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议。通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。Modbus 协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为 Modbus Master,从设备方使用的协议称为 Modbus Slave。典型的主设备包括工控机和工业控制器等;典型的从设备如PLC可编程控制器等。
Modbus通讯物理接口可以选用串口(包括RS232、RS485和RS422),也可以选择以太网口。其通信遵循以下的过程:
- 主设备向从设备发送请求
- 从设备分析并处理主设备的请求,然后向主设备发送结果
- 如果出现任何差错,从设备将返回一个异常功能码
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。
当在Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来
创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖以上是关于做MODBUS RTU通讯时,如何读取设备寄存器40001中的浮点数的主要内容,如果未能解决你的问题,请参考以下文章
「 Modbus-RTU报文解析」解析030610功能码报文示例
Java实现使用Modbus4j+seroUtils读取Mudbus RTU/ASCII Over TCP/IP连接设备数据