Serielle Kommunikation – Modbus-Protokoll

Das Modbus-Protokoll verwendet den Master-Slave-Kommunikationsmodus.
Zu den Modbus-Protokollen gehören hauptsächlich Modbus RTU, Modbus ASCII und Modbus TCP. Die ersten beiden unterstützen beide das RS-485-Busprotokoll. Unter anderem verwendet RTU eine binäre Datenausdrucksform, eine kompakte Datenstruktur, eine hohe Kommunikationseffizienz und eine breite Anwendung.


Drei Übertragungsmodi von Modbus
ASCIIModus: Jedes 8-Bit-Byte in den Daten wird als ASCII-Code gesendet. Das Zeitintervall zwischen der Zeichenübertragung kann bis zu 1 Sekunde betragen, ohne dass es zu Fehlern kommt.
RTUModus: Kommunikation im RTU-Modus (Remote Terminal Unit), jedes 8-Bit-Byte enthält zwei 4-Bit-Hexadezimalzeichen. Überträgt mehr Daten als im ASCII-Modus.
TCPModus: Wird zum Verbinden und Übertragen von Daten über Ethernet oder das Internet verwendet, da das Internet dem TCP/IP-Modus folgt.
Der Modbus-Modus wird nicht unbedingt für die serielle Kommunikation verwendet, er kann auch für die TCP/IP-Kommunikation verwendet werden.


Der Unterschied zwischen ASCII-Modus und RTU-Modus
Die Anzahl der Datenbits beträgt im ASCII-Modus 7 Bit und im RTU-Modus 8 Bit.
Der ASCII-Modus verwendet die LRC-Fehlerprüfungsmethode (Longitudinal Redundancy Check), und RTU verwendet die CRC-Methode (Cyclic Redundancy Check).
Das Intervall zum Senden von Zeichen im ASCII-Modus kann 1 Sekunde betragen, um für Geräte mit unterschiedlichen Raten geeignet zu sein. Im RTU-Modus muss es in Form eines kontinuierlichen Datenstroms übertragen werden.

Die Bits jedes Bytes im ASCII-Modus: 1 Startbit, 7 Datenbits, das niedrigstwertige Bit wird zuerst gesendet; 1 Paritätsbit, 1 Stoppbit; RTU-Modus: 1 Startbit, 8 Datenbits, das niedrigstwertige Bit wird zuerst
gesendet zuerst gesendet; 1 Paritätsbit, 1 Stoppbit;


Der häufig verwendete Kommunikationsmodus (9600, N, 8, 1) ist ein Ein-Byte-Übertragungsprotokoll.
Das Modbus-Protokoll ist ein Protokoll zur Verwendung einer seriellen Schnittstelle zur kontinuierlichen Übertragung mehrerer Bytes gleichzeitig. Es gibt an, wie viele Bytes gleichzeitig gesendet werden und wie die Bytes in der Reihenfolge angeordnet sind.
Das Modbus-Protokoll definiert Prüfcodes, Datensequenzen usw., also die notwendigen Inhalte für den spezifischen Datenaustausch. Bei der Kommunikation wird das Signal des Hosts an ein Endgerät mit einer bestimmten Adresse adressiert und anschließend das vom Endgerät gesendete Antwortsignal in die entgegengesetzte Richtung an den Host übertragen.


Master-Slave-Technologie
Das Master-Gerät (Master) kann die Übertragung initiieren und das Slave-Gerät (Slave) antwortet entsprechend den von der Master-Geräteabfrage bereitgestellten Daten.
Das vom Modbus-Protokoll festgelegte Format der Master-Controller-Abfrage ist: Geräteadresscode, Funktionscode, zu sendende Daten und Fehlererkennungsdomäne.
Das Slave-Antwortprotokoll enthält Felder zum Handeln, zurückzugebende Werte und Fehlererkennungsfelder.
Das Übertragungsgerät wandelt die Modbus-Nachricht in einen Rahmen mit einem Startpunkt und einem Endpunkt um, sodass das empfangende Gerät am Anfang der Nachricht mit der Arbeit beginnt, die Adresszuordnungsinformationen liest, bestimmt, welches Gerät ausgewählt wird, und bestimmt, wann die Nachricht gesendet wird abgeschlossen und erkennt einen Teil der Nachricht. Fehler und Rückgabe


