主题
时序与定时例程 4:定时循环做慢速统计(每 10 秒记一次峰值)
这一页只讲这一个例程。母页 b-02-timing 里留着例程 1,其余例程各自一页、在那一页的目录里点。
场景:记录最高/最低温度、统计累计流量这类事不需要每个扫描周期都做。放进定时循环(独立并行跑),既不拖慢主循环,也不用自己算时间。
软元件
| 软元件 | 作用 |
|---|---|
D100 | 当前温度 |
D410 | 历史最高温度 |
D411 | 历史最低温度 |
块图(照着拖即可)
对应的 ddc.json(点「生成 JSON」得到的就是它;也可存成 .ddc.json 导入)
json
{
"version": 1,
"name": "峰值保持",
"scan_ms": 200,
"lines": [],
"timed_loops": [
{
"scan_ms": 10000,
"lines": [
{
"op": "assign",
"target": {"op":"ref","device":"D","addr":410},
"expr": {
"op": "minmax",
"mode": "max",
"args": [{"op":"ref","device":"D","addr":410},{"op":"ref","device":"D","addr":100}]
}
},
{
"op": "assign",
"target": {"op":"ref","device":"D","addr":411},
"expr": {
"op": "minmax",
"mode": "min",
"args": [{"op":"ref","device":"D","addr":411},{"op":"ref","device":"D","addr":100}]
}
}
]
}
]
}要点
- 定时循环独立并行,和主循环互不等待:主循环跑实时逻辑,定时循环跑慢速统计。
- 周期单位秒(这里 10 秒),每个程序最多 3 个定时循环(加主循环共 4 股执行流)。
- "取最大"把自身作为一路输入就形成峰值保持;要清零就再赋值一次 0。
验证:把 D100 写成 80 → 10 秒内 D410 变成 80;再写 50 → D410 保持 80(峰值保持)、D411 变成 50。
注意事项
- 定时循环周期单位当成毫秒填(填 10000 想表示 10 秒):实际 10000 秒 ≈ 2.8 小时才跑一次。
- 超过 3 个定时循环会被校验拦下(报"定时循环最多 3 个")。
- 定时循环和主循环写同一个寄存器会互相顶:一个寄存器只让一方写。