論壇原文:
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 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;return RT_FALSE;}LOG_I("Modbus initialized successfully with UART5, 115200, RS485 mode");return RT_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");return RT_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));return RT_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);return RT_TRUE;}
代碼說明:此模塊實現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更新和參數設置等。
// 根據選擇加載不同內容頁const pages ={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/

