介绍该通用型Modbus RTU驱动
后台回复[开源]获取全部资料
概述
一般性的应用,很少使用到Modbus的线圈寄存器、离散输入寄存器,这里整理相关功能码,设计出一个通用的Modbus RTU驱动
支持的寄存器
目前共支持四类:
可使用宏,启用相关的寄存器:
功能码处理机制
把报文扔给它,它返回一个用于应答上位机的报文:
功能码注册表
功能码的扩展功能
驱动内部弱定义了下图的函数,生效需用户自行定义:
示例
把接收到的报文扔给“ry_modbus_handle”,接着使用UART应答上位机:
Tx->len = ry_modbus_handle(Rx->buff, Rx->len, Tx->buff);
drv_uart_send(Tx->buff, Tx->len);
读写多个保持寄存器
打开“Modbus Poll”
手动输入0x10的报文
从Addr3处开始写,0x1116、0x6668
观察Addr4确实为“0x6668”:
线圈的读写操作
1 线圈是开关信号,每个bit对应一个地址
2 图中从bit3开始写
3 写0x12,即18个开关数据,共占3个字节
4 低字节在前,数据为0xCF、0xCA、0xFF
5 最后一个字节0xFF,只使用了2个低bit
-END-