主题
采集调度
采集引擎的目标:慢设备不拖累快设备,死设备不占用总线,断线数据不冒充新鲜。
每设备独立调度
每个设备有自己的采集循环,互不阻塞:
- 一条通道下挂 20 台设备,最慢的那台不会拖住其他 19 台
- 采集任务跑在有界 worker 池里(
EDGE_POLL_WORKERS,默认4×CPU),goroutine 数与设备数解耦——设备再多,资源占用有上界
点位分组采集
同一产品下按属性分组配不同周期:温度 1s、电量 60s、铭牌 1h。周期按组调度,不会为读一个铭牌把 1s 的温度也读一遍。
批读合并
连续寄存器自动合并成块读:20 个连续点位从 20 次往返降到 3 次。串口(RS485)场景下这是能不能用与好不好用的区别——总线一问一答的延迟被合并摊薄。
熔断退避
设备连续失败后进入指数退避:失败次数越多,重试间隔越长,死设备不再每周期占用总线与刷日志。恢复通信后自动回到正常周期。
下行控制
rw 点位支持写:界面设备详情页直接下发,规则链节点(如 x/opcuaWrite、modbus 写)按点位配置组装写入。写路径与读路径同源,缩放语义在协议层对齐(OPC UA 写入不应用 scale/offset,与上游驱动语义一致,避免配置出「看似生效实则无效」的缩放参数)。
内部事件
除设备数据外,以下内部事件同样以消息形式进入规则链,可参与联动与上报:
- 告警产生 / 恢复
- 设备 / 通道状态变化
- 网关健康事件(北向断连、看门狗动作等)