存储分区
0区:表示线圈(Coil)分区。用于存储二进制输出数据,通常用于控制设备的开关状态,例如电机的启停操作。每个线圈都可以被读取和写入,用于实现设备的控制和状态反馈。
1区:表示离散输入(Discrete Input)分区。用于存储二进制输入数据,通常用于表示开关、传感器等离散状态的输入信号。离散输入只能被读取,不能被写入,用于向主机提供有关设备输入状态的信息。
3区:表示保持寄存器(Holding Register)分区。保持寄存器分区用于存储16位或32位的有符号或无符号整数数据。这个分区常用于存储实时数据或设备参数,如传感器数据、运行状态、设备配置等。保持寄存器可读可写,可以读取存储的数据,也可以修改其中的值。
4区:表示输入寄存器(Input Register)分区。用于存储16位或32位的有符号或无符号整数数据,与保持寄存器类似。与保持寄存器不同的是,输入寄存器通常用于存储被Modbus设备读取的外部数据,如模拟传感器输出或其他设备的数据。输入寄存器只能被读取,不能被写入。
地址模型
功能码
报文分析
从ModBus Poll获取报文
对上方16进制报文进行精简有:
发送:01 03 00 00 00 0A C5 CD
接收:01 03 14 00 0B 00 0C 00 0D 00 0E 00 00 00 00 00 00 00 00 00 00 00 00 1B CA
发送/接收 格式:
从站地址+功能码+起始寄存器+寄存器数量+CRC(校验算法)
01 03 00 00 00 0A C5 CD
1号站点 读取寄存器 起始地址 读10个寄存器
从站地址+功能码+字节计数+具体数据+CRC(校验算法)
01 03 14 ....... 1B CA
1号站点 读取寄存器 返回20个字节的数据 (一个寄存器16bit,两个字节)
对上方具体数据分析:
00 0B 00 0C 00 0D 00 0E 00 00 00 00 00 00 00 00 00 00 00 00
10 11 12 13 0 0 0 0 0 0