{
  "version": 2,
  "polls": [
    {
      "name": "Window 1",
      "fc": 3,
      "addr": 0,
      "qty": 20,
      "slaveId": 1,
      "interval": 1000,
      "disabled": false,
      "chart": {
        "paused": false,
        "crosshair": false,
        "cursorX": null,
        "dragging": false,
        "layout": null,
        "data": []
      },
      "log": {
        "active": false,
        "buffer": [],
        "startTime": null,
        "count": 0
      },
      "chartReg": 0,
      "chartName": "Reg 0",
      "logFile": "modbus_log.csv"
    }
  ],
  "activePoll": 0,
  "condColors": {},
  "scaling": {},
  "valueNames": {},
  "chartSeries": [],
  "slaveBlocks": [],
  "dashTheme": "modern",
  "dashFx": true,
  "dashBgColor": "#0d1117",
  "dashPages": [
    {
      "id": 1,
      "name": "S7 PLC",
      "elements": [
        {
          "id": 2,
          "type": "pid",
          "x": 20,
          "y": 20,
          "value": 0,
          "label": "Supply temperature loop (DB1)",
          "unit": "°C",
          "decimals": 1,
          "scale": 1,
          "outScale": 1,
          "autoValue": 1,
          "outUnit": "%",
          "items": [
            {
              "role": "pv",
              "name": "PV",
              "sourceType": "tag",
              "tagName": "Loop_PV",
              "value": 23.955448150634766
            },
            {
              "role": "sp",
              "name": "SP",
              "sourceType": "tag",
              "tagName": "Loop_SP",
              "value": 24
            },
            {
              "role": "out",
              "name": "OUT",
              "sourceType": "tag",
              "tagName": "Loop_OUT",
              "value": 44.84079360961914
            },
            {
              "role": "mode",
              "name": "MODE",
              "sourceType": "tag",
              "tagName": "Loop_Auto",
              "value": 1
            },
            {
              "role": "man",
              "name": "MAN"
            },
            {
              "role": "p",
              "name": "P"
            },
            {
              "role": "i",
              "name": "I"
            },
            {
              "role": "d",
              "name": "D"
            }
          ],
          "w": 400,
          "h": 250
        },
        {
          "id": 3,
          "type": "multistate",
          "x": 440,
          "y": 20,
          "value": 0,
          "label": "PLC heartbeat (M0.0)",
          "regType": "holdingRegisters",
          "states": "0=Off:#8892a4,1=On:#00d4aa",
          "w": 200,
          "h": 70,
          "sourceType": "tag",
          "tagName": "Heartbeat"
        },
        {
          "id": 4,
          "type": "text",
          "x": 660,
          "y": 20,
          "value": 172,
          "label": "Seconds (MW2)",
          "regType": "holdingRegisters",
          "unit": "",
          "decimals": 0,
          "fontSize": 28,
          "color": "#00d4aa",
          "w": 200,
          "h": 70,
          "sourceType": "tag",
          "tagName": "Seconds"
        },
        {
          "id": 5,
          "type": "text",
          "x": 440,
          "y": 105,
          "value": 23.955448150634766,
          "label": "Process value (DB1,REAL0)",
          "regType": "holdingRegisters",
          "unit": "°C",
          "decimals": 2,
          "fontSize": 28,
          "color": "#00d4aa",
          "w": 200,
          "h": 75,
          "sourceType": "tag",
          "tagName": "Loop_PV"
        },
        {
          "id": 6,
          "type": "text",
          "x": 660,
          "y": 105,
          "value": 24,
          "label": "Setpoint (DB1,REAL4)",
          "regType": "holdingRegisters",
          "unit": "°C",
          "decimals": 1,
          "fontSize": 28,
          "color": "#00d4aa",
          "w": 200,
          "h": 75,
          "sourceType": "tag",
          "tagName": "Loop_SP"
        },
        {
          "id": 7,
          "type": "text",
          "x": 440,
          "y": 195,
          "value": 44.84079360961914,
          "label": "Output (DB1,REAL8)",
          "regType": "holdingRegisters",
          "unit": "%",
          "decimals": 1,
          "fontSize": 28,
          "color": "#00d4aa",
          "w": 200,
          "h": 75,
          "sourceType": "tag",
          "tagName": "Loop_OUT"
        },
        {
          "id": 8,
          "type": "text",
          "x": 660,
          "y": 195,
          "value": 3.6660945415496826,
          "label": "Outdoor (DB1,REAL16)",
          "regType": "holdingRegisters",
          "unit": "°C",
          "decimals": 1,
          "fontSize": 28,
          "color": "#00d4aa",
          "w": 200,
          "h": 75,
          "sourceType": "tag",
          "tagName": "Outdoor_Temp"
        },
        {
          "id": 9,
          "type": "multitend",
          "x": 20,
          "y": 290,
          "value": 0,
          "label": "PV and SP read over PUT/GET (DB1) - setpoint step written over PUT",
          "items": [
            {
              "name": "PV (DB1.DBD0)",
              "sourceType": "tag",
              "tagName": "Loop_PV",
              "color": "#00d4aa",
              "value": 23.955448150634766
            },
            {
              "name": "SP (DB1.DBD4)",
              "sourceType": "tag",
              "tagName": "Loop_SP",
              "color": "#f0c040",
              "value": 24
            }
          ],
          "maxPoints": 1200,
          "decimals": 1,
          "w": 840,
          "h": 240,
          "sampleMs": 1000
        }
      ]
    }
  ],
  "tags": [
    {
      "name": "Loop_PV",
      "type": "s7",
      "slaveId": 1,
      "regType": "holdingRegisters",
      "address": 0,
      "dataType": "int16",
      "wordOrder": "big",
      "value": 23.955448150634766,
      "_read": true,
      "description": "process value",
      "s7Device": "PLC1",
      "s7Address": "DB1,REAL0",
      "scale": 1,
      "offset": 0,
      "_pollAt": 1792309543297,
      "_readAt": 1792309543297,
      "_pollGap": 510.16088899916633
    },
    {
      "name": "Loop_SP",
      "type": "s7",
      "slaveId": 1,
      "regType": "holdingRegisters",
      "address": 0,
      "dataType": "int16",
      "wordOrder": "big",
      "value": 24,
      "_read": true,
      "description": "setpoint (written from the faceplate)",
      "s7Device": "PLC1",
      "s7Address": "DB1,REAL4",
      "scale": 1,
      "offset": 0,
      "_pollAt": 1792309543297,
      "_readAt": 1792309543297,
      "_pollGap": 510.16088899916633
    },
    {
      "name": "Loop_OUT",
      "type": "s7",
      "slaveId": 1,
      "regType": "holdingRegisters",
      "address": 0,
      "dataType": "int16",
      "wordOrder": "big",
      "value": 44.84079360961914,
      "_read": true,
      "description": "controller output %",
      "s7Device": "PLC1",
      "s7Address": "DB1,REAL8",
      "scale": 1,
      "offset": 0,
      "_pollAt": 1792309543297,
      "_readAt": 1792309543297,
      "_pollGap": 510.16088899916633
    },
    {
      "name": "Loop_Auto",
      "type": "s7",
      "slaveId": 1,
      "regType": "holdingRegisters",
      "address": 0,
      "dataType": "int16",
      "wordOrder": "big",
      "value": 1,
      "_read": true,
      "description": "1 = auto, 0 = manual",
      "s7Device": "PLC1",
      "s7Address": "DB1,X12.0",
      "scale": 1,
      "offset": 0,
      "_pollAt": 1792309543297,
      "_readAt": 1792309543297,
      "_pollGap": 510.16088899916633
    },
    {
      "name": "Cycle_Counter",
      "type": "s7",
      "slaveId": 1,
      "regType": "holdingRegisters",
      "address": 0,
      "dataType": "int16",
      "wordOrder": "big",
      "value": 172,
      "_read": true,
      "description": "PLC cycle counter",
      "s7Device": "PLC1",
      "s7Address": "DB1,INT14",
      "scale": 1,
      "offset": 0,
      "_pollAt": 1792309543297,
      "_readAt": 1792309543297,
      "_pollGap": 510.16088899916633
    },
    {
      "name": "Outdoor_Temp",
      "type": "s7",
      "slaveId": 1,
      "regType": "holdingRegisters",
      "address": 0,
      "dataType": "int16",
      "wordOrder": "big",
      "value": 3.6660945415496826,
      "_read": true,
      "description": "outdoor temperature",
      "s7Device": "PLC1",
      "s7Address": "DB1,REAL16",
      "scale": 1,
      "offset": 0,
      "_pollAt": 1792309543297,
      "_readAt": 1792309543297,
      "_pollGap": 510.16088899916633
    },
    {
      "name": "Heartbeat",
      "type": "s7",
      "slaveId": 1,
      "regType": "holdingRegisters",
      "address": 0,
      "dataType": "int16",
      "wordOrder": "big",
      "value": 0,
      "_read": true,
      "description": "toggles every second",
      "s7Device": "PLC1",
      "s7Address": "M0.0",
      "scale": 1,
      "offset": 0,
      "_pollAt": 1792309543297,
      "_readAt": 1792309543297,
      "_pollGap": 510.16088899916633
    },
    {
      "name": "Seconds",
      "type": "s7",
      "slaveId": 1,
      "regType": "holdingRegisters",
      "address": 0,
      "dataType": "int16",
      "wordOrder": "big",
      "value": 172,
      "_read": true,
      "description": "counts seconds",
      "s7Device": "PLC1",
      "s7Address": "MW2",
      "scale": 1,
      "offset": 0,
      "_pollAt": 1792309543297,
      "_readAt": 1792309543297,
      "_pollGap": 510.16088899916633
    }
  ],
  "script": "",
  "scriptInterval": "1000",
  "historianLogging": {
    "registers": [],
    "tags": []
  },
  "saved": "2026-10-18T07:45:44.291Z"
}
