Trying to figure out modbus

I am trying to figure out how to move forward from where I am at. I can get the modbus registers when I click timestamp. I can not tell exactly which ones are which, these ones should all be read.
Other modbus setups I have dealt with you have to select your read or write, or holding registers.....
I also am trying to get it to read the modbus on a normal interval, not only when I click the timestamp.

One more thing it I need to link the modbus to the ui. I have not been able to figure out how to link a certain value in the array to the UI.

Does anyone have any words of wisdom to point me in the right direction?

Thank you in advance. Here is a screen shot of the flow that I grabbed out of the examples.

[][
    {
        "id": "652f4e57.e3d538",
        "type": "tab",
        "label": "Modbus Flex Suite",
        "disabled": false,
        "info": ""
    },
    {
        "id": "a3b5157.5b448e8",
        "type": "catch",
        "z": "652f4e57.e3d538",
        "name": "",
        "scope": null,
        "uncaught": false,
        "x": 760,
        "y": 60,
        "wires": [
            [
                "f4562026.e964e8",
                "527faaad.71bfb4",
                "3fcea88e.d87c4"
            ]
        ]
    },
    {
        "id": "f4562026.e964e8",
        "type": "debug",
        "z": "652f4e57.e3d538",
        "name": "",
        "active": false,
        "console": "false",
        "complete": "true",
        "x": 930,
        "y": 60,
        "wires": []
    },
    {
        "id": "15c06b93.b1bd24",
        "type": "modbus-queue-info",
        "z": "652f4e57.e3d538",
        "name": "Modbus Local Read Client Queue",
        "topic": "",
        "unitid": "1",
        "queueReadIntervalTime": "1000",
        "lowLowLevel": 25,
        "lowLevel": 75,
        "highLevel": 150,
        "highHighLevel": 300,
        "server": "fa873ff5.42afa",
        "errorOnHighLevel": false,
        "showStatusActivities": false,
        "updateOnAllQueueChanges": false,
        "updateOnAllUnitQueues": false,
        "x": 1520,
        "y": 120,
        "wires": [
            [
                "414c8e91.3579"
            ]
        ]
    },
    {
        "id": "b6ec7b66.431b9",
        "type": "function",
        "z": "652f4e57.e3d538",
        "name": "reset on High",
        "func": "if(\"high level reached\" === msg.state) {\n    msg.resetQueue = true;\n}\nreturn msg;",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1230,
        "y": 100,
        "wires": [
            [
                "15c06b93.b1bd24"
            ]
        ]
    },
    {
        "id": "6a69f701.a84ee",
        "type": "function",
        "z": "652f4e57.e3d538",
        "name": "reset on HighHigh",
        "func": "if(\"high high level reached\" === msg.state) {\n    msg.resetQueue = true;\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 1250,
        "y": 140,
        "wires": [
            [
                "15c06b93.b1bd24"
            ]
        ]
    },
    {
        "id": "414c8e91.3579",
        "type": "debug",
        "z": "652f4e57.e3d538",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 1730,
        "y": 120,
        "wires": []
    },
    {
        "id": "527faaad.71bfb4",
        "type": "switch",
        "z": "652f4e57.e3d538",
        "name": "Modbus Local Read Client",
        "property": "modbusClientName",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "Modbus Local Read Client",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 1000,
        "y": 120,
        "wires": [
            [
                "6a69f701.a84ee",
                "b6ec7b66.431b9"
            ]
        ]
    },
    {
        "id": "9f2fea52.eaa4a8",
        "type": "modbus-queue-info",
        "z": "652f4e57.e3d538",
        "name": "Modbus Local Write Client Queue",
        "topic": "",
        "unitid": "1",
        "queueReadIntervalTime": "1000",
        "lowLowLevel": 25,
        "lowLevel": 75,
        "highLevel": 150,
        "highHighLevel": 300,
        "server": "883d0976.8296d",
        "errorOnHighLevel": false,
        "showStatusActivities": false,
        "updateOnAllQueueChanges": false,
        "updateOnAllUnitQueues": false,
        "x": 1520,
        "y": 200,
        "wires": [
            [
                "c4986456.111ab8"
            ]
        ]
    },
    {
        "id": "4e72b028.97c058",
        "type": "function",
        "z": "652f4e57.e3d538",
        "name": "reset on High",
        "func": "if(\"high level reached\" === msg.state) {\n    msg.resetQueue = true;\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 1230,
        "y": 180,
        "wires": [
            [
                "9f2fea52.eaa4a8"
            ]
        ]
    },
    {
        "id": "f7bed91f.92e3b",
        "type": "function",
        "z": "652f4e57.e3d538",
        "name": "reset on HighHigh",
        "func": "if(\"high high level reached\" === msg.state) {\n    msg.resetQueue = true;\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 1250,
        "y": 220,
        "wires": [
            [
                "9f2fea52.eaa4a8"
            ]
        ]
    },
    {
        "id": "c4986456.111ab8",
        "type": "debug",
        "z": "652f4e57.e3d538",
        "name": "",
        "active": false,
        "console": "false",
        "complete": "true",
        "x": 1730,
        "y": 200,
        "wires": []
    },
    {
        "id": "3fcea88e.d87c4",
        "type": "switch",
        "z": "652f4e57.e3d538",
        "name": "Modbus Local Write Client",
        "property": "modbusClientName",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "Modbus Local Write Client",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "outputs": 1,
        "x": 1000,
        "y": 200,
        "wires": [
            [
                "f7bed91f.92e3b",
                "4e72b028.97c058"
            ]
        ]
    },
    {
        "id": "e14e3869.eb3a5",
        "type": "modbus-flex-getter",
        "z": "652f4e57.e3d538",
        "name": "Modbus Flexible Read",
        "showStatusActivities": false,
        "showErrors": true,
        "showWarnings": true,
        "logIOActivities": false,
        "server": "fa873ff5.42afa",
        "useIOFile": false,
        "ioFile": "",
        "useIOForPayload": false,
        "emptyMsgOnFail": false,
        "keepMsgProperties": false,
        "delayOnStart": false,
        "enableDeformedMessages": false,
        "startDelayTime": "",
        "x": 520,
        "y": 400,
        "wires": [
            [
                "ff88bff3.9f8ff",
                "6f54a366.20bebc",
                "ade16e02.cb6d18"
            ],
            [
                "f3f1b052.baf858",
                "fa9a0149.27dc7"
            ]
        ]
    },
    {
        "id": "2eea6853.20c25",
        "type": "inject",
        "z": "652f4e57.e3d538",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 140,
        "y": 340,
        "wires": [
            [
                "e38a7a4f.8c2f48"
            ]
        ]
    },
    {
        "id": "e38a7a4f.8c2f48",
        "type": "function",
        "z": "652f4e57.e3d538",
        "name": "FC1",
        "func": "msg.payload = { 'fc': 1, 'unitid': 1, 'address': 0 , 'quantity': 20 }\nreturn msg;",
        "outputs": 1,
        "timeout": "30",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 290,
        "y": 340,
        "wires": [
            [
                "e14e3869.eb3a5"
            ]
        ]
    },
    {
        "id": "ff88bff3.9f8ff",
        "type": "debug",
        "z": "652f4e57.e3d538",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 770,
        "y": 300,
        "wires": []
    },
    {
        "id": "f3f1b052.baf858",
        "type": "debug",
        "z": "652f4e57.e3d538",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 750,
        "y": 440,
        "wires": []
    },
    {
        "id": "fa9a0149.27dc7",
        "type": "modbus-response",
        "z": "652f4e57.e3d538",
        "name": "GARAGE READ",
        "registerShowMax": "20",
        "x": 780,
        "y": 480,
        "wires": []
    },
    {
        "id": "ade16e02.cb6d18",
        "type": "debug",
        "z": "652f4e57.e3d538",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 750,
        "y": 380,
        "wires": []
    },
    {
        "id": "6f54a366.20bebc",
        "type": "debug",
        "z": "652f4e57.e3d538",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "responseBuffer",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 800,
        "y": 340,
        "wires": []
    },
    {
        "id": "8ed3e78.4db9a98",
        "type": "inject",
        "z": "652f4e57.e3d538",
        "name": "",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 140,
        "y": 380,
        "wires": [
            [
                "de331f5c.d08768"
            ]
        ]
    },
    {
        "id": "de331f5c.d08768",
        "type": "function",
        "z": "652f4e57.e3d538",
        "name": "FC2",
        "func": "msg.payload = { 'fc': 2, 'unitid': 1, 'address': 0 , 'quantity': 8 }\nreturn msg;",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 290,
        "y": 380,
        "wires": [
            [
                "e14e3869.eb3a5"
            ]
        ]
    },
    {
        "id": "3c4efee.7c84982",
        "type": "inject",
        "z": "652f4e57.e3d538",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 140,
        "y": 420,
        "wires": [
            [
                "ef723150.a5224"
            ]
        ]
    },
    {
        "id": "ef723150.a5224",
        "type": "function",
        "z": "652f4e57.e3d538",
        "name": "FC3",
        "func": "msg.payload = { 'fc': 3, 'unitid': 1, 'address': 0 , 'quantity': 8 }\nreturn msg;",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 290,
        "y": 420,
        "wires": [
            [
                "e14e3869.eb3a5"
            ]
        ]
    },
    {
        "id": "f370e948.f19418",
        "type": "inject",
        "z": "652f4e57.e3d538",
        "name": "",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 140,
        "y": 460,
        "wires": [
            [
                "ac2f1711.01ace"
            ]
        ]
    },
    {
        "id": "ac2f1711.01ace",
        "type": "function",
        "z": "652f4e57.e3d538",
        "name": "FC4",
        "func": "msg.payload = { 'fc': 4, 'unitid': 1, 'address': 0 , 'quantity': 10 }\nreturn msg;",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 290,
        "y": 460,
        "wires": [
            [
                "e14e3869.eb3a5"
            ]
        ]
    },
    {
        "id": "ecb9178e.9920e",
        "type": "modbus-flex-write",
        "z": "652f4e57.e3d538",
        "name": "Modbus Flexible Write",
        "showStatusActivities": false,
        "showErrors": true,
        "showWarnings": true,
        "server": "883d0976.8296d",
        "emptyMsgOnFail": false,
        "keepMsgProperties": false,
        "delayOnStart": false,
        "startDelayTime": "",
        "x": 1540,
        "y": 380,
        "wires": [
            [
                "734d823a.4838ec",
                "4cdfafbd.8287c",
                "209706a5.f36202"
            ],
            [
                "9e2e2512.eec7a8",
                "46369521.c482b4"
            ]
        ]
    },
    {
        "id": "734d823a.4838ec",
        "type": "debug",
        "z": "652f4e57.e3d538",
        "name": "",
        "active": true,
        "console": "false",
        "complete": "payload",
        "x": 1770,
        "y": 280,
        "wires": []
    },
    {
        "id": "9e2e2512.eec7a8",
        "type": "debug",
        "z": "652f4e57.e3d538",
        "name": "",
        "active": false,
        "console": "false",
        "complete": "true",
        "x": 1750,
        "y": 420,
        "wires": []
    },
    {
        "id": "46369521.c482b4",
        "type": "modbus-response",
        "z": "652f4e57.e3d538",
        "name": "",
        "registerShowMax": 20,
        "x": 1790,
        "y": 460,
        "wires": []
    },
    {
        "id": "209706a5.f36202",
        "type": "debug",
        "z": "652f4e57.e3d538",
        "name": "",
        "active": false,
        "console": "false",
        "complete": "true",
        "x": 1750,
        "y": 360,
        "wires": []
    },
    {
        "id": "4cdfafbd.8287c",
        "type": "debug",
        "z": "652f4e57.e3d538",
        "name": "",
        "active": false,
        "console": "false",
        "complete": "responseBuffer",
        "x": 1800,
        "y": 320,
        "wires": []
    },
    {
        "id": "5520a02e.18592",
        "type": "inject",
        "z": "652f4e57.e3d538",
        "name": "",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 1100,
        "y": 320,
        "wires": [
            [
                "a51c8357.9ac0c"
            ]
        ]
    },
    {
        "id": "a51c8357.9ac0c",
        "type": "function",
        "z": "652f4e57.e3d538",
        "name": "Random 10 FC16",
        "func": "let values = [\n    Math.random() * (65000 - 1) + 1,\n    Math.random() * (65000 - 1) + 1,\n    Math.random() * (65000 - 1) + 1,\n    Math.random() * (65000 - 1) + 1,\n    Math.random() * (65000 - 1) + 1,\n    Math.random() * (65000 - 1) + 1,\n    Math.random() * (65000 - 1) + 1,\n    Math.random() * (65000 - 1) + 1,\n    Math.random() * (65000 - 1) + 1,\n    Math.random() * (65000 - 1) + 1\n]\nmsg.payload = { 'value': values, 'fc': 16, 'unitid': 1, 'address': 0 , 'quantity': 10 }\nreturn msg;",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1290,
        "y": 320,
        "wires": [
            [
                "ecb9178e.9920e"
            ]
        ]
    },
    {
        "id": "1200bb7e.c6d265",
        "type": "inject",
        "z": "652f4e57.e3d538",
        "name": "",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 1100,
        "y": 360,
        "wires": [
            [
                "a672caf3.0351"
            ]
        ]
    },
    {
        "id": "a672caf3.0351",
        "type": "function",
        "z": "652f4e57.e3d538",
        "name": "Random 10 FC15",
        "func": "let values = [\n    parseInt(Math.random() * (65000 - 1) + 1) % 2,\n    parseInt(Math.random() * (65000 - 1) + 1) % 2,\n    parseInt(Math.random() * (65000 - 1) + 1) % 2,\n    parseInt(Math.random() * (65000 - 1) + 1) % 2,\n    parseInt(Math.random() * (65000 - 1) + 1) % 2,\n    parseInt(Math.random() * (65000 - 1) + 1) % 2,\n    parseInt(Math.random() * (65000 - 1) + 1) % 2,\n    parseInt(Math.random() * (65000 - 1) + 1) % 2,\n    parseInt(Math.random() * (65000 - 1) + 1) % 2,\n    parseInt(Math.random() * (65000 - 1) + 1) % 2    \n]\nmsg.payload = { 'value': values, 'fc': 15, 'unitid': 1, 'address': 0 , 'quantity': 10 }\nreturn msg",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1290,
        "y": 360,
        "wires": [
            [
                "ecb9178e.9920e"
            ]
        ]
    },
    {
        "id": "cbdcdf7c.3fccf8",
        "type": "comment",
        "z": "652f4e57.e3d538",
        "name": "Flexible Read and Write",
        "info": "",
        "x": 160,
        "y": 280,
        "wires": []
    },
    {
        "id": "c1b52524.e78b4",
        "type": "inject",
        "z": "652f4e57.e3d538",
        "name": "",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 1100,
        "y": 400,
        "wires": [
            [
                "372a573f.d4f28"
            ]
        ]
    },
    {
        "id": "372a573f.d4f28",
        "type": "function",
        "z": "652f4e57.e3d538",
        "name": "Random FC 6",
        "func": "let values = Math.random() * (65000 - 1) + 1\nmsg.payload = { 'value': values, 'fc': 6, 'unitid': 1, 'address': 0 , 'quantity': 1 }\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 1300,
        "y": 400,
        "wires": [
            [
                "ecb9178e.9920e"
            ]
        ]
    },
    {
        "id": "8ff75dfe.fb5808",
        "type": "inject",
        "z": "652f4e57.e3d538",
        "name": "",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 1100,
        "y": 440,
        "wires": [
            [
                "d91b7970.2a5c9"
            ]
        ]
    },
    {
        "id": "d91b7970.2a5c9",
        "type": "function",
        "z": "652f4e57.e3d538",
        "name": "Random FC 5",
        "func": "let values = parseInt(Math.random() * (65000 - 1) + 1) % 2\nmsg.payload = { value: values, 'fc': 5, 'unitid': 1, 'address': 0 , 'quantity': 10 }\nreturn msg",
        "outputs": 1,
        "noerr": 0,
        "x": 1300,
        "y": 440,
        "wires": [
            [
                "ecb9178e.9920e"
            ]
        ]
    },
    {
        "id": "9a2ec8a68dddbabc",
        "type": "debug",
        "z": "652f4e57.e3d538",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 570,
        "y": 120,
        "wires": []
    },
    {
        "id": "79a3d0e6a887ac09",
        "type": "inject",
        "z": "652f4e57.e3d538",
        "name": "",
        "repeat": "",
        "crontab": "",
        "once": false,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 160,
        "y": 120,
        "wires": [
            [
                "2f40754d0ba69b73"
            ]
        ]
    },
    {
        "id": "2f40754d0ba69b73",
        "type": "modbus-flex-server",
        "z": "652f4e57.e3d538",
        "name": "Garage",
        "logEnabled": false,
        "serverAddress": "192.168.40.240",
        "serverPort": "502",
        "responseDelay": "10",
        "unitId": 1,
        "delayUnit": "s",
        "coilsBufferSize": "50",
        "registersBufferSize": "50",
        "minAddress": 0,
        "splitAddress": "200",
        "funcGetCoil": "function getFlexCoil(addr, unitID) {\n\tif (unitID === node.unitId && \n\t\taddr >= node.minAddress && \n\t\taddr <= node.splitAddress) { \n\n\t\treturn node.coils.readUInt8(addr * node.bufferFactor) \n\t}  \n}",
        "funcGetDiscreteInput": "function getFlexDiscreteInput(addr, unitID) {\n\tif (unitID === node.unitId && \n\t\taddr > node.splitAddress && \n\t\taddr <= node.splitAddress * 2) { \n\n\t\treturn node.coils.readUInt8(addr * node.bufferFactor) \n\t}  \n}",
        "funcGetInputRegister": "function getFlexInputRegister(addr, unitID) { \n\tif (unitID === node.unitId && \n\t\taddr >= node.minAddress && \n\t\taddr <= node.splitAddress) { \n\n\t\treturn node.registers.readUInt16BE(addr * node.bufferFactor)  \n\t} \n}",
        "funcGetHoldingRegister": "function getFlexHoldingRegsiter(addr, unitID) { \n\tif (unitID === node.unitId && \n\t\taddr > node.splitAddress && \n\t\taddr <= node.splitAddress * 2) { \n\n\t\treturn node.registers.readUInt16BE(addr * node.bufferFactor)  \n\t} \n}",
        "funcSetCoil": "function setFlexCoil(addr, value, unitID) { \n\tif (unitID === node.unitId && \n\t\taddr >= node.minAddress && \n\t\taddr <= node.splitAddress) { \n\n\t\tnode.coils.writeUInt8(value, addr * node.bufferFactor)  \n\t} \n}",
        "funcSetRegister": "function setFlexRegister(addr, value, unitID) { \n\tif (unitID === node.unitId && \n\t\taddr >= node.minAddress && \n\t\taddr <= node.splitAddress * 2) { \n\n\t\tnode.registers.writeUInt16BE(value, addr * node.bufferFactor)  \n\t} \n}",
        "showErrors": false,
        "x": 320,
        "y": 120,
        "wires": [
            [
                "9a2ec8a68dddbabc"
            ],
            [
                "9a2ec8a68dddbabc"
            ],
            [
                "9a2ec8a68dddbabc"
            ],
            [
                "9a2ec8a68dddbabc"
            ],
            []
        ]
    },
    {
        "id": "a69f1b395b571a43",
        "type": "comment",
        "z": "652f4e57.e3d538",
        "name": "Server for Modbus Flex Suite Flow",
        "info": "needs node-red-contrib-modbus-flex-server package",
        "x": 240,
        "y": 60,
        "wires": []
    },
    {
        "id": "fa873ff5.42afa",
        "type": "modbus-client",
        "z": "652f4e57.e3d538",
        "name": "Modbus Local Read Client",
        "clienttype": "tcp",
        "bufferCommands": true,
        "stateLogEnabled": false,
        "queueLogEnabled": false,
        "failureLogEnabled": false,
        "tcpHost": "192.168.40.240",
        "tcpPort": "502",
        "tcpType": "DEFAULT",
        "serialPort": "/dev/ttyUSB",
        "serialType": "RTU-BUFFERD",
        "serialBaudrate": "9600",
        "serialDatabits": "8",
        "serialStopbits": "1",
        "serialParity": "none",
        "serialConnectionDelay": "100",
        "serialAsciiResponseStartDelimiter": "",
        "unit_id": 1,
        "commandDelay": 1,
        "clientTimeout": 1000,
        "reconnectOnTimeout": true,
        "reconnectTimeout": 2000,
        "parallelUnitIdsAllowed": false,
        "showErrors": false,
        "showWarnings": true,
        "showLogs": true
    },
    {
        "id": "883d0976.8296d",
        "type": "modbus-client",
        "z": "652f4e57.e3d538",
        "name": "Modbus Local Write Client",
        "clienttype": "tcp",
        "bufferCommands": true,
        "stateLogEnabled": false,
        "queueLogEnabled": false,
        "failureLogEnabled": false,
        "tcpHost": "192.168.40.240",
        "tcpPort": "502",
        "tcpType": "DEFAULT",
        "serialPort": "/dev/ttyUSB",
        "serialType": "RTU-BUFFERD",
        "serialBaudrate": "9600",
        "serialDatabits": "8",
        "serialStopbits": "1",
        "serialParity": "none",
        "serialConnectionDelay": "100",
        "serialAsciiResponseStartDelimiter": "",
        "unit_id": 1,
        "commandDelay": 1,
        "clientTimeout": 1000,
        "reconnectOnTimeout": true,
        "reconnectTimeout": 2000,
        "parallelUnitIdsAllowed": false,
        "showErrors": false,
        "showWarnings": true,
        "showLogs": true
    },
    {
        "id": "c3b91bd7a63ad874",
        "type": "global-config",
        "env": [],
        "modules": {
            "node-red-contrib-modbus": "5.45.2",
            "node-red-contrib-modbus-flex-server": "1.0.1"
        }
    }
]