Abfrage-Antwort-Zyklus
Anfragen: Der Funktionscode in der Abfragenachricht informiert das ausgewählte Slave-Gerät über die auszuführende Funktion. Das Datensegment enthält alle zusätzlichen Nachrichten für die vom Slave-Gerät auszuführende Funktion.
Antworten: Das Datensegment enthält vom Gerät erfasste Daten, wie z. B. Registerwerte oder Status. Wenn ein Fehler auftritt, wird der Funktionscode verwendet, um anzuzeigen, dass die Antwortnachricht ein Fehler ist, und das Datensegment enthält einen Code, der die Fehlermeldung beschreibt.


ASCII-Nachrichtenrahmen und RTU-Nachrichtenrahmen
Nachrichten im ASCII-Modus beginnen mit einem Doppelpunkt „:“ und enden mit einem Wagenrücklauf und einem Zeilenvorschub. Das Gerät am Bus erkennt den Doppelpunkt kontinuierlich. Nach dem Empfang des Doppelpunkts dekodiert das Slave-Gerät und bestimmt, ob das Nachrichtenobjekt es selbst ist.

Das Senden von Nachrichten im RTU-Modus muss mit einer Pause von mindestens 3,5 Zeichen beginnen. Das erste übertragene Feld ist die Geräteadresse. Nach dem letzten übertragenen Zeichen markiert eine Pause von mindestens 3,5 Zeichen das Ende der Nachricht.
Der gesamte Nachrichtenrahmen muss als kontinuierlicher Stream übertragen werden. Wenn vor der Fertigstellung eine Pause von 1,5 Zeichen vergeht, löscht das empfangende Gerät die unvollständige Nachricht und geht davon aus, dass die nach der Pause empfangenen Bytes die Adressfelder einer neuen Nachricht sind .
Beträgt die Pausenzeit zwischen zwei Telegrammen weniger als 3,5 Zeichen, gilt die letztere Telegramm als Fortsetzung der vorherigen Telegramme.
Fügen Sie hier eine Bildbeschreibung ein

Der Funktionsbereich
enthält 8 Bits. Einige Funktionen gelten für alle Controller, andere werden auf bestimmte Controller angewendet, z. B. das Lesen des Status des Eingangssegments, das Lesen des Registerinhalts usw.
Wenn der Slave antwortet, verwendet er den Funktionscode, um anzuzeigen, ob es normal oder ein Fehler ist. Wenn ein Fehler auftritt, kehrt er zur unteren Position des Funktionscodes 1 zurück. Das Slave-Gerät kann auch einen eindeutigen Code in das Datenfeld einfügen der Antwortnachricht, um dem Host mitzuteilen, was genau passiert ist. Geben Sie Fehler ein.

BeispielDer Master sendet das Funktionsfeldbit 03H und die Einspruchsantwort des Slaves ist 83H.

Datenfeld
Das Datenfeld ist eine Sammlung von 2 Hexadezimalzahlen und enthält die spezifischen Parameter des Verhaltens, das das Slave-Gerät ausführen muss. Wenn das Master-Gerät einen Satz Slave-Geräteregister schreiben möchte, gibt das Datenfeld das zu schreibende Startregister sowie die Anzahl der zu schreibenden Register, die Anzahl der Bytes und die zu schreibenden Daten an.

Das Datenfeld kann fehlen, beispielsweise wenn der Slave mit einer Kommunikationsantwort antwortet.

Fehlererkennungsdomäne

==ASCII-LRC-Längsredundanzerkennung: ==Fügen Sie alle Bits jedes Bytes hinzu, um eine Prüfsumme zu erhalten, und senden Sie die Prüfsumme nach Abschluss der Übertragung zur Überprüfung an den Empfänger.

Die LRC-Prüfung kann Einzelbitfehler und einige Doppelbitfehler erkennen, die während der Übertragung auftreten, sie kann jedoch nicht alle Fehler erkennen, da sich mehrere Fehler gegenseitig aufheben können. Darüber hinaus kann die LRC-Prüfung keine Fehler korrigieren, sondern nur erkennen, ob Fehler vorliegen.

