Zum Hauptinhalt springen

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.

ArtikelWert
opc_typeMODBUS_RTU
Implementierungsklasseplantpulse.driver.protocol.modbus.ModbusRTUDriver
BibliothekEigene native (plantpulse-plc-protocol von ModbusRtuOverTcp)
VererbungAbstractNativeModbusDriver (nicht PLC4j)
read✅
write✅ (coil / holding-register)
SicherheitKeine (Modbus-Standard selbst)
Nicht direkt seriell — Voraussetzung ist ein serieller TCP-Konverter

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​

FeldBedeutungStandard
opc_agent_ipIP des seriellen TCP-Konverters192.168.0.60
opc_agent_portTCP-Port des KonvertersKonverter-Einstellung (z. B. 502 / 4001)
options.unit-id (Alias unit-identifier)Modbus-Slave-ID (1..247)1
options.request-timeoutAntwort-Timeout (ms)5000

baud-rate / parity / stop-bits usw. 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):

NotationBedeutung
coil:1FC 01 — Read Coils
discrete-input:1FC 02 — Read Discrete Inputs
holding-register:1FC 03 — Read Holding Registers (signed 16)
holding-register:1:UINTunsigned 16
holding-register:1:DINTsigned 32 (2 Register, MSWord zuerst)
holding-register:1:REAL32-Bit-Float (2 Register)
holding-register:100:STRING[10]10-Wort-ASCII
input-register:1FC 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-register sind 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-protocol im modbus-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.