欢迎来到纳米网!
首页 > 公众号文章>正文

睿擎工业Modbus RTU数据MQTT透传解决方案

作者:张丁丁

功能综述


该项目基于睿擎平台,开发了一款高性能工业物联网数据网关,实现Modbus RTU协议与MQTT协议的双向高效转换。该方案为传统工业设备在不改变原有功能和硬件结构的前提下,快速接入物联网提供了可靠且经济的技术路径。


核心功能


1、Modbus RTU数据采集与上云:

睿擎派作为Modbus RTU主站,定时读取从站寄存器数据

采集的数据通过消息队列机制传递至MQTT模块,实时发送至云端MQTT Broker

2、云端命令接收与设备控制:

睿擎派作为MQTT客户端,接收云端发布的控制命令

解析命令后转发至Modbus RTU模块,执行远程寄存器读写操作

3、技术优势:

采用生产者-消费者模型,基于RT-Thread消息队列实现进程间通信(IPC)

任务在无数据处理时进入阻塞状态,有效节省CPU资源,提升系统实时性

typedefstruct


{


uint16_taddress;


uint16_tvalue;


}ModbusData;

软件框架设计


项目架构与模块划分

本项目采用分层模块化设计,确保代码的可维护性和功能分离,核心模块包括:

1、主入口模块:

a.程序执行入口

b.负责系统初始化流程,调用应用管理模块

c.具体实现参见 main.c

2、应用管理模块:

a.集中管理应用任务

b.初始化全局资源,如RT-Thread消息队列等IPC机制

c.具体实现参见 app_management.c

3、网络初始化模块:

a.配置设备网络连接

b.实现优先网络连接策略,为MQTT通信提供底层支撑

c.具体实现参见 app_netset.c

4、Modbus RTU协议处理模块:

a.实现Modbus RTU协议功能

b.负责外设初始化、主站数据读取及远程控制

c.具体实现参见 applicationModbusRtu.c

5、MQTT通信模块:

a.实现MQTT客户端功能

b.负责Broker连接、命令接收和数据发布

c.具体实现参见 applicationMqtt.c


测试环境与云端配置


本项目使用阿里云服务器部署EMQX MQTT Broker,作为可靠的云端测试环境,确保Modbus RTU网关与云平台之间的稳定双向通信。

软件模块详细说明


主入口模块

功能说明:主入口模块是程序的核心启动点,负责初始化系统资源并启动应用管理模块。它作为整个系统的启动器,确保所有功能模块按正确顺序初始化和运行,具体实现参见 main.c。

核心代码片段:

#includertthread.h>
#include"app_management.h"

intmain(void)
{
app_rt_thread_init();
rt_kprintf("Modbus-MQTT Gateway initialized successfullyn");
return0;
}



应用管理模块

功能说明:应用管理模块是系统的中枢神经,负责全局资源管理和任务调度。它实现了:

1.消息队列的创建与维护,用于模块间通信

2.网络连接的初始化

3.关键任务线程的创建与启动(Modbus RTU和MQTT线程)

具体实现参见 app_management.c。

核心代码片段:

// 创建消息队列,实现Modbus与MQTT模块间通信


staticvoidmessage_queue_init(void)
{
g_xQueueModbusRtuReadDate=rt_mq_create("modbus_rtu_mq",sizeof(ModbusData),10,RT_IPC_FLAG_FIFO);
g_xQueueModbusRtuWriteDate=rt_mq_create("modbus_rtu_mq_w",sizeof(ModbusData),10,RT_IPC_FLAG_FIFO);
}

// 系统初始化与任务启动
voidapp_rt_thread_init(void)
{
message_queue_init();
netset_init();// 网络初始化

// 启动Modbus RTU主站任务
tid=rt_thread_create("modbus_rtu_thread",app_modbusRTU_master_thread,RT_NULL,1024*4,10,10);
rt_thread_startup(tid);

// 启动MQTT通信任务
tid=rt_thread_create("mqtt_thread",app_mqtt_thread,RT_NULL,1024*4,10,10);
rt_thread_startup(tid);
}


Modbus RTU协议处理模块

功能说明:该模块实现Modbus RTU协议的主站功能,是网关与工业设备通信的核心。主要负责:

1.配置和初始化Modbus RTU通信参数

2.定时读取从站设备寄存器数据

3.接收并执行来自MQTT模块的远程控制命令

