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

[复制链接]
查看63750 | 回复0 | 2024-4-14 23:02:30 | 显示全部楼层 |阅读模式






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-

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则