Modbus 使用常见问题 (modbus_comm_load)

简介

Modbus 协议是由 Modicon 公司开发的,是一种基于串行总线的主从模式的应用层总线设备协议,最初针对 PLC 设备设计。Modbus TCP 是封装在 TCP 包内的 Modbus 协议,虽然有一些变化,但本质上仍然是主从模式。

寄存器格式

Modbus 协议的保持寄存器和输入寄存器是以 word(16bit/2byte)为单位的。例如: 4(保持寄存器/输出寄存器)和 3(输入寄存器)是以字为单位的。因此,如果读取从 40001 寄存器开始的一个 16 位数字,则会返回 2 个字节,并且可以从 40002 开始读取下一个 16 位数字。 但是,如果读取从 40001 寄存器开始的一个 32 位浮点数,则会返回 4 个字节,并且下一个 32 位浮点数必须从 40003 开始。

常见问题

将 40001 定义为一个字节的数据。 将 40001 定义为 32 位浮点数,而 40002 为下一个 32 位浮点数。

寄存器寻址

寄存器最小地址为 1,而报文起始地址为 0。在数据报文中,所有 Modbus 地址都从 0 开始。这意味着报文中首次出现的寄存器在报文中的地址为 0。 例如: 在控制器中,线圈 1 在 Modbus 报文地址域中的地址为 0000。 线圈 127 的十六进制报文地址为 007Ehex(十进制的 126)。 保持寄存器 40001 的报文地址为0000。由于报文功能码明确指定要操作保持寄存器,因此协议将这个寄存器表示为 4XXXX。 保持寄存器 40108 的报文地址为 006Bhex(十进制的 107)。 Modbus 地址通常指 4(保持寄存器/输出寄存器)和 3(输入寄存器)。例如: 设备说明书可能说明设备支持 Modbus RTU 标准协议,并详细描述其地址对应关系:40001--模拟量采集通道 1,16 位有符号数,.....。 组态软件的地址设置通常为输出寄存器,从地址 1 开始,连续多少个。或者指定 400001:16 位有符号数。 在数据报文层面,寄存器起始地址从 0 开始。数据报文包括:设备地址 + 功能码 + 起始地址 + 寄存器个数 + 校验位。其中,起始地址从 0 开始。

举例说明

从设备 17 读取从 40001 开始的 2 个寄存器数据的报文: | 设备地址 | 功能码 | 起始地址 | 寄存器个数 | 校验位 | |---|---|---|---|---| | 11 | 03 | 0000 | 0002 | -- |

常见问题

使用和定义 40000 地址。 分析报文时,直接将报文起始地址当作应用层寄存器地址。

Modbus 写寄存器命令

Modbus 协议常用的寄存器有:线圈(Coil)、输入(Input)、保持寄存器(Holding Registers)和输入寄存器(Input Registers)。从 Modbus 设备角度来看,输入是上位机采集 Modbus 设备的信息,即这些寄存器是只读的。因此,Modbus 协议没有写入输入(Input)和输入寄存器(Input Registers)的命令。 线圈(Coil)是状态量,对应 Modbus 设备的开关量输出(DO),而保持寄存器(Holding Registers)是模拟量,对应 Modbus 设备的模拟量输出(AO)。上位机需要设置这些寄存器,即它们是可写入的寄存器。 在 Modicon Modbus 协议中,写入线圈(Coil)和保持寄存器(Holding Registers)有两种写命令: 写入单个寄存器: 置单线圈(Force Single Coil)功能码 05(0x05) 写入单个寄存器(Preset Single Holding Register)功能码 06(0x06) 写入多个寄存器: 写多线圈(Force Multiple Coils)功能码 15(0x0F) 写多寄存器(Preset Multiple Registers)功能码 16(0x10)

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论