一起游 手游攻略 手游评测 睿擎工业Modbus RTU数据MQTT透传解决方案

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

时间: 来源:互联网 浏览:0

作者:张丁丁

功能综述

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

核心功能

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

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

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

2、云端命令接收与设备控制:瑞清派作为MQTT客户端,接收云端下发的控制命令。

命令解析后转发给Modbus RTU模块进行远程寄存器读写操作。

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

任务在没有数据处理时进入阻塞状态,有效节省CPU资源,提高系统的实时性能。

类型定义结构

{

uint16_t地址;

uint16_t值;

}Modbus数据;

软件框架设计

项目架构与模块划分

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

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'

内部主函数(无效)

{

app_rt_thread_init();

rt_kprintf('Modbus-MQTT网关初始化成功\n');

返回0;

}

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

1.模块间通信消息队列的创建和维护

2.网络连接初始化

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

具体实现参见app_management.c。

核心代码片段://创建消息队列,实现Modbus与MQTT模块之间的通信

静态voidmessage_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(无效)

{

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(无效)

{

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);

返回modbus_connect(ctx);

}

//Modbus RTU 主线程

voidapp_modbusRTU_master_thread(void*arg)

{

uint16_treceived_regs[10];

modbus_rtu_master_init();

同时(1)

{

//读取寄存器数据并发送给MQTT模块

rc=modbus_read_registers(ctx,0,10,received_regs);

如果(rc0)

{

for(inti=0;irc;i++)

{

ModbusData data={.address=i,value=received_regs[i]};

rt_mq_send(g_xQueueModbusRtuReadDate,数据,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地址

静态intmac_config(无效)

{

uint8_tmac[6]={0x00,0x11,0x22,0x33,0x44,0x55};

returnif_set_mac(DEV_NAME,mac);

}

//启用DHCP 客户端

staticintdhcp_enable(无效)

{

returnif_dhcp(DEV_NAME,1);

}

//网络初始化入口

无效netset_init(无效)

{

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-消息有效负载;

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(根);

返回0;

}

//MQTT线程-负责数据发布

voidapp_mqtt_thread(void*arg)

{

mq_start();//启动MQTT客户端

同时(1)

{

ModbusData数据;

//接收Modbus数据并发布到云端

rt_mq_recv(g_xQueueModbusRtuReadDate,数据,sizeof(ModbusData),RT_WAITING_FOREVER);

ModbusData_publish(数据);

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=tid=946489007785

立即扫码购买af38080e-ebb5-11f0-8ce9-92fbcf53809c.png

平台持续提供完整的技术文档、示例代码和社区支持,帮助您的项目快速上线!

标题:睿擎工业Modbus RTU数据MQTT透传解决方案
链接:https://yqqlyw.com/news/sypc/68330.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
  • 工业除湿机品牌【工业除湿机品牌有
  • 工业除湿机怎么设置湿度-工业除湿
  • 绯红之境兑换码最新2021 礼包兑换码大全

    绯红之境兑换码最新2021 礼包兑换码大全[多图],绯红之境兑换码怎么领取?绯红之境兑换码有哪些?绯红之境在今日

    2026-01-08
    三国群英传7霸王再临攻略 霸王再临攻略技巧开启方法

    三国群英传7霸王再临攻略 霸王再临攻略技巧开启方法[多图],三国群英传7霸王再临怎么玩?三国群英传7霸王再临

    2026-01-08
    妄想山海怎么加好友 加好友方法大全

    妄想山海怎么加好友 加好友方法大全[多图],妄想山海添加好友功能在哪里?妄想山海添加好友的方法是什么?好友添

    2026-01-08
    江南百景图又见桃花村钓鱼位置在哪?又见桃花村钓鱼攻略

    江南百景图又见桃花村钓鱼位置在哪?又见桃花村钓鱼攻略[多图],江南百景图又见桃花村钓鱼怎么钓?又见桃花村钓

    2026-01-08