MCU - 可任意移植的Modbus RTU驱动,支持线圈读写

文摘   科技   2023-11-06 21:23   广东  

Keep Moving 

保持·热爱

Modbus

驱动

嵌入式C

RTU模式



介绍该通用型Modbus RTU驱动

独立按键、组合键的驱动

一个好玩的LED驱动

后台回复[开源]获取全部资料



概述

概述

一般性的应用,很少使用到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-


碎片聚合
求真务实
 最新文章