==RTU-CRC-Erkennung zyklischer Redundanz: == Stellen Sie die Genauigkeit der Datenübertragung sicher, indem Sie vor der Datenübertragung einen Prüfcode berechnen und ihn am Ende der Daten hinzufügen. Anhand dieser Prüfsumme kann der Empfänger Datenverfälschungen oder Übertragungsfehler erkennen.


Modbus überträgt in einem Rahmen, und jeder Rahmen verfügt über ein bestimmtes Startbit und ein bestimmtes Endbit, sodass das empfangende Gerät mit dem Lesen der Adresse beim Startbit der Informationen beginnt und das anzusprechende Gerät sowie die Endzeit der Informationsübertragung bestimmt. Im RTU-Modus muss am Anfang der Nachricht eine Pausenzeit von mindestens 3,5 Zeichen stehen. Die Pausenzeit kann anhand der verwendeten Baudrate leicht berechnet werden.

Die Zeichen, die in jedem Feld gesendet werden dürfen, sind hexadezimal. Geräte in einem Modbus-Netzwerk überwachen kontinuierlich Informationen im Netzwerk, einschließlich Pausenzeiten. Beim Empfang der ersten Adressdaten dekodiert jedes Gerät diese sofort, um festzustellen, ob es sich um seine eigene Adresse handelt. Nach dem Senden des letzten Zeichens erfolgt eine Pause von mindestens 3,5 Zeichen, bevor eine neue Nachricht gesendet werden kann. Die gesamte Nachricht muss kontinuierlich gesendet werden. Tritt während der Übertragung des Informationsrahmens eine Pausenzeit von mehr als 1,5 Zeichen auf, aktualisiert das Empfangsgerät die unvollständigen Informationen und empfängt die nächsten Adressdaten. Das Master-Gerät trägt die Adresse des Slave-Geräts in das Geräteadressfeld des Informationsrahmens ein und adressiert das Slave-Gerät. Wenn das Slave-Gerät antwortet, gibt es seine eigene Adresse in das Geräteadressfeld der Antwortnachricht ein, sodass das Master-Gerät die Adresse des Slave-Geräts identifizieren kann, das geantwortet hat. Adresse 0 wird als Broadcast-Adresse verwendet und von allen Slave-Geräten erkannt.

Was auf die Geräteadresse folgt, ist der Funktionscode, und was auf den Funktionscode folgt, ist das Datenfeld. Das Datenfeld enthält 2 hexadezimale Daten und der Datenbereich ist 00FF (hexadezimal). Zu den vom Master-Gerät an das Slave-Gerät gesendeten Daten gehört, dass das Slave-Gerät die im Funktionscode des Master-Geräts angegebene Anforderungsaktion ausführt, z. B. die logische Spulenadresse, die Anzahl der Verarbeitungsobjekte und die tatsächliche Anzahl der Datenbytes.

Dem Datenfeld folgt das Prüffeld (CRC-Prüfung). Die CRC-Prüfung umfasst 2 Bytes und enthält einen 16-Bit-Wert (zwei 8-Bit-Bytes), der vom sendenden Gerät berechnet und der Nachricht hinzugefügt wird. Das empfangende Gerät berechnet den CRC-Wert der empfangenen Nachricht neu und vergleicht ihn mit dem empfangenen CRC-Wert. Sind die beiden Werte unterschiedlich, liegt ein Fehler vor.


Die TCP- und RTU-Protokolle sind sehr ähnlich. Fügen Sie einfach fünf „00“ und eine „06“ am Anfang des RTU-Protokolls hinzu, entfernen Sie dann den Prüfcode der letzten beiden Bytes des RTU-Protokolls und senden Sie ihn über TCP\IP Netzwerk. Das ist es.

TCP ist auf zuverlässige Verbindungen ausgerichtet und es gibt keinen sogenannten Adresscode


Zurück zur Schule unter HART

おすすめ

転載: blog.csdn.net/Wangwenshuaicsdn/article/details/129944091