I figured out how to get it to repeatedly send the modbus registers by adding the repeat function to the timestamp. I still have not figured out how the registers are formatted or how to extract the register out and use it on the UI.

OK so typically you start with modbus map that tells you the starting registers, what each one represents and then their actual format.

I typically use the Modbus Read node nead which can be given a schedule to activate itself on and this is then fed into the Buffer-parser node.

I typically start with a single or at most two registers and keep hitting them until i can get my offsets etc correct and ensure i have the correct register format.

Do you have a modbus map for the devices you are trying to read from ?

Craig

Craig,

I do have the modbus map


test_out1 %QX0.1
test_out0 %QX0.2
test_in1 %IX0.1
test_in0 %IX0.2
test_in22 %IX0.3

I did run across the function codes last night

FC1 reads coil status
FC2 reads input status
FC3 holding registers
FC4 input registers

This current test project to figure out how to get this to work I only have the 5 total. I plan to expand this to the bigger project that has about a 100 items to monitor
I can see the state of the coils when I click the inject button on the timestamp for FC1 and see the input states on FC1 when I do the same.

I am stuck on how to extract the state out of the array. My test_in22 input I see changing in the 4th spot of the array (it is %IX0.3) I tried to put a change block with set msg.value to msg.payload.data[3] then a switch node to msg.value, I also tried msg.payload.data[3] with a rule of "is true" then output to a debug node and the UI LED. I am not sure if the data array starts at 0 or 1 for the location so I did try 3 and 4 for the location. I am sure I am missing more as I need to be able to choose which FC function number the table comes out of.

