主题
基础控制例程 5:多条件联动(与 / 或 / 非)
这一页只讲这一个例程。母页 b-01-basic-control 里留着例程 1,其余例程各自一页、在那一页的目录里点。
场景:本地或远程任一处都能启动,任一故障都要停机,故障汇总成一个"总故障"指示。与或非是每个程序都会用到的胶水。
软元件
| 软元件 | 作用 |
|---|---|
M0 | 本地启动命令 |
M1 | 远程(云端 / 触摸屏)启动命令 |
M2 | 1 号设备故障 |
M3 | 2 号设备故障 |
Y0 | 设备 |
Y20 | 总故障指示 |
块图(照着拖即可)
对应的 ddc.json(点「生成 JSON」得到的就是它;也可存成 .ddc.json 导入)
json
{
"version": 1,
"name": "多条件联动",
"scan_ms": 200,
"lines": [
{
"op": "assign",
"target": {"op":"ref","device":"Y","addr":0},
"expr": {
"op": "and",
"args": [
{
"op": "or",
"args": [{"op":"ref","device":"M","addr":0},{"op":"ref","device":"M","addr":1}]
},
{"op":"not","args":[{"op":"ref","device":"M","addr":2}]}
]
}
},
{
"op": "assign",
"target": {"op":"ref","device":"Y","addr":20},
"expr": {"op":"or","args":[{"op":"ref","device":"M","addr":2},{"op":"ref","device":"M","addr":3}]}
}
]
}要点
- 或 = 任一满足(启动命令),与 = 全部满足(要运行:有命令且无故障),非 = 取反(故障 1 → 允许 0)。
- 停机条件多于一个时继续往「或」里并,或再套一层:不要把所有条件堆在一行里,看不清也难改。
- 汇总指示(总故障、总运行)单独用一条赋值算出来,屏和云端都读它,避免各处重复判断。
验证:M0 或 M1 任一为 1 且 M2 = 0 → Y0 = 1;M2 置 1 → Y0 = 0 且 Y20 = 1。
注意事项
- 嵌套超过 3 层时「生成 JSON」可能报「程序嵌套太深」——拆成几条赋值,先算中间结果再合并。
- 把故障信号定义成"正常=1"容易绕晕:统一约定 1 = 故障,要用"无故障"的地方再套「非」。
- 远程启动命令来自云端时,要确认通信中断时的默认值(见 B5 例程 5),别让一个残留的 1 一直开着设备。