UNPKG

@oriolrius/node-red-contrib-s7

Version:

A Node-RED node to interact with Siemens S7 PLCs

383 lines 9.7 kB
[ { "id": "f1", "type": "tab", "label": "S7 PLC Example Flow", "disabled": false, "info": "This flow demonstrates how to use the S7 PLC nodes to read and write data from/to a Siemens S7 PLC.\n\nSetup:\n1. Update the S7 Endpoint node with your PLC's IP address\n2. Configure the variable table with your PLC's data blocks\n3. Deploy the flow\n\nFeatures demonstrated:\n- Reading PLC data continuously\n- Writing data to PLC on button press\n- Monitoring PLC connection status\n- Using different data types (BOOL, INT, REAL)\n\nNote: Make sure your PLC is accessible and configured for Ethernet communication." }, { "id": "s7endpoint1", "type": "s7 endpoint", "z": "f1", "transport": "iso-on-tcp", "name": "My S7 PLC", "address": "192.168.1.10", "port": "102", "rack": "0", "slot": "2", "cycletime": "1000", "timeout": "8000", "connmode": "rack-slot", "localtsaphi": "01", "localtsaplo": "00", "remotetsaphi": "01", "remotetsaplo": "00", "rewritetimes": "3", "rewriteinterval": "100", "vartable": [ { "addr": "DB1,X0.0", "name": "motor_running" }, { "addr": "DB1,INT2", "name": "temperature" }, { "addr": "DB1,REAL4", "name": "speed_setpoint" }, { "addr": "DB1,X0.1", "name": "alarm_active" }, { "addr": "DB1,INT8", "name": "production_count" } ] }, { "id": "s7in1", "type": "s7 in", "z": "f1", "endpoint": "s7endpoint1", "mode": "all-split", "variable": "", "diff": true, "name": "Read All Variables", "x": 150, "y": 100, "wires": [ ["debug1", "switch1"] ] }, { "id": "debug1", "type": "debug", "z": "f1", "name": "PLC Data", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 360, "y": 100, "wires": [] }, { "id": "inject1", "type": "inject", "z": "f1", "name": "Start Motor", "props": [ { "p": "payload" }, { "p": "variable", "v": "motor_running", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "true", "payloadType": "bool", "x": 130, "y": 200, "wires": [ ["s7out1"] ] }, { "id": "inject2", "type": "inject", "z": "f1", "name": "Stop Motor", "props": [ { "p": "payload" }, { "p": "variable", "v": "motor_running", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "false", "payloadType": "bool", "x": 130, "y": 240, "wires": [ ["s7out1"] ] }, { "id": "s7out1", "type": "s7 out", "z": "f1", "endpoint": "s7endpoint1", "variable": "motor_running", "name": "Write Motor Control", "x": 360, "y": 220, "wires": [ ["debug2"] ] }, { "id": "debug2", "type": "debug", "z": "f1", "name": "Write Result", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 570, "y": 220, "wires": [] }, { "id": "switch1", "type": "switch", "z": "f1", "name": "Filter Temperature", "property": "topic", "propertyType": "msg", "rules": [ { "t": "eq", "v": "temperature", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 370, "y": 140, "wires": [ ["gauge1"] ] }, { "id": "gauge1", "type": "ui_gauge", "z": "f1", "name": "Temperature Gauge", "group": "group1", "order": 1, "width": 0, "height": 0, "gtype": "gage", "title": "Temperature (°C)", "label": "°C", "format": "{{value}}", "min": 0, "max": "100", "colors": [ "#00b500", "#e6e600", "#ca3838" ], "seg1": "30", "seg2": "70", "className": "", "x": 580, "y": 140, "wires": [] }, { "id": "inject3", "type": "inject", "z": "f1", "name": "Set Speed 75%", "props": [ { "p": "payload" }, { "p": "variable", "v": "speed_setpoint", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "75.5", "payloadType": "num", "x": 140, "y": 300, "wires": [ ["s7out2"] ] }, { "id": "s7out2", "type": "s7 out", "z": "f1", "endpoint": "s7endpoint1", "variable": "speed_setpoint", "name": "Write Speed", "x": 340, "y": 300, "wires": [ ["debug3"] ] }, { "id": "debug3", "type": "debug", "z": "f1", "name": "Speed Write", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 510, "y": 300, "wires": [] }, { "id": "s7control1", "type": "s7 control", "z": "f1", "endpoint": "s7endpoint1", "function": "cycletime", "name": "Control Cycle Time", "x": 350, "y": 380, "wires": [ ["debug4"] ] }, { "id": "inject4", "type": "inject", "z": "f1", "name": "Fast Cycle (500ms)", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "500", "payloadType": "num", "x": 150, "y": 360, "wires": [ ["s7control1"] ] }, { "id": "inject5", "type": "inject", "z": "f1", "name": "Slow Cycle (2000ms)", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "2000", "payloadType": "num", "x": 150, "y": 400, "wires": [ ["s7control1"] ] }, { "id": "debug4", "type": "debug", "z": "f1", "name": "Cycle Control", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 570, "y": 380, "wires": [] }, { "id": "comment1", "type": "comment", "z": "f1", "name": "S7 PLC Communication Example", "info": "This flow demonstrates the basic usage of S7 PLC nodes:\n\n1. **S7 Endpoint**: Defines connection to PLC\n - IP: 192.168.1.10 (change to your PLC's IP)\n - Rack: 0, Slot: 2 (typical for CPU)\n - Variables defined in table\n\n2. **S7 In**: Reads data from PLC\n - Mode: all-split (each variable as separate message)\n - Diff: true (only send when values change)\n\n3. **S7 Out**: Writes data to PLC\n - Can specify variable in node or via msg.variable\n\n4. **S7 Control**: Controls PLC communication\n - Change cycle time dynamically\n - Trigger manual reads\n\n**Variable Table:**\n- motor_running (DB1,X0.0) - Boolean\n- temperature (DB1,INT2) - Integer \n- speed_setpoint (DB1,REAL4) - Real\n- alarm_active (DB1,X0.1) - Boolean\n- production_count (DB1,INT8) - Integer", "x": 200, "y": 40, "wires": [] }, { "id": "group1", "type": "ui_group", "name": "PLC Monitor", "tab": "tab1", "order": 1, "disp": true, "width": "6", "collapse": false, "className": "" }, { "id": "tab1", "type": "ui_tab", "name": "S7 PLC Dashboard", "icon": "dashboard", "order": 1, "disabled": false, "hidden": false } ]