Thanks again for the help! I know just enough in Nodered to be annoying!

OK those registers maps are weird - usually they will have a number (such as 35000 dec) as the starting register and then you will have a table listing each of the registers after that and the type (binary, u16, s32 etc) and how many registers they take up - in some cases reading coils for example they can all be represented in a single register - but in my experience that is more old fashioned implementations.

Can you show us your read nodes config and also a debug of the output panels so we can tell you how to read them. Have you tried the buffer parser node in the modbus set as it makes life a lot of easier once you get all the offsets etc correct

If you are working with javascript objects then the array starts at 0 - but post up the debug for us to see and label your debug nodes so we can tell where the messages are coming from

also based on your current debug screen the path to the values would be msg.payload.0

Try and set a debug node to only output msg.payload and that will give you more ideas - sometimes the firehose of complete msg object is difficult to follow - where i find it extremely useful is in the first instance though as i can output the output from the buffer parser node and the raw output and then see where you might be making mistakes with offsets etc

Craig

I think the register map is what I am really lacking. I have not been able to figure out where to set it up. I have the 4 functions feeding into the "Modbus Flexible Read" and the msg.payload that is on the output side of the flex read is the only one active and I get the messages in the debug display with the table of states.
I am missing the something to say that %IX0.1 is register value #####

