主题
综合场景例程
5 个完整的小工程:风机盘管、恒压供水、水箱液位、新风机组、从站掉线保护。 每段都是前面几页例程的组合,照着拖完就是一套能交付的逻辑。 屏(HMI)画面的做法见 2.6 显示模块,那里有从零做一页的完整步骤和样例 JSON。
返回 例程总览。
这一页的主角
综合程序的设计习惯:① 先算标志位再算输出——"要不要运行"(启停控制)和"怎么运行"(档位、开度)分开; ② 停机条件一律并进「停止」孔(用逻辑或),并且停止优先——这是安全侧的默认值。
例程 1:风机盘管(PI 调水阀 + 风机三速)
场景:房间温控的经典组合:水阀开度由 PI 连续调节,风机按开度分高/中/低三档,风机和阀门联锁。
软元件
| 软元件 | 作用 |
|---|---|
D220 | 系统运行 |
D110 | 实测温度 |
D150 | 设定值 |
D230 | 水阀开度 |
M400/M401/M402 | 高 / 中 / 低档判定 |
Y0 | 风机 |
Y1/Y2/Y3 | 高速 / 中速 / 低速 |
块图(照着拖即可)
对应的 ddc.json(点「生成 JSON」得到的就是它;也可存成 .ddc.json 导入)
json
{
"version": 1,
"name": "风机盘管",
"scan_ms": 500,
"lines": [
{
"op": "assign",
"target": {"op":"ref","device":"D","addr":210},
"expr": {
"op": "pi",
"id": "pi_fcu",
"args": [
{"op":"ref","device":"D","addr":220},
{"op":"const","value":1},
{"op":"ref","device":"D","addr":110},
{"op":"ref","device":"D","addr":150},
{"op":"const","value":0.5},
{"op":"const","value":10},
{"op":"const","value":128}
]
}
},
{
"op": "assign",
"target": {"op":"ref","device":"D","addr":230},
"expr": {
"op": "limit",
"args": [
{"op":"ref","device":"D","addr":210},
{"op":"const","value":0},
{"op":"const","value":100}
]
}
},
{
"op": "assign",
"target": {"op":"ref","device":"M","addr":400},
"expr": {
"op": "cmp",
"cmp": ">",
"args": [{"op":"ref","device":"D","addr":230},{"op":"const","value":60}]
}
},
{
"op": "assign",
"target": {"op":"ref","device":"M","addr":401},
"expr": {
"op": "cmp",
"cmp": ">",
"args": [{"op":"ref","device":"D","addr":230},{"op":"const","value":25}]
}
},
{
"op": "assign",
"target": {"op":"ref","device":"M","addr":402},
"expr": {
"op": "cmp",
"cmp": ">",
"args": [{"op":"ref","device":"D","addr":230},{"op":"const","value":10}]
}
},
{
"op": "assign",
"target": {"op":"ref","device":"Y","addr":1},
"expr": {"op":"ref","device":"M","addr":400}
},
{
"op": "assign",
"target": {"op":"ref","device":"Y","addr":2},
"expr": {
"op": "and",
"args": [
{"op":"ref","device":"M","addr":401},
{"op":"not","args":[{"op":"ref","device":"M","addr":400}]}
]
}
},
{
"op": "assign",
"target": {"op":"ref","device":"Y","addr":3},
"expr": {
"op": "and",
"args": [
{"op":"ref","device":"M","addr":402},
{"op":"not","args":[{"op":"ref","device":"M","addr":401}]}
]
}
},
{
"op": "assign",
"target": {"op":"ref","device":"Y","addr":0},
"expr": {
"op": "and",
"args": [{"op":"ref","device":"D","addr":220},{"op":"ref","device":"M","addr":402}]
}
}
]
}要点
- 三档必须互斥:
Y2 = 够中档 且 非高档、Y3 = 够低档 且 非中档——任何开度只吸合一档,不会两档同时吸合烧电机。 Y0 ← D220 且 M402:开度超过 10% 才送风,避免"阀没开、风机干吹"。- 制冷 / 制热切换要改 PI 的正比例,设定值和三速阈值也要换一套。
验证:把 D230 写成 70 → Y1 = 1、Y2 = Y3 = 0;写 40 → 只有 Y2 = 1;写 15 → 只有 Y3 = 1;写 5 → 三档全 0、Y0 = 0。
注意事项
- 三档用三个独立比较直接输出:开度 70 时三档同时吸合,风机烧毁。
- 风机和阀门没联锁:阀全关了风机还在转,房间只吹风不制冷。
- 扫描周期太快(如 100ms)会让三档在阈值附近来回切;盘管这类慢对象 500ms~1s 足够。
其余例程(各自一页)
- 综合场景例程 2:恒压供水(一用一备轮换 + 压力回差)
- 综合场景例程 3:水箱液位(双泵 + 高低报警 + 报警锁存)
- 综合场景例程 4:新风机组(时段启停 + 送风 PI + 防冻 + 滤网堵塞)
- 综合场景例程 5:从站掉线保护(第三方数据参与控制时的必备保护)
相关文档
- B1 基础控制 / B2 时序与定时 / B3 模拟量与工程量 / B4 HVAC 暖通
- 2.6 显示模块(屏页面细节、菜单行与枚举列表)
- 3.1 下发与设备端运行(与梯形图 / Lua 的寄存器约定)
- DTU 配置式编程 · 串口设备采集(从站数据怎么绑到 D)