Skip to content

模拟量与工程量例程 4:白天 / 夜间 / 周末三套设定值(工况切换) ​

这一页只讲这一个例程。母页 b-03-analog-scaling 里留着例程 1,其余例程各自一页、在那一页的目录里点。

场景:同一个房间,上班 26℃、夜间 29℃、周末 28℃。设定值随工况切换,不用改程序。

软元件

软元件作用
系统时钟·时 / ·周当前小时 / 星期(周日 = 1)
D160工况号(0 白天 / 1 夜间 / 2 周末)
D150当前生效的温度设定值

块图(照着拖即可)

例程 4:白天 / 夜间 / 周末三套设定值(工况切换) 的块图

对应的 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"而不是"保持"。不用的路要么接默认值,要么保证因子不越界。
  • 三条工况条件不互斥也不覆盖(比如漏了周末夜间):用「否则」兜底最简单。

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