1. 10臺電磁流量計,用于測量各生產環節的水流量,型號為LDCK-25,支持Modbus RTU協議,RS485接口,波特率9600bps,數據位8位,無校驗位,停止位1位。
Modbus RTU寄存器信息如下:
流量計地址 寄存器地址 數據類型 讀寫屬性 備注
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位。
儀表地址 寄存器地址 數據類型 讀寫屬性 備注
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 TCP寄存器信息如下:
寄存器地址 數據類型 讀寫屬性 備注
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數據進行解析,提取出各個測點的實際數值和單位。比如流量計的數據解析如下:
```python
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格式。設備編號、時間戳、測點等信息都要包含在內。例如:
```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的固件,通過網管平臺進行批量升級。升級時先將新固件上傳到SG500的TF卡中,再通過網管平臺下發升級指令,SG500本地完成固件更新和程序替換,實現零宕機升級。
以上就是一個4G工業網關協議轉換的詳細案例,涉及了Modbus RTU/TCP協議解析、MQTT數據上云、SQLite本地存儲、看門狗監控、日志管理、固件升級等方方面面的內容。充分利用了SG500網關強大的邊緣計算和通信能力,可以高效地實現工業設備數據采集和上云。
1. 支持多種工業協議接入,可以采集各種設備的數據。
2. 具備邊緣計算能力,可以在網關端進行數據解析、轉換和存儲,減輕網絡傳輸壓力。
3. 支持標準MQTT協議,可以無縫對接各種物聯網平臺。
4. 提供透明傳輸通道,便于數據校驗和設備調試。
5. 內置SQLite數據庫,具備斷網數據緩存能力,保證數據的完整性。
6. 支持看門狗監控,保證程序的高可靠運行。
7. 支持遠程日志,便于問題定位和系統維護。
8. 支持固件升級,可以實現遠程批量升級,提高運維效率。