论坛原文:
https://club.rt-thread.org/ask/article/04554bb1d4ba5bfe.html
作者:XLUR_8603
功能综述
基于睿擎派和RT-Thread操作系统,我们开发了一款高性能工业物联网数据网关,实现了设备信息的实时采集、可视化监控和远程管理。该方案为传统工业设备的智能化升级提供了可靠且经济的技术路径。
核心功能
1.实时数据采集与可视化
a.通过Modbus RTU协议采集从设备数据
b.基于WebNet实现数据的网页可视化展示
c.支持温湿度、光照、距离等多种传感器数据监控
2.远程设备管理
a.通过Web界面实现设备参数配置
b.支持在线OTA固件升级
c.实现数据导出功能,方便数据分析
3.稳定可靠的通信
a.采用RS485总线连接,通信稳定可靠
b.基于RT-Thread实时操作系统,确保系统响应及时
c.使用互斥量保护数据,避免并发访问冲突
系统架构
硬件架构设计
本方案采用主从架构设计,实现了分布式数据采集与集中管理:

主机:睿擎派作为主站,负责数据汇总、处理和可视化
从机:星火一号作为从站,负责前端传感器数据采集
通信链路:通过RS485总线实现主从机之间的Modbus RTU通信
软件架构设计
本项目采用分层模块化设计,确保代码的可维护性和功能分离,核心模块包括:
主入口模块:程序执行入口,负责系统初始化流程
应用管理模块:集中管理应用任务,初始化全局资源
Modbus通信模块:实现Modbus RTU协议功能,负责数据读写操作
Web服务模块:基于WebNet实现HTTP服务,提供网页界面
传感器采集模块:负责各种传感器数据采集和处理
核心代码实现
Modbus初始化配置
代码说明:此模块负责初始化Modbus RTU通信环境,配置串口参数、从机地址、超时设置和RS485模式,为后续的数据采集建立通信基础。
/* Modbus初始化 - 根据硬件配置 */staticrt_bool_tmodbus_init(void){/* 创建Modbus RTU上下文 - 使用串口配置 */ modbus_ctx =modbus_new_rtu("/dev/uart5",115200,'N',8,1);if(modbus_ctx ==NULL){LOG_E("Unable to create Modbus context");return-1;}/* 设置从机地址 */modbus_set_slave(modbus_ctx,MODBUS_SLAVE_ADDR);/* 设置响应超时 */modbus_set_response_timeout(modbus_ctx,1,0);/* 设置为 RS485 模式 */modbus_rtu_set_serial_mode(modbus_ctx,MODBUS_RTU_RS485);/* 设置 RTS 控制 */modbus_rtu_set_rts(modbus_ctx,RS485_RTS_PIN,MODBUS_RTU_RTS_UP);/* 连接Modbus设备 */if(modbus_connect(modbus_ctx)==-1){LOG_E("Modbus connection failed: %s",modbus_strerror(errno));modbus_free(modbus_ctx); modbus_ctx =RT_NULL;returnRT_FALSE;}LOG_I("Modbus initialized successfully with UART5, 115200, RS485 mode");returnRT_TRUE;}
数据采集实现
代码说明:此模块实现从Modbus从设备读取传感器数据的功能,包括温湿度、光照和距离等参数,并进行数据处理和验证。
staticrt_bool_tread_sensor_data(structsensor_data*data){uint16_t tab_reg[MODBUS_REG_COUNT];int rc;int i;if(modbus_ctx ==NULL){LOG_E("Modbus context is null");returnRT_FALSE;} rc =modbus_read_registers(modbus_ctx, MODBUS_REG_START, MODBUS_REG_COUNT, tab_reg);if(rc ==-1){LOG_E("Modbus read failed: %s",modbus_strerror(errno));returnRT_FALSE;}/* 读取温度值(假设为有符号16位整数,单位0.1℃) */ data->temperature =(int16_t)tab_reg[TEMPERATURE_REG - MODBUS_REG_START]/1.0f; data->humidity = tab_reg[HUMIDITY_REG - MODBUS_REG_START]/1.0f; data->ps_data = tab_reg[PS_REG_ADDR - MODBUS_REG_START]; data->brightness = tab_reg[BR_REG_ADDR - MODBUS_REG_START]/1.0f; data->valid = RT_TRUE;LOG_D("Modbus read: temp=%.1f℃, humidity=%.1f%%", data->temperature,data->humidity);returnRT_TRUE;}
Web服务实现
代码说明:此模块实现Web服务的CGI处理函数,用于响应前端的光照数据请求,通过互斥量保护共享数据,确保数据访问的安全性。
staticvoidcgi_get_light_handler(structwebnet_session*session){constchar*mimetype;float light_value =0.0f; mimetype =mime_get_type(RT_NULL);webnet_session_set_header(session, mimetype,200,"Ok",-1);char*trans_buf ="{"light": %.2f}";if(temperature_mutex !=RT_NULL){rt_mutex_take(temperature_mutex,100); light_value = g_light_value;rt_mutex_release(temperature_mutex);}webnet_session_printf(session, trans_buf, light_value);}
网页界面设计
代码说明:此模块定义了Web界面的页面路由配置,根据用户选择加载不同的功能页面,包括设备信息、从机设备信息、视频流、数据导出、OTA更新和参数设置等。
// 根据选择加载不同内容页constpages ={ device_info:"device_info.shtml", slave_device_info:"slave_device_info.shtml", video_stream:"video_stream.shtml", data_export:"data_export.shtml", ota_update:"ota_update.shtml", parameter_settings:"parameter_settings.shtml",};
技术优势
1.高实时性
a.基于RT-Thread实时操作系统,任务响应及时
b.采用消息队列和互斥量等IPC机制,确保数据处理的实时性
2.易于扩展
a.模块化设计,功能分离清晰
b.基于RT-Thread软件包生态,可快速集成各种传感器
3.稳定可靠
a.Modbus RTU协议,通信稳定可靠
b.RS485总线,抗干扰能力强
c.完善的错误处理机制
4.用户友好
a.直观的Web界面,操作简单
b.支持在线OTA升级,维护便捷
c.数据可视化展示,一目了然
应用场景
工业设备监控:实时监控工业设备的运行状态和环境参数
智能楼宇:监控楼宇内的温湿度、光照等环境参数
农业大棚:监测大棚内的环境参数,实现智能调控
仓储物流:监控仓库内的温湿度、烟雾等参数,确保存储安全
部署与配置
硬件配置
主机:睿擎派开发板
从机:星火一号开发板
通信:RS485总线连接
传感器:温湿度传感器、光照传感器、距离传感器
软件配置
操作系统:RT-Thread 4.0+
协议:Modbus RTU
网络:WebNet HTTP服务
串口配置:UART5,波特率115200,无校验位,8位数据,1位停止位
演示效果
总结
基于Modbus的在线监控网关系统方案,充分利用了RT-Thread操作系统的优势,实现了设备信息的实时采集、可视化监控和远程管理。该方案具有高实时性、易于扩展、稳定可靠和用户友好等特点,可广泛应用于工业、楼宇、农业等领域的设备监控场景。
通过本方案的实施,传统工业设备可以快速接入物联网,实现智能化升级,提高生产效率和管理水平。RT-Thread软件包生态的丰富资源,也为系统的快速开发和功能扩展提供了有力支持。
项目代码地址:
https://gitee.com/lv-yuhaogree/rui-ching_demo
相关文档:
https://www.rt-thread.com/ruiching/document/site/
推荐阅读:







