Matrix-gate satisfied (14 passed / 1 skipped / 0 failed on 2026-04-30 per docs/v2/Galaxy.ParityMatrix.md). Galaxy access flows through the in-process GalaxyDriver → mxaccessgw exclusively. Legacy infrastructure deleted in this commit: Source projects (6): - src/ZB.MOM.WW.OtOpcUa.Driver.Galaxy.Host (.NET 4.8 x86 + MXAccess COM) - src/ZB.MOM.WW.OtOpcUa.Driver.Galaxy.Proxy (in-process pipe client) - src/ZB.MOM.WW.OtOpcUa.Driver.Galaxy.Shared (pipe-IPC contracts) - tests/ZB.MOM.WW.OtOpcUa.Driver.Galaxy.Host.Tests - tests/ZB.MOM.WW.OtOpcUa.Driver.Galaxy.Proxy.Tests - tests/ZB.MOM.WW.OtOpcUa.Driver.Galaxy.Shared.Tests Test projects with no consumer after legacy retired (3): - tests/ZB.MOM.WW.OtOpcUa.Driver.Galaxy.E2E (drove Galaxy.Host EXE) - tests/ZB.MOM.WW.OtOpcUa.Driver.Galaxy.ParityTests (drove both backends) - tests/ZB.MOM.WW.OtOpcUa.Driver.Galaxy.TestSupport (only consumed by Host/Proxy tests) Edits: - ZB.MOM.WW.OtOpcUa.slnx: drop nine project entries - Server.csproj: drop Driver.Galaxy.Proxy ProjectReference - Server/Program.cs: drop GalaxyProxyDriverFactoryExtensions.Register + the parallel-registration comment block; only GalaxyDriverFactoryExtensions registers now under DriverType "GalaxyMxGateway" - Install-Services.ps1: rewrite to drop OtOpcUaGalaxyHost service install + the GalaxySharedSecret/ZbConnection/GalaxyClientName/GalaxyPipeName/ AvevaServiceDependencies/MxAccessInitialConnect* parameters that only applied to the legacy host. Adds a closing note pointing operators at the separate mxaccessgw install - Uninstall-Services.ps1: keep OtOpcUaGalaxyHost in the cleanup loop so pre-7.2 rigs upgrade-uninstall cleanly, plus add OtOpcUaWonderwareHistorian - scripts/e2e/test-galaxy.ps1: deleted (drove the legacy E2E) - scripts/e2e/e2e-config.sample.json: rewrite the galaxy section comment to reflect the GalaxyMxGateway-only path - scripts/e2e/README.md: drop OtOpcUaGalaxyHost references - scripts/compliance/phase-7-compliance.ps1: drop Galaxy.Shared HistorianAlarms* checks (those contracts moved to Driver.Historian.Wonderware.Client in PR 3.4) Live state: OtOpcUaGalaxyHost Windows service stopped + removed via NSSM before this commit. The dev box's Galaxy access is now exclusively through the running mxaccessgw (separate repo). Stays out of scope for PR 7.2 (PR 7.3 territory): - CLAUDE.md Galaxy section rewrite - mxaccess_documentation.md deletion - Memory entries for the now-retired Galaxy.Host service Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
86 lines
4.5 KiB
JSON
86 lines
4.5 KiB
JSON
{
|
|
"$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": "10.100.0.35: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://10.100.0.35: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://10.100.0.35/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": "10.100.0.35:1102",
|
|
"cpu": "S71500",
|
|
"slot": 0,
|
|
"address": "DB1.DBW0",
|
|
"bridgeNodeId": "ns=2;s=S7/DB1_DBW0"
|
|
},
|
|
|
|
"focas": {
|
|
"$comment": "Gated behind FOCAS_TRUST_WIRE=1 for real-CNC runs, or pass -ProfileName to run against the focas-mock Docker fixture. Managed wire client — no native dependencies.",
|
|
"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"
|
|
},
|
|
|
|
"galaxy": {
|
|
"$comment": "Galaxy (MXAccess) driver. Has no per-driver CLI — all stages go through otopcua-cli against the published NodeIds. Seven stages: probe / source read / virtual-tag bridge / subscribe-sees-change / reverse write / alarm fires / history read. The driver is now the in-process GalaxyDriver (DriverType = 'GalaxyMxGateway') talking gRPC to a separately-installed mxaccessgw at http://localhost:5120 by default — override via the DriverInstance row's DriverConfig. PR 7.2 retired the legacy 'Galaxy' DriverType + OtOpcUaGalaxyHost service.",
|
|
"sourceNodeId": "ns=2;s=p7-smoke-tag-source",
|
|
"virtualNodeId": "ns=2;s=p7-smoke-vt-derived",
|
|
"alarmNodeId": "ns=2;s=p7-smoke-al-overtemp",
|
|
"alarmTriggerValue": "75",
|
|
"changeWaitSec": 10,
|
|
"alarmWaitSec": 10,
|
|
"historyLookbackSec": 3600
|
|
},
|
|
|
|
"opcuaclient": {
|
|
"$comment": "OPC UA Client (gateway) driver. Default opc-plc Docker fixture exposes ns=3;s=FastUInt1 as a ticker. The `bridgeNodeId` is the local mirror of remoteNodeId after the OpcUaClient driver's DiscoverAsync runs — dev-specific. Stages 5/7/8 are opt-in: supply writable* NodeIds to enable reverse-bridge, alarmNodeId to enable alarm, historyNodeId to enable history (opc-plc does not historize by default — a Prosys / UA Expert sample server is needed for stage 8).",
|
|
"remoteUrl": "opc.tcp://10.100.0.35:50000",
|
|
"remoteNodeId": "ns=3;s=FastUInt1",
|
|
"bridgeNodeId": "ns=2;s=OpcUaClient/FastUInt1",
|
|
"bridgeRootNodeId": "ns=2;s=OpcUaClient",
|
|
"browseDepth": 3,
|
|
"browseMinNodes": 5,
|
|
"changeWaitSec": 8,
|
|
"writableRemoteNodeId": "",
|
|
"writableBridgeNodeId": "",
|
|
"alarmNodeId": "",
|
|
"historyNodeId": ""
|
|
},
|
|
|
|
"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"
|
|
}
|
|
}
|