# masesgroup/plconnet architecture

> Architecture diagram of the GitHub repository masesgroup/plconnet, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/masesgroup/plconnet
- Repository: https://github.com/masesgroup/plconnet

## Overview

PLCOnNet is a .NET suite that exposes Apache PLC4X capabilities to .NET applications, with command-line and PowerShell tools. Its central usage path initializes the bridge runtime, opens a PLC connection, creates read/write/subscription requests, and processes responses or events. The sample template documents that workflow; README examples reinforce initialization, feature checks, request execution, and response analysis. Edges are limited to relationships shown in excerpts, the source index, or README; unsampled driver internals and protocol transports are not expanded.

Main entry points: [`src/net/templates/templates/plconnetApp/Program.cs`](https://github.com/masesgroup/plconnet/blob/master/src/net/templates/templates/plconnetApp/Program.cs) (Sample application), [`src/net/PLCOnNet/Generated/Org/Apache/Plc4x/JavaNs/Api/PlcDriverManager.cs`](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNet/Generated/Org/Apache/Plc4x/JavaNs/Api/PlcDriverManager.cs) (Driver manager), [`src/net/PLCOnNetPS/PLCOnNetPSHelper.cs`](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/PLCOnNetPSHelper.cs) (PowerShell settings), [`src/net/PLCOnNetCLI/PLCOnNetCLICore.cs`](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetCLI/PLCOnNetCLICore.cs) (CLI runtime core)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime[".NET PLC runtime"]
  node_runtime_core["Runtime initialization<br/>[PLCOnNetCore.cs]"]
  node_driver_manager["Driver manager"]
  node_connection["PLC connection<br/>[PlcConnection.cs]"]
end

subgraph group_operations["PLC operations"]
  node_requests["Request builders"]
  node_responses["Responses and events"]
  node_async_extensions["Async request helpers"]
end

subgraph group_cli["Command-line tools"]
  node_cli_program["CLI entry point<br/>[Program.cs]"]
  node_cli_core["CLI runtime core<br/>[PLCOnNetCLICore.cs]"]
end

subgraph group_powershell["PowerShell tools"]
  node_ps_core["PowerShell core<br/>[PLCOnNetPSCore.cs]"]
  node_ps_cmdlet_base["Cmdlet base"]
  node_ps_connection["Get connection"]
  node_ps_driver["Get driver"]
  node_ps_protocols["List protocols"]
  node_ps_start["Start cmdlet base"]
  node_ps_helper["PowerShell settings"]
  node_ps_start_command["Start cmdlet"]
end

subgraph group_template["App template"]
  node_template_app["Sample application<br/>[Program.cs]"]
end

node_developer((".NET developer"))
node_plc4x{{"PLC4X drivers"}}

node_developer -->|"uses example"| node_template_app
node_template_app -->|"initializes"| node_runtime_core
node_template_app -->|"gets driver"| node_driver_manager
node_template_app -->|"opens connection"| node_connection
node_template_app -->|"builds requests"| node_requests
node_template_app -->|"handles results"| node_responses
node_template_app -.->|"executes requests"| node_async_extensions
node_cli_program -->|"starts"| node_cli_core
node_cli_core -->|"extends"| node_runtime_core
node_ps_core -->|"extends"| node_cli_core
node_ps_connection -->|"extends"| node_ps_cmdlet_base
node_ps_connection -->|"gets connection"| node_driver_manager
node_ps_driver -->|"extends"| node_ps_cmdlet_base
node_ps_driver -->|"gets driver"| node_driver_manager
node_ps_protocols -->|"extends"| node_ps_cmdlet_base
node_ps_protocols -->|"lists protocols"| node_driver_manager
node_ps_start_command -->|"inherits"| node_ps_start
node_ps_start -->|"sets logging"| node_ps_helper
node_ps_helper -->|"configures paths"| node_runtime_core
node_ps_helper -->|"sets properties"| node_ps_core
node_driver_manager -.->|"uses drivers"| node_plc4x

click node_runtime_core "https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNet/PLCOnNetCore.cs"
click node_driver_manager "https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNet/Generated/Org/Apache/Plc4x/JavaNs/Api/PlcDriverManager.cs"
click node_connection "https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNet/Generated/Org/Apache/Plc4x/JavaNs/Api/PlcConnection.cs"
click node_requests "https://github.com/masesgroup/plconnet/tree/master/src/net/PLCOnNet/Generated/Org/Apache/Plc4x/JavaNs/Api/Messages"
click node_responses "https://github.com/masesgroup/plconnet/tree/master/src/net/PLCOnNet/Generated/Org/Apache/Plc4x/JavaNs/Api/Messages"
click node_async_extensions "https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNet/Specific/PLCOnNetExtensions.cs"
click node_cli_program "https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetCLI/Program.cs"
click node_cli_core "https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetCLI/PLCOnNetCLICore.cs"
click node_ps_core "https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/PLCOnNetPSCore.cs"
click node_ps_cmdlet_base "https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/Cmdlet/PLCOnNetPSCmdlet.cs"
click node_ps_connection "https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/Cmdlet/GetPlcConnectionCmdletCommand.cs"
click node_ps_driver "https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/Cmdlet/GetPlcDriverCmdletCommand.cs"
click node_ps_protocols "https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/Cmdlet/GetProtocolCodesCmdletCommand.cs"
click node_ps_start "https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/Cmdlet/StartPLCOnNetPSCmdletCommandBase.cs"
click node_ps_helper "https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/PLCOnNetPSHelper.cs"
click node_ps_start_command "https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/Cmdlet/StartPLCOnNetPSCmdletCommand.cs"
click node_template_app "https://github.com/masesgroup/plconnet/blob/master/src/net/templates/templates/plconnetApp/Program.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_runtime_core,node_driver_manager,node_connection toneBlue
class node_requests,node_responses,node_async_extensions toneAmber
class node_cli_program,node_cli_core toneMint
class node_ps_core,node_ps_cmdlet_base,node_ps_connection,node_ps_driver,node_ps_protocols,node_ps_start,node_ps_helper,node_ps_start_command toneRose
class node_template_app,node_developer,node_plc4x toneIndigo
```

## Components

### .NET PLC runtime

- [Runtime initialization](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNet/PLCOnNetCore.cs): `src/net/PLCOnNet/PLCOnNetCore.cs`
- [Driver manager](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNet/Generated/Org/Apache/Plc4x/JavaNs/Api/PlcDriverManager.cs): `src/net/PLCOnNet/Generated/Org/Apache/Plc4x/JavaNs/Api/PlcDriverManager.cs`
- [PLC connection](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNet/Generated/Org/Apache/Plc4x/JavaNs/Api/PlcConnection.cs): `src/net/PLCOnNet/Generated/Org/Apache/Plc4x/JavaNs/Api/PlcConnection.cs`

### PLC operations

- [Request builders](https://github.com/masesgroup/plconnet/tree/master/src/net/PLCOnNet/Generated/Org/Apache/Plc4x/JavaNs/Api/Messages): `src/net/PLCOnNet/Generated/Org/Apache/Plc4x/JavaNs/Api/Messages`
- [Responses and events](https://github.com/masesgroup/plconnet/tree/master/src/net/PLCOnNet/Generated/Org/Apache/Plc4x/JavaNs/Api/Messages): `src/net/PLCOnNet/Generated/Org/Apache/Plc4x/JavaNs/Api/Messages`
- [Async request helpers](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNet/Specific/PLCOnNetExtensions.cs): `src/net/PLCOnNet/Specific/PLCOnNetExtensions.cs`

### Command-line tools

- [CLI entry point](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetCLI/Program.cs): `src/net/PLCOnNetCLI/Program.cs`
- [CLI runtime core](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetCLI/PLCOnNetCLICore.cs): `src/net/PLCOnNetCLI/PLCOnNetCLICore.cs`

### PowerShell tools

- [PowerShell core](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/PLCOnNetPSCore.cs): `src/net/PLCOnNetPS/PLCOnNetPSCore.cs`
- [Cmdlet base](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/Cmdlet/PLCOnNetPSCmdlet.cs): `src/net/PLCOnNetPS/Cmdlet/PLCOnNetPSCmdlet.cs`
- [Get connection](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/Cmdlet/GetPlcConnectionCmdletCommand.cs): `src/net/PLCOnNetPS/Cmdlet/GetPlcConnectionCmdletCommand.cs`
- [Get driver](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/Cmdlet/GetPlcDriverCmdletCommand.cs): `src/net/PLCOnNetPS/Cmdlet/GetPlcDriverCmdletCommand.cs`
- [List protocols](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/Cmdlet/GetProtocolCodesCmdletCommand.cs): `src/net/PLCOnNetPS/Cmdlet/GetProtocolCodesCmdletCommand.cs`
- [Start cmdlet base](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/Cmdlet/StartPLCOnNetPSCmdletCommandBase.cs): `src/net/PLCOnNetPS/Cmdlet/StartPLCOnNetPSCmdletCommandBase.cs`
- [PowerShell settings](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/PLCOnNetPSHelper.cs): `src/net/PLCOnNetPS/PLCOnNetPSHelper.cs`
- [Start cmdlet](https://github.com/masesgroup/plconnet/blob/master/src/net/PLCOnNetPS/Cmdlet/StartPLCOnNetPSCmdletCommand.cs): `src/net/PLCOnNetPS/Cmdlet/StartPLCOnNetPSCmdletCommand.cs`

### App template

- [Sample application](https://github.com/masesgroup/plconnet/blob/master/src/net/templates/templates/plconnetApp/Program.cs): `src/net/templates/templates/plconnetApp/Program.cs`

### Other components

- **.NET developer**
- **PLC4X drivers**

## Connections

- .NET developer → Sample application: uses example (evidence: `README.md`)
- Sample application → Runtime initialization: initializes (evidence: `src/net/templates/templates/plconnetApp/Program.cs`)
- Sample application → Driver manager: gets driver (evidence: `src/net/templates/templates/plconnetApp/Program.cs`)
- Sample application → PLC connection: opens connection (evidence: `src/net/templates/templates/plconnetApp/Program.cs`)
- Sample application → Request builders: builds requests (evidence: `src/net/templates/templates/plconnetApp/Program.cs`)
- Sample application → Responses and events: handles results (evidence: `src/net/templates/templates/plconnetApp/Program.cs`)
- Sample application → Async request helpers: executes requests
- CLI entry point → CLI runtime core: starts (evidence: `src/net/PLCOnNetCLI/Program.cs`)
- CLI runtime core → Runtime initialization: extends (evidence: `src/net/PLCOnNetCLI/PLCOnNetCLICore.cs`)
- PowerShell core → CLI runtime core: extends (evidence: `src/net/PLCOnNetPS/PLCOnNetPSCore.cs`)
- Get connection → Cmdlet base: extends (evidence: `src/net/PLCOnNetPS/Cmdlet/GetPlcConnectionCmdletCommand.cs`)
- Get connection → Driver manager: gets connection (evidence: `src/net/PLCOnNetPS/Cmdlet/GetPlcConnectionCmdletCommand.cs`)
- Get driver → Cmdlet base: extends (evidence: `src/net/PLCOnNetPS/Cmdlet/GetPlcDriverCmdletCommand.cs`)
- Get driver → Driver manager: gets driver (evidence: `src/net/PLCOnNetPS/Cmdlet/GetPlcDriverCmdletCommand.cs`)
- List protocols → Cmdlet base: extends (evidence: `src/net/PLCOnNetPS/Cmdlet/GetProtocolCodesCmdletCommand.cs`)
- List protocols → Driver manager: lists protocols (evidence: `src/net/PLCOnNetPS/Cmdlet/GetProtocolCodesCmdletCommand.cs`)
- Start cmdlet → Start cmdlet base: inherits (evidence: `src/net/PLCOnNetPS/Cmdlet/StartPLCOnNetPSCmdletCommand.cs`)
- Start cmdlet base → PowerShell settings: sets logging (evidence: `src/net/PLCOnNetPS/Cmdlet/StartPLCOnNetPSCmdletCommandBase.cs`)
- PowerShell settings → Runtime initialization: configures paths (evidence: `src/net/PLCOnNetPS/PLCOnNetPSHelper.cs`)
- PowerShell settings → PowerShell core: sets properties (evidence: `src/net/PLCOnNetPS/PLCOnNetPSHelper.cs`)
- Driver manager → PLC4X drivers: uses drivers
