# samuelventura/sharpmodbus architecture

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

- Interactive diagram: https://gitdiagram.com/samuelventura/sharpmodbus
- Repository: https://github.com/samuelventura/sharpmodbus

## Overview

SharpModbus is a C# Modbus master library for RTU over serial and TCP over sockets. An application invokes ModbusMaster operations; commands represent reads and writes, protocol wrappers encode transport framing, and streams exchange bytes with a device. The library also includes command parsing and an in-memory ModbusModel that commands can read or update. The README documents RTU/TCP and coil/register operations; source excerpts confirm command encoding, parsing, model application, and transport implementations. Wiring among unsampled scanners and protocol components is shown only where supported by their named roles.

Main entry points: [`SharpModbus/ModbusMaster.cs`](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusMaster.cs) (Modbus master), [`SharpModbus/Commands`](https://github.com/samuelventura/sharpmodbus/tree/master/SharpModbus/Commands) (Function commands), [`SharpModbus/ModbusRTUWrapper.cs`](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusRTUWrapper.cs) (RTU wrapper), [`SharpModbus/ModbusTCPWrapper.cs`](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusTCPWrapper.cs) (TCP wrapper)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Master API"]
  node_master["Modbus master<br/>[ModbusMaster.cs]"]
  node_commands["Function commands"]
  node_parser["Command parser<br/>[ModbusParser.cs]"]
end

subgraph group_protocol["Protocol Encoding"]
  node_rtu_protocol["RTU protocol"]
  node_tcp_protocol["TCP protocol"]
  node_rtu_wrapper["RTU wrapper"]
  node_tcp_wrapper["TCP wrapper"]
  node_codec["Modbus helpers<br/>[ModbusHelper.cs]"]
  node_rtu_scanner["RTU scanner"]
  node_tcp_scanner["TCP scanner"]
end

subgraph group_transport["Transport I/O"]
  node_serial_stream["Serial transport"]
  node_socket_stream["Socket transport"]
  node_serial_device["Serial device<br/>[SerialDevice.cs]"]
  node_serial_settings["Serial settings<br/>[SerialSettings.cs]"]
  node_serial_io["Serial stream<br/>[SerialStream.cs]"]
end

subgraph group_model["Command Model"]
  node_model[("In-memory model<br/>[ModbusModel.cs]")]
  node_exception["Modbus exceptions<br/>[ModbusException.cs]"]
end

node_application(("Application"))
node_device(("Modbus device"))

node_application -->|"invokes"| node_master
node_master -->|"creates operations"| node_commands
node_master -->|"uses RTU"| node_rtu_protocol
node_master -->|"uses TCP"| node_tcp_protocol
node_master -->|"exchanges bytes"| node_serial_stream
node_master -->|"exchanges bytes"| node_socket_stream
node_parser -->|"creates commands"| node_commands
node_rtu_protocol -->|"wraps and parses"| node_rtu_wrapper
node_tcp_protocol -->|"wraps and parses"| node_tcp_wrapper
node_rtu_wrapper -->|"delegates encoding"| node_commands
node_tcp_wrapper -->|"delegates encoding"| node_commands
node_commands -->|"encodes values"| node_codec
node_commands -->|"reads or updates"| node_model
node_serial_stream -->|"uses stream"| node_serial_io
node_serial_io -->|"reads and writes"| node_serial_device
node_serial_device -->|"applies settings"| node_serial_settings
node_serial_stream -->|"transfers RTU"| node_device
node_socket_stream -->|"transfers TCP"| node_device
node_rtu_wrapper -->|"raises protocol errors"| node_exception
node_tcp_wrapper -->|"raises protocol errors"| node_exception

click node_master "https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusMaster.cs"
click node_commands "https://github.com/samuelventura/sharpmodbus/tree/master/SharpModbus/Commands"
click node_parser "https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusParser.cs"
click node_rtu_protocol "https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusRTUProtocol.cs"
click node_tcp_protocol "https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusTCPProtocol.cs"
click node_rtu_wrapper "https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusRTUWrapper.cs"
click node_tcp_wrapper "https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusTCPWrapper.cs"
click node_codec "https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusHelper.cs"
click node_rtu_scanner "https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusRTUScanner.cs"
click node_tcp_scanner "https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusTCPScanner.cs"
click node_serial_stream "https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusSerialStream.cs"
click node_socket_stream "https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusSocketStream.cs"
click node_serial_device "https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/Serial/SerialDevice.cs"
click node_serial_settings "https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/Serial/SerialSettings.cs"
click node_serial_io "https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/Serial/SerialStream.cs"
click node_model "https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusModel.cs"
click node_exception "https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusException.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_master,node_commands,node_parser toneBlue
class node_rtu_protocol,node_tcp_protocol,node_rtu_wrapper,node_tcp_wrapper,node_codec,node_rtu_scanner,node_tcp_scanner toneAmber
class node_serial_stream,node_socket_stream,node_serial_device,node_serial_settings,node_serial_io toneMint
class node_model,node_exception toneRose
class node_application,node_device toneIndigo
```

## Components

### Master API

- [Modbus master](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusMaster.cs): `SharpModbus/ModbusMaster.cs`
- [Function commands](https://github.com/samuelventura/sharpmodbus/tree/master/SharpModbus/Commands): `SharpModbus/Commands`
- [Command parser](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusParser.cs): `SharpModbus/ModbusParser.cs`

### Protocol Encoding

- [RTU protocol](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusRTUProtocol.cs): `SharpModbus/ModbusRTUProtocol.cs`
- [TCP protocol](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusTCPProtocol.cs): `SharpModbus/ModbusTCPProtocol.cs`
- [RTU wrapper](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusRTUWrapper.cs): `SharpModbus/ModbusRTUWrapper.cs`
- [TCP wrapper](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusTCPWrapper.cs): `SharpModbus/ModbusTCPWrapper.cs`
- [Modbus helpers](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusHelper.cs): `SharpModbus/ModbusHelper.cs`
- [RTU scanner](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusRTUScanner.cs): `SharpModbus/ModbusRTUScanner.cs`
- [TCP scanner](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusTCPScanner.cs): `SharpModbus/ModbusTCPScanner.cs`

### Transport I/O

- [Serial transport](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusSerialStream.cs): `SharpModbus/ModbusSerialStream.cs`
- [Socket transport](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusSocketStream.cs): `SharpModbus/ModbusSocketStream.cs`
- [Serial device](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/Serial/SerialDevice.cs): `SharpModbus/Serial/SerialDevice.cs`
- [Serial settings](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/Serial/SerialSettings.cs): `SharpModbus/Serial/SerialSettings.cs`
- [Serial stream](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/Serial/SerialStream.cs): `SharpModbus/Serial/SerialStream.cs`

### Command Model

- [In-memory model](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusModel.cs): `SharpModbus/ModbusModel.cs`
- [Modbus exceptions](https://github.com/samuelventura/sharpmodbus/blob/master/SharpModbus/ModbusException.cs): `SharpModbus/ModbusException.cs`

### Other components

- **Application**
- **Modbus device**

## Connections

- Application → Modbus master: invokes
- Modbus master → Function commands: creates operations
- Modbus master → RTU protocol: uses RTU
- Modbus master → TCP protocol: uses TCP
- Modbus master → Serial transport: exchanges bytes
- Modbus master → Socket transport: exchanges bytes
- Command parser → Function commands: creates commands
- RTU protocol → RTU wrapper: wraps and parses
- TCP protocol → TCP wrapper: wraps and parses
- RTU wrapper → Function commands: delegates encoding
- TCP wrapper → Function commands: delegates encoding
- Function commands → Modbus helpers: encodes values
- Function commands → In-memory model: reads or updates
- Serial transport → Serial stream: uses stream
- Serial stream → Serial device: reads and writes
- Serial device → Serial settings: applies settings
- Serial transport → Modbus device: transfers RTU
- Socket transport → Modbus device: transfers TCP
- RTU wrapper → Modbus exceptions: raises protocol errors
- TCP wrapper → Modbus exceptions: raises protocol errors
