一 基础知识
地址映射值
Modbus寄存器
Modbus寄存器地址分配
Modbus ASCII消息帧格式
Modbus RTU帧格式
Modbus RTU相邻帧间隔
Modbus寻址范围
PDU与ADU的关系
Modbus TCP/IP ADU与PDU的关系
Modbus TCP/IP与Modbus串行消息构成对比
MBAP报头说明
二 查询与响应报文例
三 Modbus部分功能码
从表可知01、05、15操作相同的数据段,02单独操作一组数据,03、06、16共同操作一组数据。
04操作一组数据,在某些资料上15和16也写作十六进制的0x0f和0x10。
01(0x01)读取线圈/离散量输出状态
查询报文:
功能码01查询报文例
响应报文
功能码01响应报文例
02(0x02)读取离散量输入值
03(0x03)读取保持寄存器值
函数实现
主机
• 01:Read coil status读线圈状态;
对应函数:
MODBUS_API int modbus_read_bits(modbus_t * ctx, int addr, int nb,uint8_t * dest)
• 02:Read input status读输入状态;
MODBUS_API int modbus_read_input_bits(modbus_t * ctx, int addr, int nb, uint8_t *dest)
• 03:Read holding register读保持寄存器;
MODBUS_API int modbus_read_registers(modbus_t * ctx, int addr, int nb, uint16_t *dest)
• 04:Read input registers读输入寄存器;
MODBUS_API int modbus_read_input_registers(modbus_t * ctx, int addr, int nb,uint16_t * dest)
• 05:Force single coil强制写入单线圈;
MODBUS_API int modbus_write_bit(modbus_t * ctx, int coil_addr, int status)
• 06:Preset single register预置单寄存器;
MODBUS_API int modbus_write_register(modbus_t * ctx, int reg_addr, int value)
• 15:Force multiple coils强制写入多线圈;
MODBUS_API int modbus_write_bits(modbus_t * ctx, int addr, int nb, const uint8_t *data)
• 16:Preset multiple registers预置多寄存器;
MODBUS_API int modbus_write_registers(modbus_t * ctx, int addr, int nb, const uint16_t * data)
• 17:Report slave ID报告从设备ID;
MODBUS_API int modbus_report_slave_id(modbus_t * ctx, int max_dest, uint8_t *dest)
• 22:Mask write register屏蔽写寄存器;
• 23:Read/Write registers读/写寄存器。