主题
基础控制例程 6:手 / 自动切换(多路选择)
这一页只讲这一个例程。母页 b-01-basic-control 里留着例程 1,其余例程各自一页、在那一页的目录里点。
场景:自动时输出由 PI 调节给出,手动时由面板给定值决定;切换无扰动,且手动值不能越界。
软元件
| 软元件 | 作用 |
|---|---|
M200 | 手/自动(0 = 自动,1 = 手动) |
D100 | 自动值(PI 输出 0~100) |
D101 | 手动给定(0~100) |
D300 | 阀门开度输出 |
块图(照着拖即可)
对应的 ddc.json(点「生成 JSON」得到的就是它;也可存成 .ddc.json 导入)
json
{
"version": 1,
"name": "手自动切换",
"scan_ms": 200,
"lines": [
{
"op": "assign",
"target": {"op":"ref","device":"D","addr":300},
"expr": {
"op": "limit",
"args": [
{
"op": "mux",
"args": [
{"op":"ref","device":"M","addr":200},
{"op":"ref","device":"D","addr":100},
{"op":"ref","device":"D","addr":101},
{"op":"const","value":0},
{"op":"const","value":0},
{"op":"const","value":0},
{"op":"const","value":0},
{"op":"const","value":0},
{"op":"const","value":0}
]
},
{"op":"const","value":0},
{"op":"const","value":100}
]
}
}
]
}要点
- 多路选择用因子(0~7)从最多 8 路输入里选一路;这里只用 0 和 1 两路就够了。
- 外面再套一层限值运算:手动给定填错成 150 也不会把阀门顶到 150%,这是手自动模式必须加的保护。
- 比起用「如果…否则」写两条分支,多路选择只占一个块,切换瞬间就是换一个数,天然无扰动。
验证:M200 = 0 时改 D100 → D300 跟着变;M200 = 1 时改 D101 → D300 跟着变;把 D101 写成 200 → D300 被夹在 100。
注意事项
- 因子只接了 0 和 1,若被写成 2 就会取到没接线的那一路——生成器会把它补成常量 0,行为是"输出 0"而不是"保持"。
- 手动值没有限幅:现场输错一个数字,阀门/变频器直接满量程。
- 自动输出来自 PI 时,手自动切换会让 PI 积分项继续累积(切回自动可能突变),需要无扰切换就把 PI 的使能在手动时断开。