1. 10臺電磁流量計,用于測量各生產環節的水流量,型號為LDCK-25,支持Modbus RTU協議,RS485接口,波特率9600bps,數據位8位,無校驗位,停止位1位。Modbus寄存器信息如下:
流量計地址 寄存器地址 數據類型 讀寫屬性 備注
1 0x0000 float 只讀 瞬時流量
1 0x0002 float 只讀 正累積流量
1 0x0004 float 只讀 負累積流量
...
10 0x0000 float 只讀 瞬時流量
10 0x0002 float 只讀 正累積流量
10 0x0004 float 只讀 負累積流量
2. 5臺電能質量儀表,用于測量各車間的電能質量數據,型號為CSPEM-96,支持Modbus RTU協議,RS485接口,波特率19200bps,數據位8位,偶校驗,停止位1位。Modbus寄存器信息如下:
儀表地址 寄存器地址 數據類型 讀寫屬性 備注
1 0x0000 float 只讀 A相電壓
1 0x0002 float 只讀 B相電壓
1 0x0004 float 只讀 C相電壓
1 0x0006 float 只讀 A相電流
...
5 0x0000 float 只讀 A相電壓
5 0x0002 float 只讀 B相電壓
5 0x0004 float 只讀 C相電壓
5 0x0006 float 只讀 A相電流
3. 1臺天然氣流量計,用于測量總進氣量,型號為FLOWSIC600-XT,支持Modbus TCP協議,以太網接口,Modbus TCP端口502。Modbus寄存器信息如下:
寄存器地址 數據類型 讀寫屬性 備注
0x0000 float 只讀 瞬時流量
0x0002 float 只讀 累積流量
0x0004 int 只讀 工作狀態字
數據中心使用的是MQTT協議,接入OneNET平臺。要求每5分鐘上傳一次數據。
1. 將10臺LDCK-25電磁流量計和5臺CSPEM-96電能質量儀表的RS485接口,通過RS485總線全部連接到SG500的RS485接口。注意要接120歐姆終端電阻。將FLOWSIC600-XT天然氣流量計的以太網口接到SG500的LAN口。
2. 在SG500上安裝Modbus RTU主站程序mbrtu,用于輪詢流量計和電表的數據。配置輪詢周期為5分鐘,從站等待響應超時時間1秒,重發3次。配置Modbus TCP主站程序mbtcp,用于輪詢天然氣流量計數據。
3. 編寫數據解析程序parse_data,對輪詢回來的Modbus數據進行解析,提取出各個測點的實際數值和單位。比如流量計的數據解析如下:
def parse_flow_data(data):
flow = struct.unpack('>f', data[0:4])[0]
pos_total = struct.unpack('>f', data[4:8])[0]
neg_total = struct.unpack('>f', data[8:12])[0]
return {
'flow': round(flow, 2),
'flow_unit': 'm3/h',
'pos_total': round(pos_total, 2),
'neg_total': round(neg_total, 2),
'total_unit': 'm3'
}
4. 編寫數據封裝程序pack_data,將解析后的數據封裝成統一的JSON格式。設備編號、時間戳、測點等信息都要包含在內。例如:
{
'gateway_id': 'SG500_1',
'timestamp': 1634227200,
'devices': [
{
'device_id': 'LDCK-25-1',
'data': [
{'flow': 23.61, 'flow_unit': 'm3/h'},
{'pos_total': 1638.22, 'total_unit': 'm3'},
{'neg_total': 0.11, 'total_unit': 'm3'}
]
},
{
'device_id': 'CSPEM-96-1',
'data': [
{'ua': 380.5, 'ua_unit': 'V'},
{'ub': 378.1, 'ub_unit': 'V'},
{'uc': 379.6, 'uc_unit': 'V'},
{'ia': 62.5, 'ia_unit': 'A'}
]
},
{
'device_id': 'FLOWSIC600',
'data': [
{'flow': 899.32, 'flow_unit': 'm3/h'},
{'total': 123838.63, 'total_unit': 'm3'},
{'status': 1}
]
}
]
}
5. 在SG500上安裝MQTT客戶端程序mosquitto,使用4G網絡連接到OneNET的MQTT服務器。按照OneNET的設備接入要求,配置MQTT參數:
- 服務器地址: iot-mqtts.heclouds.com
- 端口: 8883
- 證書文件: iot-mqtts-certificate.pem
- 用戶名: 設備ID
- 密碼: 鑒權信息
6. 編寫MQTT發布程序pub_data,將封裝好的JSON數據,以5分鐘為周期,通過MQTT發布到OneNET平臺的設備數據流主題。
7. 使用SG500的RS485 DTU功能,將Modbus RTU數據透明傳輸到數據中心,作為數據校驗。配置RS485的TCP服務器模式,本地端口號為502。這樣數據中心也可以直接通過Modbus TCP讀取設備的原始數據。
8. 考慮到工業環境的復雜性,在SG500本地使用SQLite數據庫,對采集到的數據進行本地存儲,并記錄上傳狀態。每次存儲數據前,先檢查磁盤使用率,超過90%時,刪除最早的數據。MQTT發布失敗時,存儲發布失敗的數據,等待網絡恢復后補發。
9. 配置SG500的看門狗功能,監控Modbus采集程序mbrtu、mbtcp和MQTT發布程序pub_data。如果進程異常退出,看門狗會自動重啟進程。同時通過MQTT發布一條異常告警信息到數據中心。
10. 對SG500的系統日志進行配置,將系統日志發送到數據中心的日志服務器。日志等級為INFO,采用rsyslog格式,通過TCP協議發送。
11. 使用SG500提供的"星云"網管平臺,對網關進行批量配置、升級、監控。比如修改輪詢周期、更新Modbus寄存器地址等參數,都可以通過網管平臺遠程操作。
12. 將以上開發的程序打包成SG500的固件,通過網管平臺進行批量升級。升級時先將新固件上傳到SG500的TF卡中,再通過網管平臺下發升級指令,SG500本地完成固件更新和程序替換,實現零宕機升級。
以上就是一個比較完整的工業網關協議轉換項目的開發流程。涉及了多種工業協議解析、數據庫存儲、邊緣計算、網絡傳輸、網管平臺等方面的內容。充分利用了SG500網關提供的軟硬件資源,可以高效地實現工業設備數據采集和上云。
本案例重點展示了SG500在工業協議轉換和邊緣計算方面的應用。通過二次開發,可以將SG500打造成一個功能強大的工業物聯網關,適用于各種工業場景。
當然,實際項目中還需要考慮更多的細節,如數據安全、設備冗余、應用集成等。這需要根據具體需求進行定制化開發。SG500提供了完善的二次開發環境和技術支持,用戶可以基于此進行深度定制,開發出滿足自己需求的應用。
希望通過本案例,讓您對SG500能耗網關有一個更加直觀和深入的了解。如果您有任何問題或需求,歡迎隨時聯系我們,我們將竭誠為您服務!