I am looking into the buffer parser node, at least there I am able to set types, names along with other values specific to each individual modbus entry.

I can not seem to find the settings of the read nodes, they are are all associated with the FC# function.
in the FC function the below is the On message tab.

msg.payload = { 'fc': 1, 'unitid': 1, 'address': 0 , 'quantity': 4 }
return msg;

Unless it is in the modbus-flex-server-node which has multiple menus setting, get coil, get discrete, get input, get holding, set coil set register.....

The get coil has

function getFlexCoil(addr, unitID) {
	if (unitID === node.unitId && 
		addr >= node.minAddress && 
		addr <= node.splitAddress) { 

		return node.coils.readUInt8(addr * node.bufferFactor) 
	}  
}

Its PFM on how its getting from the FC functions through the Modbus Flexible Read. If I have the msg.responseBuffer debug on I get this output.

06/05/2026, 17:30:09node: 6f54a366.20bebc
e14e3869.eb3a5 : msg.responseBuffer : Object
object
data: array[8]
0: false
1: true
2: false
3: true
4: false
5: true
6: true
7: false
buffer: buffer[1]
0: 0x6a

I will keep digging and see what I can come up with! Thank you

I see what you mean by " my register maps are weird"

Those are the registers that are on my PLC side. I have not figured out how to get the list of registers that are on the NodeRed side.

