feat: 完成 issue #3 边缘采集网关模板化封装

- 点位字典 CSV schema/加载/自动校验(缺失字段/量纲/重复点号,PRD 5.1)
- 协议可插拔只读驱动:OPC UA(S7-1200 适配)/S7/Modbus/称重/能源/模拟
- 周期采集引擎:只读+背压保护+健康度指标(丢失率/P99/可用性)
- Kafka 流式上行 + 本地 spool 断点续传(丢失率≤0.02% 保障)
- 模板配置外置(gateway.yaml + 点位字典 CSV),换行业零改码
- 18 个单元测试全绿;端到端运行 SLA 达标
This commit is contained in:
2026-08-04 15:32:16 +08:00
parent 21c6259739
commit f49c0920d4
27 changed files with 1806 additions and 0 deletions
@@ -0,0 +1,53 @@
# iAOP 边缘采集网关 —— 模板配置示例(Template-Ti 一期:氯化车间/海绵钛)
# 换行业模板时只需修改本文件 + 点位字典 CSV,网关代码零改动。
collector:
# 采集周期(毫秒):600 点位 1Hz 即 1000
interval_ms: 1000
# 背压保护:spool 待上行记录上限,超过则丢弃新样本并计入丢失率
max_pending: 100000
# 本地缓存目录(断点续传落盘位置)
spool_dir: "./spool"
cache_limit_bytes: 536870912 # 512MB
# 协议可插拔驱动插槽(protocol 注册表见 drivers/__init__.py)
drivers:
# 和利时 DCS —— OPC UA 只读
- protocol: opcua
device_prefixes: ["CLF"] # 设备编号前缀路由(CLF-01, CLF-02, ...)
config:
endpoint: "opc.tcp://10.20.1.10:4840"
security: "None"
timeout: 10
# 西门子 S7-1200 —— PLC 只读(点位 opcNode 列写 DB 地址,如 DB100.0.0)
- protocol: s7
device_prefixes: ["S7"]
config:
ip: "10.20.1.20"
rack: 0
slot: 1
# 称重仪表(Modbus RTU)
- protocol: weighing
device_prefixes: ["W"]
config:
mode: modbus
mode_tcp: false
port: "COM3"
baudrate: 9600
slave_id: 1
# 能源表(Modbus TCP)
- protocol: energy
device_prefixes: ["E"]
config:
mode: modbus
host: "10.20.1.30"
port: 502
slave_id: 1
# 兜底:未匹配任何前缀的点位(本地联调用 simulator;现场部署删除此项)
- protocol: simulator
device_prefixes: []
config:
seed: 2026
kafka:
bootstrap_servers: "10.20.0.10:9092"
topic_prefix: "iaop.ti-cl4" # 模板化 topic:{prefix}.{device_id}.points
batch_size: 500
@@ -0,0 +1,11 @@
device_id,point_id,name,unit,dataType,sampleRate,qualityCode,opcNode
CLF-01,CLF-01.TEMP,炉温,℃,float,1000,true,ns=2;s=CLF.Temp
CLF-01,CLF-01.PRES,炉压,kPa,float,1000,true,ns=2;s=CLF.Pres
CLF-01,CLF-01.FEED,进料量,t/h,float,1000,true,ns=2;s=CLF.Feed
CLF-02,CLF-02.TEMP,炉温2,℃,float,1000,true,ns=2;s=CLF2.Temp
CLF-02,CLF-02.RUN,运行状态,%,bool,1000,true,ns=2;s=CLF2.Run
S7-01,S7-01.PUMP_A,泵A频率,Hz,float,1000,true,DB100.0.0
S7-01,S7-01.PUMP_B,泵B频率,Hz,float,1000,true,DB100.4.0
W-01,W-01.WT,称重值,kg,float,1000,true,holding:40001
E-01,E-01.PWR,电表功率,kW,float,1000,true,holding:40010
E-01,E-01.KWH,电表累计,kWh,float,1000,true,holding:40012
1 device_id point_id name unit dataType sampleRate qualityCode opcNode
2 CLF-01 CLF-01.TEMP 炉温 ℃ float 1000 true ns=2;s=CLF.Temp
3 CLF-01 CLF-01.PRES 炉压 kPa float 1000 true ns=2;s=CLF.Pres
4 CLF-01 CLF-01.FEED 进料量 t/h float 1000 true ns=2;s=CLF.Feed
5 CLF-02 CLF-02.TEMP 炉温2 ℃ float 1000 true ns=2;s=CLF2.Temp
6 CLF-02 CLF-02.RUN 运行状态 % bool 1000 true ns=2;s=CLF2.Run
7 S7-01 S7-01.PUMP_A 泵A频率 Hz float 1000 true DB100.0.0
8 S7-01 S7-01.PUMP_B 泵B频率 Hz float 1000 true DB100.4.0
9 W-01 W-01.WT 称重值 kg float 1000 true holding:40001
10 E-01 E-01.PWR 电表功率 kW float 1000 true holding:40010
11 E-01 E-01.KWH 电表累计 kWh float 1000 true holding:40012