主题
模拟量与工程量例程 4:白天 / 夜间 / 周末三套设定值(工况切换)
这一页只讲这一个例程。母页 b-03-analog-scaling 里留着例程 1,其余例程各自一页、在那一页的目录里点。
场景:同一个房间,上班 26℃、夜间 29℃、周末 28℃。设定值随工况切换,不用改程序。
软元件
| 软元件 | 作用 |
|---|---|
系统时钟·时 / ·周 | 当前小时 / 星期(周日 = 1) |
D160 | 工况号(0 白天 / 1 夜间 / 2 周末) |
D150 | 当前生效的温度设定值 |
块图(照着拖即可)
对应的 ddc.json(点「生成 JSON」得到的就是它;也可存成 .ddc.json 导入)
json
{
"version": 1,
"name": "三套设定值",
"scan_ms": 200,
"lines": [
{
"op": "if",
"cond": {
"op": "and",
"args": [
{
"op": "and",
"args": [
{
"op": "cmp",
"cmp": ">=",
"args": [{"op":"clock","part":"week"},{"op":"const","value":2}]
},
{
"op": "cmp",
"cmp": "<=",
"args": [{"op":"clock","part":"week"},{"op":"const","value":6}]
}
]
},
{
"op": "and",
"args": [
{
"op": "cmp",
"cmp": ">=",
"args": [{"op":"clock","part":"hour"},{"op":"const","value":8}]
},
{
"op": "cmp",
"cmp": "<",
"args": [{"op":"clock","part":"hour"},{"op":"const","value":18}]
}
]
}
]
},
"then": [
{
"op": "assign",
"target": {"op":"ref","device":"D","addr":160},
"expr": {"op":"const","value":0}
}
],
"else": [
{
"op": "assign",
"target": {"op":"ref","device":"D","addr":160},
"expr": {"op":"const","value":2}
}
],
"elseif": [
{
"cond": {
"op": "and",
"args": [
{
"op": "and",
"args": [
{
"op": "cmp",
"cmp": ">=",
"args": [{"op":"clock","part":"week"},{"op":"const","value":2}]
},
{
"op": "cmp",
"cmp": "<=",
"args": [{"op":"clock","part":"week"},{"op":"const","value":6}]
}
]
},
{
"op": "or",
"args": [
{
"op": "cmp",
"cmp": ">=",
"args": [{"op":"clock","part":"hour"},{"op":"const","value":18}]
},
{
"op": "cmp",
"cmp": "<",
"args": [{"op":"clock","part":"hour"},{"op":"const","value":8}]
}
]
}
]
},
"then": [
{
"op": "assign",
"target": {"op":"ref","device":"D","addr":160},
"expr": {"op":"const","value":1}
}
]
}
]
},
{
"op": "assign",
"target": {"op":"ref","device":"D","addr":150},
"expr": {
"op": "mux",
"args": [
{"op":"ref","device":"D","addr":160},
{"op":"const","value":26},
{"op":"const","value":29},
{"op":"const","value":28},
{"op":"const","value":0},
{"op":"const","value":0},
{"op":"const","value":0},
{"op":"const","value":0},
{"op":"const","value":0}
]
}
}
]
}要点
- 工况号先算出来(D160)再交给多路选择取设定值——判断和取值分开,改设定值不用动判断逻辑。
- 多路选择的输入孔可以接常量,也可以接寄存器(让上位机或云端在线改设定值)。
- 三条分支用「否则」兜底,保证任何时刻 D160 都有确定值。
验证:设备时间周二 9:00 → D160 = 0、D150 = 26;20:00 → D160 = 1、D150 = 29;周日 10:00 → D160 = 2、D150 = 28。
注意事项
- 因子取到没接线的那一路:生成器会把空输入补成常量 0,行为是"输出 0"而不是"保持"。不用的路要么接默认值,要么保证因子不越界。
- 三条工况条件不互斥也不覆盖(比如漏了周末夜间):用「否则」兜底最简单。