Modbus RTU Treiber
Übersicht
Modbus RTU — Modbus-Variante, die über serielle RS-485 / RS-232-Verbindungen arbeitet. Native Neufassung vom Juli 2026 — die frühere Delegation an Apache PLC4j modbus-rtu wurde entfernt. Jetzt wird die native RTU-over-TCP-Implementierung (ModbusRtuOverTcp) aus plantpulse-plc-protocol verwendet. Serielle RTU-Geräte werden über serielle TCP-Konverter exponiert und mit host:port registriert — der Treiber behandelt nur TCP-Sockets.
| Artikel | Wert |
|---|---|
opc_type | MODBUS_RTU |
| Implementierungsklasse | plantpulse.driver.protocol.modbus.ModbusRTUDriver |
| Bibliothek | Eigene native (plantpulse-plc-protocol von ModbusRtuOverTcp) |
| Vererbung | AbstractNativeModbusDriver (nicht PLC4j) |
| read | ✅ |
| write | ✅ (coil / holding-register) |
| Sicherheit | Keine (Modbus-Standard selbst) |
Der native Treiber behandelt nur TCP-Sockets. RS-485/232-Geräte werden über serielle↔TCP-Konverter (z. B. USR-TCP232, Moxa NPort) exponiert, und die IP:Port des Konverters wird mit opc_agent_ip / opc_agent_port registriert. Baudrate / Parität / Stoppbits usw. werden auf der Konverter-Seite konfiguriert; der Treiber verwendet diese Parameter nicht.
Klassenstruktur
AbstractNativeModbusDriver (주소 파싱 · 디코드 · read/write 공통)
└── ModbusRTUDriver — createClient() = new ModbusRtuOverTcp(unitId, host, port)
└── ModbusTCPDriver — createClient() = new ModbusTcp(unitId, host, port)
Das RTU-Framing (Slave-Adresse + PDU + CRC-16 LE) wird von ModbusRtuOverTcp über den TCP-Stream verarbeitet.
OPC-Registrierungsoptionen
| Feld | Bedeutung | Standard |
|---|---|---|
opc_agent_ip | IP des seriellen TCP-Konverters | 192.168.0.60 |
opc_agent_port | TCP-Port des Konverters | Konverter-Einstellung (z. B. 502 / 4001) |
options.unit-id (Alias unit-identifier) | Modbus-Slave-ID (1..247) | 1 |
options.request-timeout | Antwort-Timeout (ms) | 5000 |
baud-rate/parity/stop-bitsusw. serielle Parameter sind Konverter-Einstellungen — der Treiber empfängt sie nicht.
Tag plc_address-Format
Gleich wie bei Modbus TCP — <area>:<address>[:<datatype>][[<count>]] (PLC4X modbus4x-Syntax beibehalten, 1-basiert):
| Notation | Bedeutung |
|---|---|
coil:1 | FC 01 — Read Coils |
discrete-input:1 | FC 02 — Read Discrete Inputs |
holding-register:1 | FC 03 — Read Holding Registers (signed 16) |
holding-register:1:UINT | unsigned 16 |
holding-register:1:DINT | signed 32 (2 Register, MSWord zuerst) |
holding-register:1:REAL | 32-Bit-Float (2 Register) |
holding-register:100:STRING[10] | 10-Wort-ASCII |
input-register:1 | FC 04 — Read Input Registers |
Detaillierte Notationsregeln / data_type · format-Zuordnung finden Sie auf der Modbus TCP Treiberseite.
Write (nativ)
coil:N→ einzelnes Coil-Schreiben (Boolean).holding-register:N[:TYPE]→ Register-Schreiben je nach Datentyp (REAL/DINT= 2 Register mit MSWord zuerst, sonst einzelne 16-Bit).discrete-input/input-registersind read-only.
Nicht unterstützte Bereiche
- Direkter serieller Port (
/dev/ttyUSB0) — nicht unterstützt. Voraussetzung ist die Nutzung eines seriellen TCP-Konverters. - Multi-Master / Token-Passing — nur ein einzelner Master.
- Modbus ASCII (mit Doppelpunkt getrennt, LRC-Prüfsumme) — nur RTU-Framing.
Hinweise
- Modbus over Serial Line (V1.02) — Modbus-IDA.
- Code:
plantpulse-edge-driver/src/plantpulse/driver/protocol/modbus/ModbusRTUDriver.java+plantpulse-plc-protocolimmodbus-Paket. - Betrieb: Statt USB ↔ RS-485-Adapter seriellen TCP-Konverter verwenden und 120-Ω-Abschlusswiderstand prüfen. Bei falscher Unit-ID / Baudrate treten nur Timeouts auf.