具体实现参见 applicationModbusRtu.c。


核心代码片段:

// 初始化Modbus RTU主站


staticintmodbus_rtu_master_init(void)
{
ctx=modbus_new_rtu("/dev/uart5",9600,'N',8,1);
modbus_set_slave(ctx,1);
modbus_set_response_timeout(ctx,1,0);
modbus_rtu_set_serial_mode(ctx,MODBUS_RTU_RS485);
modbus_rtu_set_rts(ctx,RS485_RTS_PIN,MODBUS_RTU_RTS_UP);
returnmodbus_connect(ctx);
}

// Modbus RTU主站线程
voidapp_modbusRTU_master_thread(void*arg)
{
uint16_treceived_regs[10];
modbus_rtu_master_init();

while(1)
{
// 读取寄存器数据并发送至MQTT模块
rc=modbus_read_registers(ctx,0,10,received_regs);
if(rc>0)
{
for(inti=0;irc;i++)
{
ModbusData data={.address=i,.value=received_regs[i]};
rt_mq_send(g_xQueueModbusRtuReadDate,&data,sizeof(ModbusData));
}
}

// 处理远程写入命令
ModbusData write_data;
rt_mq_recv(g_xQueueModbusRtuWriteDate,&write_data,sizeof(ModbusData),RT_WAITING_FOREVER);
modbus_write_register(ctx,write_data.address,write_data.value);

rt_thread_delay(1000);
}
}


网络初始化模块


功能说明:该模块负责设备网络连接的配置与初始化,为MQTT通信提供底层网络支持。主要功能包括MAC地址配置和DHCP客户端启用,确保设备能自动获取IP地址并建立网络连接,具体实现参见 app_netset.c。


核心代码片段:

// 配置MAC地址


staticintmac_config(void)
{
uint8_tmac[6]={0x00,0x11,0x22,0x33,0x44,0x55};
returnif_set_mac(DEV_NAME,mac);
}

// 启用DHCP客户端




staticintdhcp_enable(void)
{
returnif_dhcp(DEV_NAME,1);
}

// 网络初始化入口
voidnetset_init(void)
{
mac_config();
dhcp_enable();
}



MQTT通信模块


功能说明:

该模块实现MQTT客户端功能,是网关与云端通信的桥梁。主要功能包括:

1.MQTT Broker连接与认证

2.订阅云端控制命令

3.发布Modbus采集数据

4.JSON与Modbus数据格式转换

具体实现参见 applicationMqtt.c。

核心代码片段:

// MQTT订阅回调函数 - 处理云端控制命令


staticvoidmqtt_sub_callback(MQTTClient*c,MessageData*msg_data)
{
ModbusData write_data;

// 解析JSON命令
constchar*json_string=(constchar*)msg_data->message->payload;
if(json_to_ModbusData(json_string,&write_data)==0)
{
// 发送至Modbus写入队列
rt_mq_send(g_xQueueModbusRtuWriteDate,&write_data,sizeof(ModbusData));
}
}

// 数据格式转换 - JSON到ModbusData
intjson_to_ModbusData(constchar*json_string,ModbusData*out_data)
{
cJSON*root=cJSON_Parse(json_string);
if(root==NULL)return-1;

out_data->address=(uint16_t)cJSON_GetObjectItemCaseSensitive(root,"address")->valuedouble;
out_data->value=(uint16_t)cJSON_GetObjectItemCaseSensitive(root,"value")->valuedouble;

cJSON_Delete(root);
return0;
}

// MQTT线程 - 负责数据发布
voidapp_mqtt_thread(void*arg)
{
mq_start();// 启动MQTT客户端

while(1)
{
ModbusData data;
// 接收Modbus数据并发布到云端
rt_mq_recv(g_xQueueModbusRtuReadDate,&data,sizeof(ModbusData),RT_WAITING_FOREVER);
ModbusData_publish(&data);

rt_thread_mdelay(10);
}
}

演示效果

云端MQTT服务器连接状态

af209cdc-ebb5-11f0-8ce9-92fbcf53809c.png

实际应用演示

视频演示:

https://www.bilibili.com/video/BV1uWSnBwEqp/?vd_source=9ed2178ae937fd4121a4f70f89f06b65

源码仓库

GitHub仓库:https://github.com/yxy314/ruiqingpai_RTU_MQTT

总结

本项目实现了一个功能完整、性能稳定的Modbus RTU与MQTT协议转换网关,具有以下特点:

