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能耗网关有一个更加直观和深入的了解。如果您有任何问题或需求,欢迎随时联系我们,我们将竭诚为您服务!