I am going down the Youtube and Grok rabbit hole trying to figure that out.

I think that %IX0.1 should connect to register 50000 (or some value for the register) , %IX0.2 = 50001 and down the line with the rest of them.

OK so i assume from what you are saying that you have somehow inherited this setup - or how did you get this far without a mapping of the registers.

Ignore what is on the Node Red side at the moment - what devices are you connecting to - give model etc (as someone on here would have almost certainly dealt with them before) and how have you got Node Red connecting to them - through some serial connection, over TCP/IP etc ?

If you are getting the return buffer in your first message you are on the way - but it would be good to see the raw values.

Is this is production or can you change things around without affecting a real system that is producing something ?

Craig

This is the test system that I am working on now, I can do whatever I need to on it. This is OpenPLC and Sequent Microsystems hardware. OpenPLC addresses the modbus locations as %IX0.0 for inputs, %QX0.0 for coils,

I am currently using PYMODBUS and Python. It works, its just caveman style and I was hoping to upgrade the HMI to a more user friendly and better looking.

Based on what is below the mod bus adresses should be

%IX0.1 = 1 Function code 2
%IX0.2 = 2
%IX0.3 = 3
%IX0.4 = 4

%QX0.1 = 1 Function code 1
%QX0.2 = 2
%QX0.3 = 3
%QX0.4 = 4

