Skip to content

Instantly share code, notes, and snippets.

@biancode
Last active March 27, 2022 18:52
Show Gist options
  • Save biancode/bf06a87e84395e4bce276714c6f5f884 to your computer and use it in GitHub Desktop.
Save biancode/bf06a87e84395e4bce276714c6f5f884 to your computer and use it in GitHub Desktop.
node-red-contrib-modbus example flow

Example flow from 3.0.0 and above - since v0.17.5 of Node-RED, please try also the Node-RED->Import->Examples->modbus

[
{
"id": "278c3ffc.fa40d8",
"type": "tab",
"label": "Modbus HTTP",
"disabled": false,
"info": ""
},
{
"id": "f4e4d112.5e3708",
"type": "modbus-getter",
"z": "278c3ffc.fa40d8",
"name": "",
"showStatusActivities": false,
"showErrors": false,
"unitid": "",
"dataType": "HoldingRegister",
"adr": "0",
"quantity": "4",
"server": "228160dd.0bd268",
"useIOFile": false,
"ioFile": "",
"useIOForPayload": false,
"x": 410,
"y": 190,
"wires": [
[
"18f09288.c552b5",
"b3bee6f8.64944"
],
[
"f61cd2bb.db0808"
]
]
},
{
"id": "867bcf5a.728988",
"type": "http in",
"z": "278c3ffc.fa40d8",
"name": "",
"url": "/modbus/flex/read",
"method": "get",
"upload": false,
"swaggerDoc": "",
"x": 190,
"y": 340,
"wires": [
[
"a06133ba.054e9"
]
]
},
{
"id": "18f09288.c552b5",
"type": "debug",
"z": "278c3ffc.fa40d8",
"name": "",
"active": true,
"console": "false",
"complete": "true",
"x": 770,
"y": 130,
"wires": []
},
{
"id": "f61cd2bb.db0808",
"type": "modbus-response",
"z": "278c3ffc.fa40d8",
"name": "",
"registerShowMax": 20,
"x": 680,
"y": 170,
"wires": []
},
{
"id": "a06133ba.054e9",
"type": "modbus-flex-getter",
"z": "278c3ffc.fa40d8",
"name": "",
"showStatusActivities": false,
"showErrors": false,
"server": "228160dd.0bd268",
"x": 430,
"y": 340,
"wires": [
[
"4c623588.f2d704",
"ad5c1f3d.c60f"
],
[
"d42d9e3.9a23ae"
]
]
},
{
"id": "d42d9e3.9a23ae",
"type": "modbus-response",
"z": "278c3ffc.fa40d8",
"name": "",
"registerShowMax": 20,
"x": 670,
"y": 330,
"wires": []
},
{
"id": "4c623588.f2d704",
"type": "debug",
"z": "278c3ffc.fa40d8",
"name": "",
"active": true,
"console": "false",
"complete": "true",
"x": 750,
"y": 290,
"wires": []
},
{
"id": "33c8f5aa.a03022",
"type": "catch",
"z": "278c3ffc.fa40d8",
"name": "",
"scope": null,
"x": 650,
"y": 80,
"wires": [
[
"df84382d.4327b8"
]
]
},
{
"id": "ad380629.c0b74",
"type": "modbus-flex-server",
"z": "278c3ffc.fa40d8",
"name": "",
"logEnabled": false,
"serverPort": "18502",
"responseDelay": 100,
"unitId": 1,
"delayUnit": "ms",
"coilsBufferSize": 20000,
"registersBufferSize": 20000,
"minAddress": 0,
"splitAddress": 10000,
"funcGetCoil": "function getFlexCoil(addr, unitID) {\n\tif (unitID === node.unitId && \n\t\taddr >= node.minAddress && \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 * 2) { \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}",
"x": 200,
"y": 70,
"wires": [
[],
[],
[]
]
},
{
"id": "ad5c1f3d.c60f",
"type": "http response",
"z": "278c3ffc.fa40d8",
"name": "",
"statusCode": "",
"headers": {},
"x": 630,
"y": 290,
"wires": []
},
{
"id": "f566f9bf.dbec68",
"type": "http in",
"z": "278c3ffc.fa40d8",
"name": "",
"url": "/modbus/read",
"method": "get",
"upload": false,
"swaggerDoc": "",
"x": 180,
"y": 190,
"wires": [
[
"f4e4d112.5e3708"
]
]
},
{
"id": "b3bee6f8.64944",
"type": "http response",
"z": "278c3ffc.fa40d8",
"name": "",
"statusCode": "",
"headers": {},
"x": 640,
"y": 130,
"wires": []
},
{
"id": "df84382d.4327b8",
"type": "debug",
"z": "278c3ffc.fa40d8",
"name": "",
"active": true,
"console": "false",
"complete": "true",
"x": 800,
"y": 80,
"wires": []
},
{
"id": "af9361fe.87ea18",
"type": "modbus-flex-write",
"z": "278c3ffc.fa40d8",
"name": "",
"showStatusActivities": false,
"showErrors": false,
"server": "228160dd.0bd268",
"x": 420,
"y": 530,
"wires": [
[
"3540312d.5017c6"
],
[
"b0288009.f96ae8"
]
]
},
{
"id": "fdbc5e3e.e35fb8",
"type": "modbus-write",
"z": "278c3ffc.fa40d8",
"name": "",
"showStatusActivities": false,
"showErrors": false,
"unitid": "",
"dataType": "HoldingRegister",
"adr": "0",
"quantity": "1",
"server": "228160dd.0bd268",
"x": 410,
"y": 440,
"wires": [
[
"b33411ba.b3b498"
],
[
"75fa26b3.414c"
]
]
},
{
"id": "4f9b6223.e98aa4",
"type": "http in",
"z": "278c3ffc.fa40d8",
"name": "",
"url": "/modbus/write",
"method": "get",
"upload": false,
"swaggerDoc": "",
"x": 180,
"y": 440,
"wires": [
[
"fdbc5e3e.e35fb8"
]
]
},
{
"id": "b33411ba.b3b498",
"type": "http response",
"z": "278c3ffc.fa40d8",
"name": "",
"statusCode": "",
"headers": {},
"x": 640,
"y": 400,
"wires": []
},
{
"id": "75fa26b3.414c",
"type": "modbus-response",
"z": "278c3ffc.fa40d8",
"name": "",
"registerShowMax": 20,
"x": 680,
"y": 440,
"wires": []
},
{
"id": "1e4aafb.8f1855",
"type": "http in",
"z": "278c3ffc.fa40d8",
"name": "",
"url": "/modbus/flex/write",
"method": "get",
"upload": false,
"swaggerDoc": "",
"x": 190,
"y": 530,
"wires": [
[
"af9361fe.87ea18"
]
]
},
{
"id": "3540312d.5017c6",
"type": "http response",
"z": "278c3ffc.fa40d8",
"name": "",
"statusCode": "",
"headers": {},
"x": 640,
"y": 490,
"wires": []
},
{
"id": "b0288009.f96ae8",
"type": "modbus-response",
"z": "278c3ffc.fa40d8",
"name": "",
"registerShowMax": 20,
"x": 680,
"y": 530,
"wires": []
},
{
"id": "69788b37.05c614",
"type": "comment",
"z": "278c3ffc.fa40d8",
"name": "HTTP request GET working examples",
"info": "## Read\n\n### Flex Read\n\nhttp://localhost:1880/modbus/flex/read?value=0&unitid=1&fc=3&address=0&quantity=1\n\nhttp://localhost:1880/modbus/flex/read?value=0&unitid=1&fc=4&address=0&quantity=1\n\nhttp://localhost:1880/modbus/flex/read?value=0&unitid=1&fc=3&address=0&quantity=5\n\nhttp://localhost:1880/modbus/flex/read?value=0&unitid=1&fc=4&address=0&quantity=5\n\n### Read\n\nhttp://localhost:1880/modbus/read\n\n## Write\n\n### Test HTTP without Modbus\n\nhttp://localhost:1880/modbus/flex/write/test?value=[1,2,3,4,5]&unitid=1&fc=16&address=0&quantity=5\n\n\n### Flex Write\n\nhttp://localhost:1880/modbus/flex/write?value=10&unitid=1&fc=6&address=0&quantity=1\n\nhttp://localhost:1880/modbus/flex/write?value=[1,2,3,4,5]&unitid=1&fc=16&address=0&quantity=5\n\n### Write\n\nhttp://localhost:1880/modbus/write\n",
"x": 240,
"y": 140,
"wires": []
},
{
"id": "a3dd6f31.9eb17",
"type": "http in",
"z": "278c3ffc.fa40d8",
"name": "",
"url": "/modbus/flex/write/test",
"method": "get",
"upload": false,
"swaggerDoc": "",
"x": 220,
"y": 620,
"wires": [
[
"efac3450.e15668"
]
]
},
{
"id": "d88e2d99.cd96e",
"type": "debug",
"z": "278c3ffc.fa40d8",
"name": "",
"active": true,
"console": "false",
"complete": "true",
"x": 590,
"y": 620,
"wires": []
},
{
"id": "efac3450.e15668",
"type": "function",
"z": "278c3ffc.fa40d8",
"name": "",
"func": "if (msg.payload.value && msg.payload.value.indexOf(',') > -1) {\n msg.payload.value = JSON.parse(msg.payload.value)\n}\n\nif (msg.value && msg.value.indexOf(',') > -1) {\n msg.value = JSON.parse(msg.payload.value)\n}\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 450,
"y": 620,
"wires": [
[
"d88e2d99.cd96e",
"d20d5d26.f4c1a"
]
]
},
{
"id": "d20d5d26.f4c1a",
"type": "http response",
"z": "278c3ffc.fa40d8",
"name": "",
"statusCode": "",
"headers": {},
"x": 590,
"y": 660,
"wires": []
},
{
"id": "228160dd.0bd268",
"type": "modbus-client",
"z": "278c3ffc.fa40d8",
"name": "Modbus Flex Server",
"clienttype": "tcp",
"bufferCommands": true,
"stateLogEnabled": false,
"tcpHost": "127.0.0.1",
"tcpPort": "18502",
"tcpType": "DEFAULT",
"serialPort": "/dev/ttyUSB",
"serialType": "RTU-BUFFERD",
"serialBaudrate": "9600",
"serialDatabits": "8",
"serialStopbits": "1",
"serialParity": "none",
"serialConnectionDelay": "100",
"unit_id": "1",
"commandDelay": "1",
"clientTimeout": "1000",
"reconnectTimeout": "2000"
}
]
@biancode
Copy link
Author

just working from v0.6.0 and above

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment