0
点赞
收藏
分享

微信扫一扫

ubuntu18.04 x64源和arm64源

夏沐沐 2023-06-08 阅读 62

一 基础知识

地址映射值 

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读/写寄存器。

小结

举报

相关推荐

0 条评论