Skip to content

Edge Deployment Topologies

The Consystence edge runtime (consystence-edge) is a single-silo .NET 10 Orleans process. It buffers and forwards telemetry to the site server (store-and-forward over SQLite, shipped upstream over gRPC) and reads and writes control values through a pluggable driver layer. This page describes the three deployment topologies in which that runtime connects to control, and which driver each one selects.

The edge runtime is the same on every host. The PLCnext VL3 is a target platform for it, which we are proving in our workshop on a Linux container. In our workshop the edge also runs on an Nvidia Jetson Orin today; the Orin is not a standalone ML appliance. See VL3 edge setup and Orin setup.

Two wire rules hold across every supported topology:

  • Edge ↔ PLCnext is gRPC. The edge reads and writes PLCnext GDS / PORT variables over the PLCnext gRPC API — via a local Unix domain socket (/run/plcnext/grpc.sock) when co-located, or over TCP (PlcNext:GrpcHost / PlcNext:GrpcPort, default 41100) when the PLCnext is containerised or remote. gRPC is the only edge-to-PLCnext protocol; OPC UA is not used as the edge-to-PLCnext transport.
  • PLCnext ↔ field is CIP / EtherNet-IP. The PLCnext border gateway speaks EtherNet/IP CIP (TCP 44818) to field equipment and existing controllers.

Reaching a Rockwell ControlLogix directly from the edge over EtherNet/IP CIP, with no gateway in between, is a supported path for a controller that is not behind a border gateway; the workshop edge reads a physical ControlLogix this way. Modbus TCP and OPC UA runtime drivers are roadmap. See PLCnext border gateway and PLC communication for the protocol detail.

The driver layer has four drivers:

DriverWireUsed by
plcnext-grpcgRPC (UDS or TCP) to PLCnext GDS / PORT variablesNative PLCnext, Gateway-vPLCnext, gateway-mediated Gateway-legacy-PLC
ethernet-ipEtherNet/IP CIP directly from the edgeDirect connection to Rockwell ControlLogix controllers
modbus-tcpModbus TCP (TCP 502)Roadmap: merged in the shared driver layer, not yet used by any acquisition path
stubnone (in-process, no hardware)Simulation, development, CI

The ethernet-ip and modbus-tcp drivers are pure-.NET implementations in the driver layer shared by the edge and the site server — no third-party PLC client library is used on either tier.

flowchart LR
    EDGE["consystence-edge<br/>.NET 10 single-silo Orleans<br/>driver layer"]

    subgraph T1["Native PLCnext"]
      direction TB
      P1["PLCnext border gateway<br/>VL3"]
      F1["Field IO"]
    end
    subgraph T2["Gateway-vPLCnext"]
      direction TB
      P2["Virtual PLCnext Control<br/>container"]
      F2["Field IO"]
    end
    subgraph T3["Gateway-legacy-PLC"]
      direction TB
      P3["PLCnext border gateway"]
      L3["Existing controller<br/>e.g. ControlLogix"]
    end

    EDGE -->|"plcnext-grpc<br/>gRPC-over-UDS"| P1
    EDGE -->|"plcnext-grpc<br/>gRPC (typically TCP)"| P2
    EDGE -->|"plcnext-grpc<br/>gRPC-over-UDS"| P3
    P1 -->|"CIP / EtherNet-IP"| F1
    P2 -->|"CIP / EtherNet-IP"| F2
    P3 -->|"CIP / EtherNet-IP"| L3
    EDGE -.->|"ethernet-ip<br/>direct"| L3
TopologyRuns controlEdge → controlControl → fieldDriver
Native PLCnextPhysical PLCnext border gateway (VL3)gRPC-over-UDS to GDSCIP (TCP 44818)plcnext-grpc
Gateway-vPLCnextProvisioned Virtual PLCnext Control containergRPC to GDS / PORT (typically TCP)CIP via the gatewayplcnext-grpc
Gateway-legacy-PLCExisting controller via the gatewaygRPC-over-UDS to the gatewaygateway scans controller over CIPplcnext-grpc via the gateway; ethernet-ip direct

A physical PLCnext border gateway executes the control logic and owns the field side — driving its own IO modules and/or acting as an EtherNet/IP scanner over CIP. The edge runtime is co-located on the same device (consystence-edge runs as its own service beside the PLCnext runtime) and reads and writes GDS variables over the local socket. The edge selects plcnext-grpc.

This is the target topology for VL3 hardware, not yet validated on it. It gives the lowest latency (no network stack), is strongly typed against the published PLCnext gRPC contracts, and uses the same gRPC transport the edge already uses upstream to the site server.

Where there is no physical PLCnext silicon, control logic runs inside a provisioned Virtual PLCnext Control container — the same PLCnext runtime, virtualised. The edge reaches it with the same driver (plcnext-grpc, gRPC to the container’s GDS / PORT variables), so the edge driver is unchanged from Native — though the gRPC channel typically runs over TCP (PlcNext:GrpcHost / PlcNext:GrpcPort) rather than the co-located Unix socket, since a containerised vPLCnext does not share the edge’s socket namespace. This is the Gateway-vPLCnext control topology: Phoenix Contact vPLCnext runs the PLCnext control program in a container when that execution environment is required, for example where a regulatory requirement means the compiled controller code itself must be validated, or where the logic uses PLCnext-only function blocks. Offering it as an explicit, per-device-instance upgrade at commissioning is roadmap.

An existing Rockwell controller (a ControlLogix) keeps its rack, power supply, IO modules, field wiring and its own program, and is reached via the PLCnext border gateway, which acts as the EtherNet/IP scanner: the gateway speaks CIP (TCP 44818) to the controller, and the edge speaks plcnext-grpc to the gateway. From the edge’s point of view this is the same as the other two topologies.

The direct variant — the edge talking straight to a ControlLogix with no gateway in between, using the ethernet-ip driver — is also supported, and it is how the workshop edge reads its physical ControlLogix. A site server can also read a ControlLogix that no edge serves directly, read-only (early access: our engineers enable it per controller; it has run at a site trial since 28 October 2026; off by default).

In the design, control topology is chosen per device instance at commissioning rather than for a whole site; per-instance topology selection is roadmap. The edge’s wire is set per controller by its driver, so one edge can already connect to a PLCnext over gRPC and a ControlLogix over EtherNet/IP at the same time. See Instances and commissioning. The behavioural contract (states, alarms, commands, tag surface) is declared once in the device-type manifest and is canonical across topologies; only the control implementation and the wire differ.

For development, simulation, and CI, select the stub driver — it runs in-process with no hardware, so the full edge silo can run without a PLC present.

Deploy the edge on segmented plant networks: eth0 faces IT (upstream to the site server) and eth1 faces OT (the field / gateway). When the edge and PLCnext are co-located, the edge ↔ PLCnext gRPC connection is a local Unix domain socket, not a network hop; a containerised or remote vPLCnext is instead reached over gRPC/TCP on the OT side. See Edge network security for the reference firewall policy.

Each edge runs a single Orleans silo; supervisory tag reads and command writes, store-and-forward buffering, and (on the roadmap) edge ML all run inside it.