Modbus RTU, ASCII und TCP mit SerialTool

Was ist Modbus?

Modbus ist ein seriöses Kommunikationsprotokoll, das 1979 von Modicon® (jetzt Teil von Schneider Electric) entwickelt wurde, um seine programmierbaren Logiksteuerungen (PLCs) zu verbinden. Es hat sich zu einem De-facto-Standard in der industriellen Kommunikation entwickelt und ist eines der weltweit am häufigsten verwendeten Verbindungsprotokolle für industrielle elektronische Geräte. Modbus ist ein lizenzfreies Protokoll, das als Spezifikationen auf der Website von The Modbus Organization veröffentlicht wurde.

Einfach ausgedrückt handelt es sich um eine Methode, Informationen über serielle Leitungen zwischen elektronischen Geräten zu übertragen. Das Gerät, das Informationen anfordert, wird als Modbus-Client bezeichnet, und die Geräte, die Informationen bereitstellen, sind Modbus-Server. In einem Standard-Modbus-Netzwerk gibt es einen Client und bis zu 247 Server, jeder mit einer eindeutigen Serveradresse von 1 bis 247. Der Client kann auch Informationen an die Server senden.


Ursprünglich für den industriellen Einsatz konzipiert, wurde dieses Protokoll im Laufe der Zeit in verschiedenen Branchen übernommen und ist zu einem der am weitesten verbreiteten Protokolle geworden. Selbst heute, nach mehr als 40 Jahren, ist es in vielen Geräten verfügbar, wie Bedienpanels, PLCs, Hausautomation und sogar in einfachen Geräten wie Arduino integriert.

Modbus RTU und ASCII-Übertragung über Serie

Die Kommunikation sollte bei der Erstellung des Protokolls über einen seriellen Port erfolgen, weshalb es in SerialTool implementiert wurde. Modbus wird häufig verwendet, um einen Überwachungscomputer mit einer Remote-Terminal-Unit (RTU) in Überwachungssteuerungs- und Datenerfassungssystemen (SCADA) zu verbinden. Abhängig vom Format, in dem die Daten übertragen werden, wird das Protokoll in folgende Typen unterteilt:

  • MODBUS RTU - Daten werden im hexadezimalen Format übertragen.
  • MODBUS ASCII - Daten werden im ASCII-Format übertragen.

Die Fehlerkontrolle unterscheidet sich in den beiden Fällen; bei MODBUS RTU wird eine Cyclic Redundancy Check (CRC)-Prüfung verwendet und nach den Befehlen gesendet, während bei MODBUS ASCII eine Longitudinal Redundancy Check (LRC)-Prüfung nach den Befehlen gesendet wird.

Modbus TCP-Übertragung

Im Jahr 1999 wurde "Modbus TCP" entwickelt, ein Standard, der für Netzwerke mit dem TCP/IP-Protokollsuite entwickelt wurde. Es handelt sich im Wesentlichen um eine Version von Modbus seriell RTU, die auf TCP/IP basiert und die Kommunikation über Internet-/Intranetnetzwerke ermöglicht. In den letzten Jahren wird die TCP/IP-Version zunehmend verwendet, da sie Open Source ist, leicht zu implementieren ist, geringe Entwicklungskosten hat und minimale Hardwareunterstützung benötigt.

Die Fehlerkontrolle unterscheidet sich in den beiden Fällen; bei MODBUS RTU wird eine Cyclic Redundancy Check (CRC)-Prüfung verwendet und nach den Befehlen gesendet, während bei MODBUS ASCII eine Longitudinal Redundancy Check (LRC)-Prüfung nach den Befehlen gesendet wird.

Das Modbus TCP/IP-Protokoll verwendet die binäre Codierung von Daten und den TCP/IP-Fehlererkennungsmechanismus. Im Gegensatz zum seriellen Modbus ist die TCP/IP-Version verbindungsbasiert und ermöglicht gleichzeitige Ausführungen am selben Slave oder an mehreren Geräten. Modbus TCP/IP verwendet auch das Master-Slave-Paradigma, und diese Kommunikation verwendet vier Arten von Nachrichten.

Modbus befindet sich auf Layer 7 im ISO/OSI-Modell (Anwendungsschicht) und definiert ein Nachrichtenformat namens Framing sowie die Art der Übertragung von Daten und Steuerfunktionen. Die Kommunikation erfolgt durch das Client-Server-Paradigma. Das Protokoll definiert eine Protocol Data Unit (PDU), die nicht von der zugrunde liegenden Kommunikationsschicht abhängt. Die Application Data Unit (ADU) führt zusätzliche Felder für die Adressierung und Fehlerkontrolle ein.

SerialTool Modbus Client

SerialTool unterstützt die Übertragungsmodi RTU, ASCII und Modbus TCP, um die maximale professionelle Flexibilität eines Modbus-Clients zu bieten.
SerialTool bietet auch die Möglichkeit, Raw-Befehle zu senden, um die Anforderungen jedes Entwicklers zu erleichtern.

Bildschirm mit dem Protokoll der gesendeten Befehle

Bildschirm mit gesendeten Low-Level-Befehlen


Modbus-Funktionen

Hier sind die Funktionen aufgeführt, die SerialTool für das Modbus-Protokoll implementiert.

Funktionscode Aktion Tabellenname
0x01 Lesen Discrete Output Coils
0x02 Lesen Discrete Input Contacts
0x03 Lesen Analog Output Holding Register
0x04 Lesen Analog Input Registers
0x05 Schreiben Einzel Discrete Output Coil
0x06 Schreiben Einzel Analog Output Holding Register
0x0F (dez 15) Schreiben Mehrfach Discrete Output Coils
0x10 (dez 16) Schreiben Mehrfach Analog Output Holding Registers

Modbus-Datenstrukturen

Informationen werden im Servergerät in vier verschiedenen Tabellen gespeichert. Zwei Tabellen speichern diskrete Ein-/Ausschaltwerte (Spulen), und zwei speichern numerische Werte (Register). Sowohl Spulen als auch Register haben eine Tabelle nur für Lesezugriff und eine Tabelle für Lese-/Schreibzugriff. Jede Tabelle hat 9999 Werte. Jede Spule oder jeder Kontakt ist 1 Bit und hat eine Datenadresse zwischen 0000 und 270E. Jedes Register ist 1 Wort = 16 Bits = 2 Bytes und hat ebenfalls eine Datenadresse zwischen 0000 und 270E.

Spulen-/Registernummern Datenadressen Typ Tabellenname
1-9999 0x0000 bis 0x270E Lesen/Schreiben Discrete Output Coils
10001-19999 0x0000 bis 0x270E Nur Lesen Discrete Input Contacts
30001-39999 0x0000 bis 0x270E Nur Lesen Analog Input Register
40001-49999 0x0000 bis 0x270E Lesen/Schreiben Analog Output Holding Register