主题
综合场景例程 5:从站掉线保护(第三方数据参与控制时的必备保护)
这一页只讲这一个例程。母页 b-05-integrated-scenarios 里留着例程 1,其余例程各自一页、在那一页的目录里点。
场景:温度、电量等关键数据来自第三方从站(先在 DTU 功能里配好采集、绑定到 D 寄存器)。从站掉线时 D 里留的是最后一次的值,拿它继续控制等于闭着眼睛开车。
软元件
| 软元件 | 作用 |
|---|---|
D701 | 从站通信状态字所在的 D |
M700 | 通信异常标志 |
M500 | 运行需求 |
Y0 | 设备输出 |
L2 | 通信指示灯 |
块图(照着拖即可)
对应的 ddc.json(点「生成 JSON」得到的就是它;也可存成 .ddc.json 导入)
json
{
"version": 1,
"name": "从站掉线保护",
"scan_ms": 200,
"lines": [
{
"op": "if",
"cond": {
"op": "cmp",
"cmp": "!=",
"args": [{"op":"ref","device":"D","addr":701},{"op":"const","value":0}]
},
"then": [
{
"op": "assign",
"target": {"op":"ref","device":"M","addr":700},
"expr": {"op":"const","value":1}
}
],
"else": [
{
"op": "assign",
"target": {"op":"ref","device":"M","addr":700},
"expr": {"op":"const","value":0}
}
]
},
{
"op": "assign",
"target": {"op":"ref","device":"Y","addr":0},
"expr": {
"op": "and",
"args": [
{"op":"ref","device":"M","addr":500},
{"op":"not","args":[{"op":"ref","device":"M","addr":700}]}
]
}
},
{
"op": "assign",
"target": {"op":"ref","device":"L","addr":2},
"expr": {"op":"ref","device":"M","addr":700}
}
]
}要点
- 「取通信变量 Dn」读的是 DTU 采集绑定的 D;「从站通信状态 Dn」读的是该从站的状态字,两者配套使用。
- 阈值以实际读到的为准:先用上位机读一次该状态字(正常时多少、掉线时多少),再把比较块的阈值改成那个数。本例写
≠ 0是示意,请按实测值改。 - 每个参与控制的从站单独判一次,别共用一个"总通信标志"——一个从站掉线不该把所有设备都停掉。
验证:正常时 M700 = 0、Y0 随 M500 动作;拔掉从站通信线(或在 DTU 里停掉该从站)→ 状态字变化 → M700 = 1、Y0 = 0、L2 亮。
注意事项
- 不判掉线:从站掉线后 D 里是最后一次的值(比如 25℃),程序一直"正常"运行——用第三方数据做控制时最危险的疏漏。
- 只在画面上报警、输出不停:报警没人看就等于没有。
- 阈值照抄本页:状态字取值随 DTU 配置而变,先读一次真实值再填。