Discrete Output Coils	Digital Outputs	%QX0.0 – %QX99.7	0 – 799	1 bit	0 or 1	RW
Discrete Output Coils	Slave Outputs	%QX100.0 – %QX199.7	800 – 1599	1 bit	0 or 1	RW
Discrete Input Contacts	Digital Inputs	%IX0.0 – %IX99.7	0 – 799	1 bit	0 or 1	R
Discrete Input Contacts	Slave Inputs	%IX100.0 – %IX199.7	800 – 1599	1 bit	0 or 1	R
Analog Input Registers	Analog Input (including slave)	%IW0 – %IW1023	0 – 1023	16 bits	0 – 65535	R
Holding Registers	Analog Outputs (including slave)	%QW0 – %QW1023	0 – 1023	16 bits	0 – 65535	RW
Holding Registers	Memory (16-bits)	%MW0 – %MW1023	1024 – 2048	16 bits	0 – 65535	RW
Holding Registers	Memory (32-bits)	%MD0 – %MD1023	2048 – 4095	32 bits	0 – 4294967295	RW
Holding Registers	Memory (64-bits)	%ML0 – %ML1023	4096 – 8191	64 bits	0 – a really big number!	RW

I made some headway on it. I have been able to read the coils on the modbus with a function that is downstream of the buffer parser node.

The next thing I need to figure out is how to make a function that works to allow data to flow to the buffer parser for each of the FC# that go to the Modbus flexible read node.

I thought I would have a buffer parser node for FC1 and another one for FC2.

The end of the modbus response node has {data: [all my modbus states], buffer: <Buffer 6a 03 00>}

The FC2 is <Buffer 00 00 00>

I was trying to make the function on the output of the modbus flex node and use that buffer value to allow data to get sent to the buffer parser. I have not had any luck yet.

// === C1 LED Control - Fixed Version ===
const varName = "C1";

if (msg.payload && typeof msg.payload === "object") {

    const value = msg.payload[varName];

    if (value === 1 || value === "1") {
        // LED ON
        return [
            { payload: "C1 = 1  → LED ON" },   // Output 1 → Debug
            { payload: true }                   // Output 2 → ui-led  (MUST be boolean true)
        ];
    } else {
        // LED OFF
        return [
            { payload: `C1 = ${value}  → LED OFF` },
            { payload: false }                  // Output 2 → ui-led
        ];
    }

}

// Safety fallback
return [null, { payload: false }];