1、高可靠性:采用成熟的开源库和RT-Thread实时操作系统,确保系统稳定性

2、低资源占用:优化的任务调度和内存管理,适合资源受限的嵌入式平台

3、易于扩展:模块化设计便于功能扩展和定制

4、安全通信:支持MQTT认证机制,确保数据传输安全


该网关为工业设备的物联网化改造提供了高效、经济的解决方案,可广泛应用于工业自动化、智能工厂、远程监控等领域。


这篇文章展示了睿擎平台将传统工业设备无缝接入物联网的完整能力。如果您正在寻找一个稳定、高效且开箱即用的硬件平台来部署此类解决方案,或用于您的其他工业控制项目,那么实现本文所有功能的睿擎派RC3506开发板将是您的理想选择。


为什么选择睿擎派进行开发?

软硬一体,省心省力:文章中的所有软件皆可在此开发板上流畅运行,无需担忧硬件适配问题。

全栈自主,开放灵活:基于RT-Thread的睿擎平台提供从底层驱动到应用框架的全栈支持,并允许您进行深度定制。

工业级可靠性:专为工业环境设计,确保您的关键应用稳定运行。


即刻入手,开始您的项目

如果您对文中解决方案感兴趣,或希望基于睿擎派实现自己的工业物联网创意,欢迎访问我们的官方淘宝店铺“睿赛德科技”,选购睿擎派RC3506开发板及配套配件。

睿擎派工业开发板购买链接:

https://item.taobao.com/item.htm?ft=t&id=946489007785


立即扫码购买

af38080e-ebb5-11f0-8ce9-92fbcf53809c.png

平台持续提供完善的技术文档、示例代码与社区支持,助力您的项目快速落地!

猜你喜欢

  • 艾为电子AW9967FSR:高效升压型WLED驱动芯片详解

    艾为电子AW9967FSR:高效升压型WLED驱动芯片详解

    在消费电子持续追求轻薄化与长续航的当下,背光系统能效成为关键瓶颈。传统方案在轻载场景效率低下,散热性能不足,严重制约设备续航并带来可靠性风险。数模龙头艾为电子推出新一代升压型WLED驱动芯片——AW9967FSR,以科学先进的热管理技术,打造卓越的散热...

    2025-12-01
  • Microchip发布MCP服务器:革新AI驱动的产品数据访问方式

    Microchip发布MCP服务器:革新AI驱动的产品数据访问方式

    该服务器支持跨AI平台获取可信产品信息,简化工作流程、加速设计并提高生产力 为进一步兑现公司为嵌入式工程师开发AI解决方案的承诺,Microchip Technology Inc.(微芯科技公司)今日推出模型语境协议(MCP)服务器。作为AI接口,MCP服务器可直接连接兼容的AI...

    2026-01-23
  • Microchip第22届中国技术精英年会北京站成功闭幕,下一站深圳

    Microchip第22届中国技术精英年会北京站成功闭幕,下一

    Microchip第22届中国技术精英年会(MASTERs)北京站于今日圆满落幕!来自各地的技术专家、行业伙伴和客户齐聚一堂,共同探讨前沿技术与创新应用。活动伊始,Microchip大中华区副总裁Edward Ho先生为本站致开幕词,欢迎各位嘉宾的到来,并分享了对行业发展的展望...

    2026-01-23
  • 国星半导体车规级LED芯片获2025年广东省名优高新技术产品

    国星半导体车规级LED芯片获2025年广东省名优高新技术

    近日,广东省高新技术企业协会正式发布《2025年第二批广东省名优高新技术产品名单》,国星半导体自主研发的车规级LED芯片与垂直LED芯片两大系列产品成功入选。该认定严格围绕技术创新性、质量稳定性、市场成熟度及产业化能力四大维度进行评审,是广东省...

    2025-12-02
  • 云英谷科技荣登2025中国半导体企业影响力百强,专注OLED显示驱动芯片

    云英谷科技荣登2025中国半导体企业影响力百强,专注OLED

    11月14日,世界集成电路协会(WICA)主办的“2025全球半导体市场峰会”在上海成功召开。本次峰会发布了2026全球半导体市场趋势展望暨2025中国半导体企业影响力百强及集成电路新锐企业50强报告。云英谷科技股份有限公司荣登“2025中国半导体企业影响力百...

    2026-01-23
^