ctGateway网关技术说明书

2025.4.23 版本1.0

更新记录

时间

内容

章节

2025.4.23

支持的协议增加智能电表DLT645S7OPC-UA基础功能实现

3.4

目录

ctGateway网关技术说明书... 1

2025.4.23 版本1.0. 1

更新记录... 1

1     概述... 2

2     核心概念... 2

3     功能... 2

3.1       支持的系统... 2

3.2       支持的平台通讯载体... 3

3.3       支持的平台... 3

3.4       支持的设备协议... 3

3.5       支持的数据采集功能... 3

3.6       昆仑通态触摸屏设备信息导出文件支持... 4

3.7       压缩... 4

3.8       加密... 4

4     性能指标... 4

4.1       实时性... 4

4.2       支持的设备数量... 5

4.3       流量估计... 5

5     文件组成... 5

5.1       系统文件... 5

5.2       程序文件... 5

6     设计细节... 6

6.1       设备发现... 6

6.2       LED状态... 6

6.3       复位按钮... 6

6.4       数据序列号... 7

6.5       数据断电不丢失... 7

6.6       数据断网不丢失... 7

6.7       在线升级... 7

6.8       可靠性设计... 7

 

 

1     概述

网关程序以C++实现,使用utf-8字符集,平台必须使用utf-8字符集。设备采用的字符集与网关和平台无关,设备通道数据为字符串的,可以通过参数配置指定传输方式或自动转换字符集。

支持Modbus和透传,支持MQTTMQTTS

日志文件和数据文件大小受限,确保不出现磁盘满故障。

数据即时存盘,确保断电不丢失。

数据序号和确认机制保证网关到平台不存在数据丢失。

断网存储能力取决于数据量,网关支持数据压缩。

2     核心概念

3     功能

3.1    支持的系统

序号

系统

支持状态

说明

1

Linux/Arm64

优先支持,全部功能

精简版Linux,依赖的库需要自行编译

2

Linux/Arm

完成基本测试,能运行,能上报modbus_tcp数据

完整Linux,可以直接安装所需的包

3

 

 

 

 

3.2    支持的平台通讯载体

序号

协议名称

支持状态

说明

1

MQTT

已经:MQTT

已经:MQTTS

 

2

HTTP

计划:

依赖平台

 

3.3    支持的平台

序号

平台名称

支持的功能

说明

1

演示平台

全部指令

即配套的管理工具

2

 

 

 

3.4    支持的设备协议

序号

协议名称

支持状态

说明

1

Modbus

已经:TCPRTURTU_TCP

不确定:ASCII

目前使用的协议库不支持Modbus-ASCII,用得很少

2

透明传输

已经:TCP、串口

上报接收到的任何数据

通过平台下发任何数据

定时发送指令

3

智能电表

已经:DLT645-1997DLT645-2007

 

4

西门子S7

即将

基础功能模块已并入,尚未实现配置部分

3

OPCUA

即将

基础功能模块已并入,尚未实现配置部分

4

定制

计划

可随意定制

3.5    支持的数据采集功能

序号

名称

支持状态

说明

1

周期上报

已经

每隔设定时间上报一次

2

变化上报

已经

以设定的周期(毫秒,低于每次采集时间则等同于循环采集)

3

依赖上报

已经

当依赖的通道上报时上报(通常依赖的通道是变化上报类型)

4

变化时重新采集全部

已经

 

3.6    昆仑通态触摸屏设备信息导出文件支持

支持直接导入昆仑通态触摸屏的导出文件,目前直接根据deviceCode对应的csv文件导入,自动进行本地编码到UTF-8的转换(不要提前转换编码)。

通道采集频次原始值通常是1,表示不特别设定(跟随设备的周期设定)。修改为以下范围实现特定功能:

l  1XX代表差异上传,其中XX代表百分比。100代表不同即上传。

l  2XX代表差异时上传全部。

l  5XXXX代表依赖上传,XXXX代表依赖的通道序号。

目前以通道序号为channelNoparamCode

3.7    压缩

支持数据压缩,以便减少数据流量。默认未启用压缩。使用zlib压缩。

3.8    加密

通过加密防止不安全的传输过程。默认不对注册、心跳和上报数据加密。使用AES256-CBC加密或国密sm4加密

4     性能指标

4.1    实时性

网关以设定最小周期激活+事件触发方式运行,时间控制单位为毫秒,符合实时要求。

下发操作以事件触发方式接收、在下一轮扫描时优先运行,最大延迟=网络传输时间+一轮扫描时间。

一轮扫描时间大约=通道数*15毫秒(此为实测结果,185个通道不到3秒,保持寄存器每次读取大约15毫秒,绝大部分耗时确实在读取操作本身)。

