QModbus 是一款快捷易用的modbus通信协议栈,支持MODBUS-RTU、MODBUS-TCP通信协议,支持使用RTU、TCP通信链路,支持主机、从机功能,支持多实例应用。采用通信链路与通信协议分离的设计架构,用户可灵活地交叉搭配使用。。
QModbus
软件包目录结构如下所示:
modbus
├───inc // 头文件目录
│ | modbus.h // API接口头文件
│ | modbus_backend.h // 后端模块头文件
│ | modbus_cfg.h // 配置头文件
│ | modbus_crc.h // CRC校验模块头文件
│ | modbus_cvt.h // 数据转换模块头文件
│ | modbus_pdu.h // PDU模块头文件
│ | modbus_port.h // 移植接口头文件
│ | modbus_rtu.h // RTU通信协议模块头文件
│ | modbus_tcp.h // TCP通信协议模块头文件
│ └───typedef.h // 数据类型定义头文件
├───src // 源码目录
│ | modbus.c // 主模块
│ | modbus_backend.c // 后端模块
│ | modbus_crc.c // CRC校验模块
│ | modbus_cvt.c // 数据转换模块
│ | modbus_master.c // 主机功能模块
│ | modbus_pdu.c // PDU模块
│ | modbus_port_linux.c // linux移植接口模块
│ | modbus_port_rtt.c // RT-Thread移植接口模块
│ | modbus_port_slave.c // 从机移植接口模块
│ | modbus_rtu.c // RTU通信协议模块
│ | modbus_slave.c // 从机功能模块
│ └───modbus_tcp.c // TCP通信协议模块
├───sample // 使用示例目录
│ | mb_sample_rtu_master.c // RTU主机使用示例
│ | mb_sample_rtu_slave.c // RTU从机使用示例
│ | mb_sample_tcp_master.c // TCP主机使用示例
│ └───mb_sample_rtu_slave.c // TCP从机使用示例
│ license // 软件包许可证
│ readme.md // 软件包使用说明
└───SConscript // RT-Thread 默认的构建脚本
QModbus package 遵循 LGPLv2.1 许可,详见 LICENSE
文件。
- RT_Thread 4.0
- serial
- pin
- SAL
- 功能 :动态创建modbus应用实例
- 参数 :type--通信链路后端类型,MB_BACKEND_TYPE_RTU 或 MB_BACKEND_TYPE_TCP
- 参数 :param--后端参数指针,当type为MB_BACKEND_TYPE_RTU时须填写后端参数的rtu域,当type为MB_BACKEND_TYPE_TCP时须填写后端参数的tcp域
- 返回 :成功返回实例指针,失败返回NULL
- 功能 :销毁modbus应用实例
- 参数 :hinst--modbus应用实例指针
- 返回 :无
- 功能 :修改从机地址,默认地址为1
- 参数 :hinst--modbus应用实例指针
- 参数 :saddr--从机地址
- 返回 :无
- 功能 :修改通信协议,默认使用与通信链路后端类型一致的通信协议类型
- 参数 :hinst--modbus应用实例指针
- 参数 :prot--通信协议类型,MB_PROT_RTU 或 MB_PROT_TCP
- 返回 :无
- 功能 :修改超时时间,默认应答超时300ms,字节超时32ms
- 参数 :hinst--modbus应用实例指针
- 参数 :ack_tmo_ms--应答超时时间,单位ms
- 参数 :byte_tmo_ms--字节超时时间,单位ms
- 返回 :无
- 功能 :建立链路连接, 如已建立连接则立即返回
- 参数 :hinst--modbus应用实例指针
- 返回 :0 成功, -1 失败
- 功能 :断开链路连接, 如已断开连接则立即返回
- 参数 :hinst--modbus应用实例指针
- 返回 :0 成功, -1 失败
- 功能 :主机功能函数,读请求,功能码和数据由用户确定,本函数可用于对非标准或自定义协议做功能扩展。
- 参数 :hinst--modbus应用实例指针
- 参数 :func--功能码
- 参数 :addr--寄存器地址
- 参数 :nb--读取寄存器数量
- 参数 :pdata--保存应答数据的缓冲区指针
- 返回 :>0 为读取到的数据长度;=0 表示发生错误;<0 表示从站异常应答,返回值为异常码的负值
- 功能 :主机功能函数,写请求,功能码和数据由用户确定, 本函数可用于对非标准或自定义协议做功能扩展。
- 参数 :hinst--modbus应用实例指针
- 参数 :func--功能码
- 参数 :addr--寄存器地址
- 参数 :nb--写入寄存器数量
- 参数 :pdata--写入数据的缓冲区指针
- 参数 :dlen--写入数据的长度
- 返回 :>0 为写入的数据长度;=0 表示发生错误;<0 表示从站异常应答,返回值为异常码的负值
- 功能 :主机功能函数,读取多个线圈,功能码-0x01
- 参数 :hinst--modbus应用实例指针
- 参数 :addr--寄存器地址
- 参数 :nb--读取线圈数量
- 参数 :pbits--保存应答数据的缓冲区指针
- 返回 :>0 为读取到的线圈数量;=0 表示发生错误;<0 表示从站异常应答,返回值为异常码的负值
- 功能 :主机功能函数,读取多个离散量输入, 功能码-0x02
- 参数 :hinst--modbus应用实例指针
- 参数 :addr--寄存器地址
- 参数 :nb--读取离散量数量
- 参数 :pbits--保存应答数据的缓冲区指针
- 返回 :>0 为读取到的离散量数量;=0 表示发生错误;<0 表示从站异常应答,返回值为异常码的负值
- 功能 :主机功能函数,读取多个保持寄存器, 功能码-0x03
- 参数 :hinst--modbus应用实例指针
- 参数 :addr--寄存器地址
- 参数 :nb--读取寄存器数量
- 参数 :pregs--保存应答寄存器数据的缓冲区指针
- 返回 :>0 为读取到寄存器数量;=0 表示发生错误;<0 表示从站异常应答,返回值为异常码的负值
- 功能 :主机功能函数,读取多个输入寄存器, 功能码-0x04
- 参数 :hinst--modbus应用实例指针
- 参数 :addr--寄存器地址
- 参数 :nb--读取寄存器数量
- 参数 :pregs--保存应答寄存器数据的缓冲区指针
- 返回 :>0 为读取到寄存器数量;=0 表示发生错误;<0 表示从站异常应答,返回值为异常码的负值
- 功能 :主机功能函数,写入单个线圈, 功能码-0x05
- 参数 :hinst--modbus应用实例指针
- 参数 :addr--寄存器地址
- 参数 :bit--写入的线圈值
- 返回 :=1 写入成功;=0 表示发生错误;<0 表示从站异常应答,返回值为异常码的负值
- 功能 :主机功能函数,写入单个保持寄存器, 功能码-0x06
- 参数 :hinst--modbus应用实例指针
- 参数 :addr--寄存器地址
- 参数 :val--写入的寄存器值
- 返回 :=1 写入成功;=0 表示发生错误;<0 表示从站异常应答,返回值为异常码的负值
- 功能 :主机功能函数,写入多个线圈, 功能码-0x0F
- 参数 :hinst--modbus应用实例指针
- 参数 :addr--寄存器地址
- 参数 :nb--写入线圈数量
- 参数 :pbits--写入线圈数据的缓冲区指针
- 返回 :>0 为写入线圈数量;=0 表示发生错误;<0 表示从站异常应答,返回值为异常码的负值
- 功能 :主机功能函数,写入多个保持寄存器, 功能码-0x10
- 参数 :hinst--modbus应用实例指针
- 参数 :addr--寄存器地址
- 参数 :nb--写入寄存器数量
- 参数 :pregs--写入寄存器数据的缓冲区指针
- 返回 :>0 为写入寄存器数量;=0 表示发生错误;<0 表示从站异常应答,返回值为异常码的负值
- 功能 :主机功能函数,屏蔽写保持寄存器, 功能码-0x16
- 参数 :hinst--modbus应用实例指针
- 参数 :addr--寄存器地址
- 参数 :mask_and--屏蔽与值
- 参数 :mask_or--屏蔽或值
- 返回 :=1 写入成功;=0 表示发生错误;<0 表示从站异常应答,返回值为异常码的负值
int mb_write_and_read_regs(mb_inst_t *hinst, u16 wr_addr, int wr_nb, const u16 *p_wr_regs, u16 rd_addr, int rd_nb, u16 *p_rd_regs);
- 功能 :主机功能函数,读写入多个保持寄存器, 功能码-0x17
- 参数 :hinst--modbus应用实例指针
- 参数 :wr_addr--写入寄存器地址
- 参数 :wr_nb--写入寄存器数量
- 参数 :p_wr_regs--写入寄存器数据的缓冲区指针
- 参数 :rd_addr--读取寄存器地址
- 参数 :rd_nb--读取寄存器数量
- 参数 :p_rd_regs--保存读取应答寄存器数据的缓冲区指针
- 返回 :>0 为读取到寄存器数量;=0 表示发生错误;<0 表示从站异常应答,返回值为异常码的负值
- 功能 :从机功能函数,修改从机回调函数表,默认使用modbus_port中的接口函数做为回调函数
- 参数 :hinst--modbus应用实例指针
- 参数 :cb--回调函数表指针
- 返回 :无
- 功能 :从机功能函数,从机状态机处理,在线程中循环调用即可
- 参数 :hinst--modbus应用实例指针
- 返回 :无
- 方式1: 通过 Env配置工具 或 RT-Thread studio 开启软件包,根据需要配置各项参数;配置路径为 RT-Thread online packages -> IoT - internet of things -> qmodbus
参数宏 | 说明 |
---|---|
MB_USING_RAW_PRT | 使用原始通信数据打印 |
MB_USING_ADDR_CHK | 使用从机地址检查 |
MB_USING_MBAP_CHK | 使用MBAP头检查 |
MB_USING_PORT_RTT | 使用rt-thread系统接口 |
MB_USING_PORT_LINUX | 使用linux系统接口 |
MB_USING_RTU_BACKEND | 使用RTU通信链路后端 |
MB_USING_TCP_BACKEND | 使用TCP通信链路后端 |
MB_USING_RTU_PROTOCOL | 使用MODBUS-RTU通信协议 |
MB_USING_TCP_PROTOCOL | 使用MODBUS-TCP通信协议 |
MB_USING_MASTER | 使用主机功能 |
MB_USING_SLAVE | 使用从机功能 |
MB_USING_SAMPLE_RTU_MASTER | 使用基于RTU通信链路后端的主机示例 |
MB_USING_SAMPLE_RTU_SLAVE | 使用基于RTU通信链路后端的从机示例 |
MB_USING_SAMPLE_TCP_MASTER | 使用基于TCP通信链路后端的主机示例 |
MB_USING_SAMPLE_TCP_SLAVE | 使用基于TCP通信链路后端的从机示例 |
- 维护:qiyongzhong
- 主页:https://github.com/qiyongzhong0/qmodbus
- 主页:https://gitee.com/qiyongzhong0/qmodbus
- 邮箱:917768104@qq.com