延迟与一致性从哪来
网关的工作是串行的:南向按轮询顺序逐个读取设备,北向按队列处理请求,因此每条数据都带有轮询周期加处理时间的延迟,点数越多这个周期越长。比延迟更要紧的是一致性:如果一个逻辑量由多个寄存器组成,就必须用一次多寄存器读取取回,否则在两次读取之间设备数值发生变化,就会得到一半新值一半旧值的组合,看起来像是数值剧烈跳变。缓存带来另一类问题:网关为了让上层读得更快常在本地缓存南向数据,缓存越深,上层看到的数据越旧,做联锁判断或统计计算前必须先明确数据的新鲜度。
基本信息
| 延迟来源 | 轮询周期、串行排队、处理与转发时间 |
|---|---|
| 放大因素 | 点数过多、刷新周期过短、串口速率低 |
| 一致性方法 | 多寄存器一次读回,避免分批读取 |
| 缓存影响 | 上层读到的是缓存值,新鲜度取决于轮询周期 |
| 时间戳 | 能标记采集时间时,应把新鲜度一并上报 |
| 抖动 | 总线竞争与设备响应波动造成的非均匀延迟 |
| 测量方法 | 用一个递增计数器观察端到端耗时 |
典型使用场景
- 联锁判断:必须知道数据的新鲜度,不能把缓存值当成实时值
- 事件顺序分析:延迟抖动会让先后顺序失真,需要时间戳辅助
- 统计报表:累计量必须原子读取,否则取值跨越两个周期会失真
- 报警延时评估:报警触发时间与现场实际时刻的差距需要量化
- 验收测试:用计数器测量端到端延迟,作为验收指标
- 性能优化:减少点数、合理分组、提高串口速率
延迟来源与优化
| 来源 | 影响因素 | 优化方向 |
|---|---|---|
| 轮询周期 | 点数、串口速率、设备响应时间 | 分批轮询、提高速率、减少无效点 |
| 串行排队 | 并发请求数量 | 合并请求、限制并发 |
| 处理与转发 | 网关处理器能力 | 选择性能匹配的型号 |
| 缓存深度 | 网关缓存策略 | 缩短缓存时间或标记新鲜度 |
| 协议转换开销 | 映射复杂度与点数 | 精简映射,去掉无用点 |
| 抖动 | 总线竞争与重试 | 降低总线负载,减少重试 |
端到端延迟测量
端到端延迟测量
# 1 在设备侧让一个寄存器按固定节奏递增(或使用已有的计数寄存器)
# 2 在上层连续读取该寄存器并记录时间戳
# 3 用相邻两次变化的时间差估算采集周期
# 4 用上层时间戳减去设备侧计数推算处理与转发开销
# 5 在不同负载下重复测量,记录延迟与抖动范围
# 提醒:提高轮询频率不能突破总线带宽与设备响应时间,先算带宽再调频把多个寄存器的值分开读取再拼装,是数据一致性最常见的破坏方式;对同一逻辑量应始终使用一次多寄存器读取。
在联锁或安全相关判断中使用网关缓存数据,必须同时判断数据新鲜度,否则响应会因过期数据而延迟。