支持连续地址读取优化。连续地址一次性采集,可显著缩短采集时间。

4.2    支持的设备数量

程序对设备数量和通道数量无限制,仅受硬件接口限制。

4.3    流量估计

支持数据压缩。

实测185个通道的上报数据大约10K。按照通常的每分钟一次的采集频率,一天=60*24*10K=14M,一个月=420M

此类数据一般压缩比比较高,可以减少80-90%

实测大约10K的一条数据压缩率90%,使用base64编码后85%base64编码会增大三分之一),小于200字节的数据压缩无意义(程序可以根据实际效果选择传输方式,需要平台支持)。

5     文件组成

5.1    系统文件

系统文件由硬件提供,不同网关有所不同。

以下为某一个硬件的情形:

序号

文件名称

功能

说明

1

/home/sn.txt

型号 序列号

静态文件

2

/home/sysInfo.txt

SIM卡号 信号强度

动态文件

3

/home/run/start.sh

启动脚本

系统启动时执行(内容由应用系统提供)

4

/home/run/publish.tar.bz2

原始程序

正常程序运行失败会自动运行原始程序

5

/home/backup/ led_gpio.txt

 

Led操作说明

5.2    程序文件

程序自身的所有文件基于单一目录“/home/root/publish”。

序号

文件名称

功能

说明

1

gwmian.exe

主程序

-auto 网关自启动脚本使用,禁止交互输入

-test 启动内置modbusTCP测试服务(可供默认设备采集)

2

appConfig.json

应用配置

文件大小限制等

3

northConfig.json

平台配置(北向配置)

平台连接参数

4

defaultNorthConfig.json

默认配置

 

5

DeviceConfig.json

设备配置(南向配置)

数据采集配置

6

gwmain.log

gwmain.log.log

gwmain.log.log.bz2

日志文件

文件总大小不超过应用配置的限制

gwmain.log.log会被压缩成gwmain.log.log.bz2

7

data.dat

data2.dat

数据文件

文件总大小不超过应用配置的限制

8

SSL/

证书文件

用于MQTTS的证书文件,每个平台一个子目录

 

6     设计细节

6.1    设备发现

为了使未知IP地址的设备可以被发现,设备周期性向端口9999发送UDP广播(物理网络和所有配置的网段,具体效果与网络管理设备有关)。

网线直连的PC可以通过抓包工具看到源信息从而发现设备。目前的手段依赖第三方库的安装。

计划:PC端配置程序实现。

6.2    LED状态

某款硬件具有9LED灯,全部为绿色,功能如下:

系统使用

设备2连接状态

设备5连接状态

系统使用

设备1连接状态

设备4连接状态

系统使用

平台连接状态

设备3连接状态

       左侧三个由系统使用,其余六个由程序使用。

       状态表:

 

常灭

常亮

闪烁

平台

未连接

注册成功

已连接,未注册

设备

所在接口未连接

设备读到数据

设备未读到数据(接口已连接)

       闪烁为亮灭各持续一秒,不停循环。

6.3    复位按钮

厂家尚未完成。

计划提供恢复北向配置和恢复出厂设置两个功能。

6.4    数据序列号

数据序列号标识一条数据,1开始递增。网关记录已确认的序列号、下一个序列号和已发送的序列号。

数据序列号是实现数据不丢失的基础。

6.5    数据断电不丢失

数据先存盘、后发送,这样可以保证断电不丢失数据。

6.6    数据断网不丢失

由于网关和平台中间的MQTT是不保存数据,没有订阅者直接丢弃,MQTT也无法确保断电不丢失数据,所以网关通过平台确认消息来确认平台接收了数据。平台无需每条数据即时确认,只需在网关存储写满前确认即可。

网关收到平台确认后方可清理已确认的数据。网关上存在的历史数据平台可以重新获取。

如果网关存储写满,后果是不确定的。网关可能停止写入新数据,也可能删除旧数据。

6.7    在线升级

启动脚本将程序文件复制到临时存储空间(此空间不是存储,掉电丢失),因此程序可以文件可以复制。

保存一份原始文件,以免升级失败变砖(由于大文件被拆分传送,升级失败概率似乎挺高)。

目前升级是手动的,选择文件上传到网关,然后发送重启命令生效。

6.8    可靠性设计

本程序用多种机制防止硬件挂死。建议硬件自身有看门狗机制。

软件层面有以下几层保护:

1, 启动脚本,程序失败运行出厂配置,保证设备不失联

2, 主程序双进程,一个监控一个工作,监控进程根据工作进程的状态决定如何处理

3, 超时未能连接到平台重启网关

4, 超时没有收到平台任何消息重启网关

5, 存储写入出错删除旧日志文件