Skip to content

综合场景例程 ​

5 个完整的小工程:风机盘管、恒压供水、水箱液位、新风机组、从站掉线保护。 每段都是前面几页例程的组合,照着拖完就是一套能交付的逻辑。 屏(HMI)画面的做法见 2.6 显示模块,那里有从零做一页的完整步骤和样例 JSON。

返回 例程总览。

这一页的主角

综合程序的设计习惯:① 先算标志位再算输出——"要不要运行"(启停控制)和"怎么运行"(档位、开度)分开; ② 停机条件一律并进「停止」孔(用逻辑或),并且停止优先——这是安全侧的默认值。

例程 1:风机盘管(PI 调水阀 + 风机三速) ​

场景:房间温控的经典组合:水阀开度由 PI 连续调节,风机按开度分高/中/低三档,风机和阀门联锁。

软元件

软元件作用
D220系统运行
D110实测温度
D150设定值
D230水阀开度
M400/M401/M402高 / 中 / 低档判定
Y0风机
Y1/Y2/Y3高速 / 中速 / 低速

块图(照着拖即可)

例程 1:风机盘管(PI 调水阀 + 风机三速) 的块图

对应的 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 足够。

其余例程(各自一页) ​


相关文档 ​

LPPLC 工业物联网云平台 · 软硬件与云平台全栈自研