Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save kumajaya/701fe6363fbb082b903f6770a4142ee3 to your computer and use it in GitHub Desktop.
Save kumajaya/701fe6363fbb082b903f6770a4142ee3 to your computer and use it in GitHub Desktop.
Read Siemens PAC3200 via Modbus TCP dan push it to Modbus RTU
[
{
"id": "ccbb31db.f9e2",
"type": "modbus-flex-write",
"z": "d3b286db.83cb78",
"name": "DCS",
"showStatusActivities": false,
"showErrors": false,
"server": "f94614f1.8e4828",
"emptyMsgOnFail": false,
"keepMsgProperties": false,
"x": 1190,
"y": 580,
"wires": [
[
"3c5c1111.87e9be"
],
[
"a42229b8.ad0f18"
]
]
},
{
"id": "c8f970a1.04c37",
"type": "inject",
"z": "d3b286db.83cb78",
"name": "register",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "30",
"crontab": "",
"once": true,
"onceDelay": "5",
"topic": "palembang/incoming/active-energy",
"payload": "{\"fc\":3,\"unitid\":1,\"address\":801,\"quantity\":4}",
"payloadType": "json",
"x": 100,
"y": 520,
"wires": [
[
"7b290e67.4e8e"
]
]
},
{
"id": "3c5c1111.87e9be",
"type": "debug",
"z": "d3b286db.83cb78",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 1350,
"y": 560,
"wires": []
},
{
"id": "b0913cd7.d1df2",
"type": "change",
"z": "d3b286db.83cb78",
"name": "clear",
"rules": [
{
"t": "delete",
"p": "modbusRequest",
"pt": "msg"
},
{
"t": "delete",
"p": "responseBuffer",
"pt": "msg"
},
{
"t": "delete",
"p": "queueLengthByUnitId",
"pt": "msg"
},
{
"t": "delete",
"p": "queueUnitId",
"pt": "msg"
},
{
"t": "delete",
"p": "unitId",
"pt": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 390,
"y": 520,
"wires": [
[
"a2e83175.e7fda",
"e9d7e605.84fe48"
]
]
},
{
"id": "7b290e67.4e8e",
"type": "modbus-flex-getter",
"z": "d3b286db.83cb78",
"name": "MV-IN",
"showStatusActivities": false,
"showErrors": false,
"logIOActivities": false,
"server": "3795cb6c.a895e4",
"useIOFile": false,
"ioFile": "",
"useIOForPayload": false,
"emptyMsgOnFail": false,
"keepMsgProperties": false,
"x": 250,
"y": 520,
"wires": [
[
"b0913cd7.d1df2"
],
[
"24dd3ce2.08dc14"
]
]
},
{
"id": "f4a7b470.206378",
"type": "change",
"z": "d3b286db.83cb78",
"name": "clear",
"rules": [
{
"t": "delete",
"p": "modbusRequest",
"pt": "msg"
},
{
"t": "delete",
"p": "responseBuffer",
"pt": "msg"
},
{
"t": "delete",
"p": "queueLengthByUnitId",
"pt": "msg"
},
{
"t": "delete",
"p": "queueUnitId",
"pt": "msg"
},
{
"t": "delete",
"p": "unitId",
"pt": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 390,
"y": 560,
"wires": [
[
"e9d7e605.84fe48",
"5cc7a387.5faebc"
]
]
},
{
"id": "ec8afbc1.4f9348",
"type": "modbus-flex-getter",
"z": "d3b286db.83cb78",
"name": "MV-IN",
"showStatusActivities": false,
"showErrors": false,
"logIOActivities": false,
"server": "3795cb6c.a895e4",
"useIOFile": false,
"ioFile": "",
"useIOForPayload": false,
"emptyMsgOnFail": false,
"keepMsgProperties": false,
"x": 250,
"y": 560,
"wires": [
[
"f4a7b470.206378"
],
[]
]
},
{
"id": "a2e83175.e7fda",
"type": "change",
"z": "d3b286db.83cb78",
"name": "register",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "{\"fc\":3,\"unitid\":1,\"address\":817,\"quantity\":4}",
"tot": "json"
},
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "palembang/incoming/reactive-energy",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 100,
"y": 560,
"wires": [
[
"ec8afbc1.4f9348"
]
]
},
{
"id": "15f76c2f.cd61c4",
"type": "switch",
"z": "d3b286db.83cb78",
"name": "",
"property": "topic",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "palembang/incoming/active-energy",
"vt": "str"
},
{
"t": "eq",
"v": "palembang/incoming/reactive-energy",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 670,
"y": 540,
"wires": [
[
"6a4e89a9.69dcc8"
],
[
"35e8ff73.4b31d"
]
]
},
{
"id": "e9d7e605.84fe48",
"type": "function",
"z": "d3b286db.83cb78",
"name": "remap",
"func": "let pay = msg.payload;\n\nconst buf = Buffer.allocUnsafe(8);\nbuf.writeUInt16BE(pay[3],6);\nbuf.writeUInt16BE(pay[2],4);\nbuf.writeUInt16BE(pay[1],2);\nbuf.writeUInt16BE(pay[0],0);\n\npay = buf.readDoubleBE(0) / 1000.0;\n\nconst buf2 = Buffer.allocUnsafe(4);\nbuf2.writeFloatBE(pay);\n\nvar tmp = [];\ntmp.push(buf2.readUInt16BE(2));\ntmp.push(buf2.readUInt16BE(0));\n\nmsg.payload = tmp;\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"x": 530,
"y": 560,
"wires": [
[
"15f76c2f.cd61c4"
]
]
},
{
"id": "6a4e89a9.69dcc8",
"type": "change",
"z": "d3b286db.83cb78",
"name": "Active Energy",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "{\t \"value\": payload,\t \"fc\": 16,\t \"unitid\": 4,\t \"address\": 170,\t \"quantity\": 2\t}",
"tot": "jsonata"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 840,
"y": 460,
"wires": [
[
"ccbb31db.f9e2"
]
]
},
{
"id": "35e8ff73.4b31d",
"type": "change",
"z": "d3b286db.83cb78",
"name": "Reactive Energy",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "{\t \"value\": payload,\t \"fc\": 16,\t \"unitid\": 4,\t \"address\": 172,\t \"quantity\": 2\t}",
"tot": "jsonata"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 840,
"y": 500,
"wires": [
[
"ccbb31db.f9e2"
]
]
},
{
"id": "5cc7a387.5faebc",
"type": "change",
"z": "d3b286db.83cb78",
"name": "register",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "{\"fc\":3,\"unitid\":1,\"address\":55,\"quantity\":16}",
"tot": "json"
},
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "palembang/incoming/average",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 100,
"y": 600,
"wires": [
[
"79c6e50c.37157c"
]
]
},
{
"id": "5f6594a9.1d231c",
"type": "function",
"z": "d3b286db.83cb78",
"name": "format",
"func": "function scale(val, min, max, scalemin, scalemax) {\n var tmp = ((scalemax - scalemin) * (val - min) / (max - min)) + scalemin;\n return (tmp > scalemax ? scalemax : tmp);\n}\n\nlet pay = msg.payload.value;\n\nconst buf = Buffer.allocUnsafe(4);\nbuf.writeUInt16BE(pay[1],2);\nbuf.writeUInt16BE(pay[0],0);\n\npay = parseFloat(scale(buf.readFloatBE(0), msg.payload.min, msg.payload.max, msg.payload.scalemin, msg.payload.scalemax)).toFixed(0);\nbuf.writeUInt16BE(pay,0);\n\nvar tmp;\nvar out = [];\n\ntmp = { topic: msg.payload.topic, payload:{\n \"value\": buf.readUInt16BE(0),\n \"fc\": msg.payload.fc,\n \"unitid\": msg.payload.unitid,\n \"address\": msg.payload.address,\n \"quantity\": msg.payload.quantity\n} }\nout.push(tmp);\n\nreturn out;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"x": 1030,
"y": 600,
"wires": [
[
"ccbb31db.f9e2"
]
]
},
{
"id": "79c6e50c.37157c",
"type": "modbus-flex-getter",
"z": "d3b286db.83cb78",
"name": "MV-IN",
"showStatusActivities": false,
"showErrors": false,
"logIOActivities": false,
"server": "3795cb6c.a895e4",
"useIOFile": false,
"ioFile": "",
"useIOForPayload": false,
"emptyMsgOnFail": false,
"keepMsgProperties": false,
"x": 250,
"y": 600,
"wires": [
[
"b6e53295.6491b"
],
[]
]
},
{
"id": "b6e53295.6491b",
"type": "change",
"z": "d3b286db.83cb78",
"name": "clear",
"rules": [
{
"t": "delete",
"p": "modbusRequest",
"pt": "msg"
},
{
"t": "delete",
"p": "responseBuffer",
"pt": "msg"
},
{
"t": "delete",
"p": "queueLengthByUnitId",
"pt": "msg"
},
{
"t": "delete",
"p": "queueUnitId",
"pt": "msg"
},
{
"t": "delete",
"p": "unitId",
"pt": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 390,
"y": 600,
"wires": [
[
"eab8b84.01cbb48"
]
]
},
{
"id": "eab8b84.01cbb48",
"type": "split",
"z": "d3b286db.83cb78",
"name": "",
"splt": "\\n",
"spltType": "str",
"arraySplt": "2",
"arraySpltType": "len",
"stream": false,
"addname": "",
"x": 530,
"y": 600,
"wires": [
[
"2d9a153b.4ac75a"
]
]
},
{
"id": "2d9a153b.4ac75a",
"type": "switch",
"z": "d3b286db.83cb78",
"name": "",
"property": "parts.index",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "0",
"vt": "num"
},
{
"t": "eq",
"v": "2",
"vt": "num"
},
{
"t": "eq",
"v": "3",
"vt": "num"
},
{
"t": "eq",
"v": "7",
"vt": "num"
}
],
"checkall": "true",
"repair": false,
"outputs": 4,
"x": 670,
"y": 600,
"wires": [
[
"70b4db99.c04674"
],
[
"b706de64.ef12d"
],
[
"a4021d42.a7ce9"
],
[
"a5bbb475.3de958"
]
]
},
{
"id": "70b4db99.c04674",
"type": "change",
"z": "d3b286db.83cb78",
"name": "Frequency",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "{\t \"value\": payload,\t \"min\": 0,\t \"max\": 65.0,\t \"scalemin\": 0,\t \"scalemax\": 65535,\t \"fc\": 6,\t \"unitid\": 4,\t \"address\": 174,\t \"quantity\": 1\t}\t",
"tot": "jsonata"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 850,
"y": 540,
"wires": [
[
"5f6594a9.1d231c"
]
]
},
{
"id": "b706de64.ef12d",
"type": "change",
"z": "d3b286db.83cb78",
"name": "Avr. Vph-ph",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "{\t \"value\": payload,\t \"min\": 0,\t \"max\": 25000.0,\t \"scalemin\": 0,\t \"scalemax\": 65535,\t \"fc\": 6,\t \"unitid\": 4,\t \"address\": 176,\t \"quantity\": 1\t}",
"tot": "jsonata"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 850,
"y": 580,
"wires": [
[
"5f6594a9.1d231c"
]
]
},
{
"id": "a4021d42.a7ce9",
"type": "change",
"z": "d3b286db.83cb78",
"name": "Avr. A",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "{\t \"value\": payload,\t \"min\": 0,\t \"max\": 250.0,\t \"scalemin\": 0,\t \"scalemax\": 65535,\t \"fc\": 6,\t \"unitid\": 4,\t \"address\": 178,\t \"quantity\": 1\t}",
"tot": "jsonata"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 870,
"y": 620,
"wires": [
[
"5f6594a9.1d231c"
]
]
},
{
"id": "a5bbb475.3de958",
"type": "change",
"z": "d3b286db.83cb78",
"name": "Total Factor",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "{\t \"value\": payload,\t \"min\": 0,\t \"max\": 1.0,\t \"scalemin\": 0,\t \"scalemax\": 65535,\t \"fc\": 6,\t \"unitid\": 4,\t \"address\": 180,\t \"quantity\": 1\t}",
"tot": "jsonata"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 850,
"y": 660,
"wires": [
[
"5f6594a9.1d231c"
]
]
},
{
"id": "24dd3ce2.08dc14",
"type": "modbus-response",
"z": "d3b286db.83cb78",
"name": "",
"registerShowMax": 20,
"x": 430,
"y": 480,
"wires": []
},
{
"id": "a42229b8.ad0f18",
"type": "modbus-response",
"z": "d3b286db.83cb78",
"name": "",
"registerShowMax": 20,
"x": 1370,
"y": 600,
"wires": []
},
{
"id": "f94614f1.8e4828",
"type": "modbus-client",
"name": "DCS",
"clienttype": "serial",
"bufferCommands": true,
"stateLogEnabled": false,
"queueLogEnabled": false,
"tcpHost": "192.168.76.197",
"tcpPort": "4001",
"tcpType": "TELNET",
"serialPort": "/dev/ttyUSB0",
"serialType": "RTU-BUFFERD",
"serialBaudrate": "9600",
"serialDatabits": "8",
"serialStopbits": "1",
"serialParity": "none",
"serialConnectionDelay": "100",
"unit_id": 4,
"commandDelay": 1,
"clientTimeout": 1000,
"reconnectOnTimeout": true,
"reconnectTimeout": 2000,
"parallelUnitIdsAllowed": true
},
{
"id": "3795cb6c.a895e4",
"type": "modbus-client",
"name": "PAC3200 MV-IN",
"clienttype": "tcp",
"bufferCommands": true,
"stateLogEnabled": false,
"queueLogEnabled": false,
"tcpHost": "192.168.76.194",
"tcpPort": "502",
"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,
"reconnectOnTimeout": true,
"reconnectTimeout": 2000,
"parallelUnitIdsAllowed": true
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment