{ "$comment": "Copy this file to e2e-config.json and replace the NodeIds with the ones your Config DB publishes. Fields named `opcUaUrl` override the -OpcUaUrl parameter on test-all.ps1 per-driver. Omit a top-level key to skip that driver.", "modbus": { "$comment": "Port 5020 matches tests/.../Modbus.IntegrationTests/Docker/docker-compose.yml — `docker compose --profile standard up -d`.", "endpoint": "127.0.0.1:5020", "bridgeNodeId": "ns=2;s=Modbus/HR200", "opcUaUrl": "opc.tcp://localhost:4840" }, "abcip": { "$comment": "ab_server listens on port 44818 (default CIP/EIP). `docker compose --profile controllogix up -d`.", "gateway": "ab://127.0.0.1:44818/1,0", "family": "ControlLogix", "tagPath": "TestDINT", "bridgeNodeId": "ns=2;s=AbCip/TestDINT" }, "ablegacy": { "$comment": "Works against ab_server --profile slc500 (Docker fixture) or real SLC/MicroLogix/PLC-5 hardware. `/1,0` cip-path is required for the Docker fixture; real hardware accepts an empty path — e.g. `ab://10.0.1.50:44818/`.", "gateway": "ab://127.0.0.1/1,0", "plcType": "Slc500", "address": "N7:5", "bridgeNodeId": "ns=2;s=AbLegacy/N7_5" }, "s7": { "$comment": "Port 1102 matches tests/.../S7.IntegrationTests/Docker/docker-compose.yml (python-snap7 needs non-priv port). `docker compose --profile s7_1500 up -d`. Real S7 PLCs listen on 102.", "endpoint": "127.0.0.1:1102", "cpu": "S71500", "slot": 0, "address": "DB1.DBW0", "bridgeNodeId": "ns=2;s=S7/DB1_DBW0" }, "focas": { "$comment": "Gated behind FOCAS_TRUST_WIRE=1 — no public simulator. Point at a real CNC + ensure Fwlib32.dll is on PATH.", "host": "192.168.1.20", "port": 8193, "address": "R100", "bridgeNodeId": "ns=2;s=Focas/R100" }, "twincat": { "$comment": "Gated behind TWINCAT_TRUST_WIRE=1 — needs XAR or standalone TwinCAT Router NuGet reachable at -AmsNetId.", "amsNetId": "127.0.0.1.1.1", "amsPort": 851, "symbolPath": "MAIN.iCounter", "bridgeNodeId": "ns=2;s=TwinCAT/MAIN_iCounter" }, "phase7": { "$comment": "Virtual tags + scripted alarms. The VirtualNodeId must resolve to a server-side virtual tag whose script reads the modbus InputNodeId and writes VT = input * 2. The AlarmNodeId is the ConditionId of a scripted alarm that fires when VT > 100.", "modbusEndpoint": "127.0.0.1:5502", "inputNodeId": "ns=2;s=Modbus/HR100", "virtualNodeId": "ns=2;s=Virtual/VT_DoubledHR100", "alarmNodeId": "ns=2;s=Alarm/HR100_High" } }