# OtOpcUa OPC UA server (.NET 10 AnyCPU) that exposes a fleet of industrial drivers as a single OPC UA address space. Drivers ship in-process for AVEVA System Platform Galaxy (via the sibling `mxaccessgw` repo), Modbus TCP, Siemens S7, Allen-Bradley CIP (ControlLogix / CompactLogix), Allen-Bradley Legacy (SLC 500 / MicroLogix), Beckhoff TwinCAT (ADS), FANUC FOCAS, and OPC UA Client (gateway). A cross-platform client stack (.NET 10) — shared library, CLI, and Avalonia desktop app — connects to any OPC UA server. ## Architecture ``` OPC UA Clients (CLI, Desktop UI, 3rd-party) | v +-------------------------------------+ | OtOpcUa.Server (.NET 10 AnyCPU) | | address space + capability fan-out| +-------------------------------------+ | | | | | | | | Galaxy Modbus S7 AbCip AbLeg TwinCAT FOCAS OpcUaClient | v mxaccessgw (sibling repo, gRPC) | v MXAccess COM (x86 worker, on AVEVA box) ``` Galaxy is the only driver with an external runtime: it speaks gRPC to a separately installed `mxaccessgw` server (sibling repo at `c:\Users\dohertj2\Desktop\mxaccessgw\`) which owns the MXAccess COM apartment and the x86/STA bitness constraint server-side. Everything in this repo is platform-agnostic .NET 10. ## Prerequisites - .NET 10 SDK (server, drivers, clients all target .NET 10) - SQL Server reachable for the central config DB - For Galaxy specifically: a running `mxaccessgw` deployment — see [docs/v2/Galaxy.ParityRig.md](docs/v2/Galaxy.ParityRig.md) - For Wonderware Historian read-back: optional `OtOpcUaWonderwareHistorian` sidecar — see [docs/ServiceHosting.md](docs/ServiceHosting.md) ## Quick Start ```bash dotnet restore ZB.MOM.WW.OtOpcUa.slnx dotnet build ZB.MOM.WW.OtOpcUa.slnx dotnet test ZB.MOM.WW.OtOpcUa.slnx # Run the server in dev (foreground) dotnet run --project src/ZB.MOM.WW.OtOpcUa.Server ``` The server starts on `opc.tcp://localhost:4840` with the `None` security profile. Configure `Security.Profiles` in `src/ZB.MOM.WW.OtOpcUa.Server/appsettings.json` to enable `Basic256Sha256-Sign` or `Basic256Sha256-SignAndEncrypt`. See [docs/security.md](docs/security.md). ## Install as Windows Services Production deployment is driven by `scripts/install/Install-Services.ps1`, which registers the `OtOpcUa` server service (and optionally the `OtOpcUaWonderwareHistorian` sidecar) under a chosen service account. Galaxy support requires a separately installed `mxaccessgw` — neither this repo nor the install script provisions it. ```powershell .\scripts\install\Install-Services.ps1 ` -InstallRoot 'C:\Program Files\OtOpcUa' ` -ServiceAccount 'DOMAIN\svc-otopcua' ``` Add `-InstallWonderwareHistorian` for the historian sidecar. See the script header and [docs/ServiceHosting.md](docs/ServiceHosting.md) for full options. ## Client CLI ```bash dotnet run --project src/ZB.MOM.WW.OtOpcUa.Client.CLI -- connect -u opc.tcp://localhost:4840 dotnet run --project src/ZB.MOM.WW.OtOpcUa.Client.CLI -- browse -u opc.tcp://localhost:4840 -r -d 3 dotnet run --project src/ZB.MOM.WW.OtOpcUa.Client.CLI -- read -u opc.tcp://localhost:4840 -n "ns=2;s=SomeNode" dotnet run --project src/ZB.MOM.WW.OtOpcUa.Client.CLI -- write -u opc.tcp://localhost:4840 -n "ns=2;s=SomeNode" -v 42 dotnet run --project src/ZB.MOM.WW.OtOpcUa.Client.CLI -- subscribe -u opc.tcp://localhost:4840 -n "ns=2;s=SomeNode" -i 500 ``` See [docs/Client.CLI.md](docs/Client.CLI.md) and [docs/Client.UI.md](docs/Client.UI.md). ## Documentation | Topic | Doc | |---|---| | Driver specs (per-driver capability surface, config, addressing) | [docs/v2/driver-specs.md](docs/v2/driver-specs.md) | | Galaxy driver | [docs/drivers/Galaxy.md](docs/drivers/Galaxy.md) | | Modbus / S7 / AbCip / AbLegacy / TwinCAT / FOCAS / OpcUaClient | [docs/drivers/](docs/drivers/) | | Galaxy parity rig (mxaccessgw setup) | [docs/v2/Galaxy.ParityRig.md](docs/v2/Galaxy.ParityRig.md) | | Galaxy performance + tracing | [docs/v2/Galaxy.Performance.md](docs/v2/Galaxy.Performance.md) | | Service hosting | [docs/ServiceHosting.md](docs/ServiceHosting.md) | | Security (transport, LDAP, certificates) | [docs/security.md](docs/security.md) | | Redundancy | [docs/Redundancy.md](docs/Redundancy.md) | | Address space | [docs/AddressSpace.md](docs/AddressSpace.md) | | Configuration | [docs/Configuration.md](docs/Configuration.md) | | Status dashboard | [docs/StatusDashboard.md](docs/StatusDashboard.md) | ## License Internal use only.