主题
基础控制例程 2:带回差的温度开关
这一页只讲这一个例程。母页 b-01-basic-control 里留着例程 1,其余例程各自一页、在那一页的目录里点。
场景:温度高了开风扇、低了关,但不能在阈值附近来回启停——用回差(30 开 / 20 关)解决。所有开关量温控的必备设计。
软元件
| 软元件 | 作用 |
|---|---|
D100 | 实测温度(已换算成工程量,见 B3 例程 1) |
D200 | 风扇输出(1 = 开) |
块图(照着拖即可)
对应的 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":100},{"op":"const","value":30}]
},
"then": [
{
"op": "assign",
"target": {"op":"ref","device":"D","addr":200},
"expr": {"op":"const","value":1}
}
],
"else": [
{
"op": "assign",
"target": {"op":"ref","device":"D","addr":200},
"expr": {"op":"const","value":0}
}
],
"elseif": [
{
"cond": {
"op": "cmp",
"cmp": "<",
"args": [{"op":"ref","device":"D","addr":100},{"op":"const","value":20}]
},
"then": []
}
]
}
]
}要点
- 没有「否则」分支就是保持:温度落在 20~30 之间时两个条件都不成立,这一轮什么都不做,D200 保持上一轮的值——这正是回差的来源。
- 回差宽度(这里 10℃)按设备允许的通断频率定:压缩机、电磁阀要留得更大,普通风机 1~2℃ 也够。
- 阈值必须和 D100 的单位一致:如果 D100 还是 4~20mA 的原始读数(如 4000),先做线性变换再比较。
验证:D100 写 35 → D200 = 1;改 25 → D200 保持 1;改 15 → D200 = 0;再改 25 → 保持 0。
注意事项
- 为省事先写一行
D200 ← (D100 ≥ 30):没有回差,温度在临界点抖动时输出每秒通断好几次,几天就烧触点。 - 两个阈值写反(开 20 / 关 30):变成"低于 20 才开、高于 30 才关",逻辑整个反过来。
- 温度带小数(如 26.5)时比较要留够余量,别把开/关阈值设成同一个数。