Modbus RTU

Modbus über einen seriellen Bus, mit der physischen Leitung als eigenem Objekt, das sich seine über Unit-IDs adressierten Geräte teilen.

Als Markdown ansehen

Der Treiber Modbus RTU spricht mit Modbus-Geräten an einem seriellen Bus, RS-485 oder RS-232, erreicht über einen physischen COM-Anschluss, einen USB-Adapter oder einen virtuellen oder umgeleiteten Anschluss. Weil der Bus physisch geteilt wird, ist die Topologie Treiber → Leitung → Gerät → Tag: Die Leitung besitzt alles Elektrische (Anschluss, Baudrate, Format, Zeiten), und jedes Gerät an ihr besitzt nur seine Adresse als Einheit, sein zyklisches Lesen und seine Tags.

Serielle Leitung

Feld Bedeutung Standard
Bezeichnung Sprechender Name des Busses. Jederzeit änderbar. erforderlich
Serieller Port Der Anschluss des Betriebssystems, zum Beispiel COM3. Das Feld ist Freitext, physische, virtuelle und umgeleitete Anschlüsse funktionieren also alle, und der Pfeil daneben bietet die Anschlüsse an, die Windows gerade erkennt (mit Aktualisieren für einen im Betrieb gesteckten Adapter); die erkannte Liste ist eine Bequemlichkeit, nie eine Positivliste. COM1
Baudrate Bitrate, die sich jedes Gerät am Bus teilt. 9600
Übertragungsmodus Wie jedes Gerät am Bus seine Nachrichten rahmt: RTU, binäre Rahmen mit CRC-Prüfung, oder ASCII, Rahmen als Text vom Doppelpunkt bis zum Zeilenumbruch mit LRC-Prüfung, wie ältere Geräte sie sprechen. Ein Bus spricht einen Modus, deshalb gehört er zur Leitung. RTU
Serielles Format Geschlossene Auswahl aus 8N1, 8N2, 8E1, 8E2, 8O1, 8O2, auf einer ASCII-Leitung zusätzlich 7N2, 7E1, 7E2, 7O1: Die Ziffer sind die Datenbits, der Buchstabe die Parität (N keine, E gerade, O ungerade), die letzte Ziffer die Stoppbits. Ein RTU-Rahmen braucht 8 Datenbits, daher bietet eine RTU-Leitung nur die 8-Bit-Formate an; ein 7-Bit-Format, das von einer ASCII-Leitung übrig ist, erscheint leer und wird abgelehnt, bis ein anderes gewählt ist. Andere Breiten, Mark- und Space-Parität sowie 1,5 Stoppbits werden nicht unterstützt. 8E1
Zeitlimit für die Antwort (ms) Längste Wartezeit auf die Antwort einer Einheit, 100 bis 60.000. Längere Zeitlimits kommen langsamen Anlagen entgegen, machen aber fehlende Einheiten und die Gerätesuche langsamer erkennbar. 1000
Mindestabstand zwischen Transaktionen (ms) Taktung zur Verträglichkeit für die ganze Leitung, 0 bis 1000. Null lässt nur die automatische Ruhe des Protokolls; ein positiver Wert kann sie erhöhen, nie verringern. 0

Auf einer ASCII-Leitung gilt die im Folgenden beschriebene Ruhe nicht: Ein ASCII-Rahmen endet mit seinem Zeilenumbruch, daher zeigt die automatische Ruhe 0 ms, und der Mindestabstand zwischen Transaktionen (ms) ist die einzige Pause zwischen den Rahmen, wie die Karte darunter sagt: "ASCII-Rahmen enden mit einem Zeilenumbruch, daher fügt die Leitung keine eigene Ruhe ein: Dieser Abstand ist die einzige Pause zwischen den Rahmen." Der Übertragungsmodus ist eine physische Einstellung und ist wie Port, Baudrate, Format und Antwortzeitlimit gesperrt, solange die Leitung aktiviert ist; die Laufzeitadresse eines Geräts auf einer ASCII-Leitung endet mit /ascii.

Das Protokoll selbst verlangt Ruhe zwischen den Rahmen, und die Leitung erzwingt sie immer: Bis einschließlich 19.200 Baud beträgt die automatische Ruhe 3,5 Zeichenzeiten, berechnet aus dem eingestellten Format; über 19.200 Baud sind es die festen 1,75 ms, die die Spezifikation empfiehlt. Die wirksame Ruhe ist die größere von dieser automatischen Untergrenze und dem eingestellten Intervall, nie ihre Summe, und der Bereich zeigt beide Werte. Das Intervall zu erhöhen verlangsamt bewusst jede Einheit an der Leitung; es ist eine Hilfe zur Verträglichkeit, keine Reparatur für Verdrahtung, Abschluss, Erdung oder Störungen.

Eine neue Leitung beginnt deaktiviert, damit ihre physischen Einstellungen zuerst eingerichtet werden können. Jeder physische Anschluss gehört zu höchstens einer Leitung, verglichen ohne Rücksicht auf Groß- und Kleinschreibung und auch dann, wenn Leitungen deaktiviert sind. Der Name und das Transaktionsintervall bleiben änderbar, während die Leitung läuft (eine Änderung der Zeiten wirkt, ohne den Anschluss zu schließen und wieder zu öffnen); Anschluss, Baudrate, Format und Antwort-Zeitlimit sind gesperrt, solange die Leitung aktiviert ist: Deaktivieren und speichern Sie sie zuerst. Eine Leitung zu deaktivieren hält die Kommunikation aller ihrer Geräte an, ohne deren einzelne Wahl unter Aktiviert zu ändern.

Die Leitung meldet den physischen Übertragungsweg getrennt von ihren Geräten: Aus, Leerlauf (kein aktiviertes Gerät), Verbindung wird aufgebaut, Verbunden oder Portfehler mit einer Diagnose. Eine leere Leitung zu löschen entfernt nur die Leitung; eine zu löschen, die Geräte enthält, verlangt eine ausdrückliche Bestätigung und löscht auch diese Geräte und ihre Tags.

Gerät

Feld Bedeutung Standard
Serielle Leitung Fest: Ein Gerät wird unter seiner Leitung angelegt und erbt das physische Tupel, das im Bereich nur gelesen wird. Legen Sie das Gerät unter der gewünschten Leitung an. die Leitung, unter der es angelegt wird
Unit-ID Die Modbus-Adresse des Geräts am Bus, 1 bis 247, eindeutig innerhalb der Leitung (deaktivierte Geräte eingeschlossen). 1
Abfrageintervall (ms) Standardtakt des zyklischen Lesens für Tags, die ihn nicht selbst festlegen. 1000

Die interne Adresse zur Laufzeit ist modbus+rtu://<line-id>/<port>/<baud>/<format>/<timeout>/<unitId>/<interval>: Sie trägt die feste Identität der Leitung und ihre vollständigen physischen Einstellungen, nie ihren sprechenden Namen.

Verhalten der geteilten Leitung

Der Treiber öffnet eine serielle Sitzung je Leitung und reiht jede Anfrage jedes Geräts über einen einzigen Verteiler, Lesen und Schreiben überlappen sich am Bus also nie. Ein anstehender Schreibvorgang nimmt den nächsten freien Platz mit begrenztem Vorrang: Schreibvorgänge werden zügig bedient, aber dauerndes Schreiben kann das zyklische Lesen nicht aushungern. Die Zeitüberschreitungen jeder Einheit sind voneinander getrennt, mit zunehmender Wartezeit, ein stummes Gerät verlangsamt also nur sich selbst. Eine Modbus-Ausnahme mit gültiger CRC ist ein Fehler dieser einen Anfrage an diesem Tag, und die Leitung bleibt gesund. Nur ein physischer Ein-/Ausgabefehler (der Anschluss verschwindet, der Adapter wird gezogen) macht die geteilte Sitzung ungültig und startet ein abgestimmtes erneutes Öffnen für die ganze Leitung. Das zuletzt freigegebene Gerät schließt den Anschluss.

Adressierung der Tags

Die Adressierung der Tags ist dieselbe wie bei Modbus TCP: eine Registerklasse (Spule (0xxxx), Diskreter Eingang (1xxxx), Eingangsregister (3xxxx), Holding-Register (4xxxx), standardmäßig aus Typ und Zugriff des Tags abgeleitet), eine ab 0 gezählte Registernummer, eine automatische Anzahl (Register, leer = automatisch) (Boolean, Int16 und UInt16 1 Register, Int32 und Float 2, String 4; das Feld wird nur bei Tags vom Typ String gezeichnet, weil jede andere Breite fest ist) und die beiden Felder zur Reihenfolge: Höchstwertiges Byte zuerst (MSB first, Big-Endian) für die Byte-Reihenfolge und Höchstwertiges Wort zuerst (High-Word zuerst) für die Wort-Reihenfolge (nur bei den Zwei-Register-Typen Int32 und Float gezeichnet), beide standardmäßig eingeschaltet. Die Karte Quelle endet mit Adresse im Handbuch, der Adresse des Tags, wie das Handbuch des Geräts sie druckt (Eingangsregister 0 ist 30001). Die unterstützten Werttypen sind dieselben sechs (Boolean, Int16, UInt16, Int32, Float und String): Int16 und UInt16 lesen ein einziges 16-Bit-Register, mit oder ohne Vorzeichen, und für sie gilt nur die Byte-Reihenfolge (das Feld zur Wort-Reihenfolge wird nicht gezeichnet). Die Funktionscodes für Lesen und Schreiben sowie die Anordnungen auf dem Bus stehen auf der Seite Modbus TCP und gelten hier unverändert.

Gerätesuche

Die Gerätesuche tastet einen Bereich von Unit-IDs über eine vorhandene Leitung ab und wohnt im Bereich dieser Leitung:

Feld Bedeutung Standard
Unit-ID von Erste abzutastende Unit-ID, 1 bis 247. 1
Unit-ID bis Letzte Unit-ID, aufsteigend ab der ersten. 32

Auf einer ASCII-Leitung ist die Abtastung dieselbe Anfrage in einem ASCII-Rahmen, und die LRC tritt an die Stelle der CRC: Eine Ausnahme mit stimmender LRC beweist, dass eine Einheit da ist, ein Rahmen mit falscher LRC beweist nichts.

Der Suchlauf lädt die gespeicherten physischen Einstellungen der Leitung neu, öffnet den Anschluss einmal und tastet den Bereich nacheinander mit Read Basic Device Identification (Funktion 43/14) ab, wobei jede Abtastung mit der wirksamen Ruhe zwischen den Rahmen getaktet wird. Er probiert nie Kombinationen von Einstellungen und liest nie Register. Eine Modbus-Ausnahme mit gültiger CRC beweist, dass eine Einheit da ist, ohne ihre Identität zu behaupten; eine Zeitüberschreitung oder ein ungültiger Rahmen tun das nicht.

Eine Leitung, die in Betrieb ist, wird nie unterbrochen und nie automatisch umgeschaltet: Deaktivieren Sie sie vor dem Suchlauf und aktivieren Sie sie danach selbst wieder. Ein Abbruch schließt die serielle Sitzung und lässt bereits gezeigte Ergebnisse als vorübergehende Kandidaten stehen, bis Sie sie ausdrücklich hinzufügen. Eine bereits konfigurierte Unit-ID wird als solche gekennzeichnet und öffnet das vorhandene Gerät, statt ein Duplikat anzulegen; die Ergebnisse tragen keine Tags, Register werden nach Hinzufügen eingerichtet.

Gerätesuche und Konfiguration der Leitung teilen sich je physischem Anschluss eine Reservierung, die sofort scheitert, ein Suchlauf und eine Änderung der Einstellungen können sich also nicht um den Anschluss streiten: Dem Verlierer wird gesagt, welcher Vorgang ihn hält.

Grenzen, die man kennen sollte

  • Die sechs Werttypen sind der ganze Wortschatz des Codecs auf dem Bus; andere Ganzzahlbreiten und Double werden nicht angeboten.
  • Der Durchsatz ist eine Eigenschaft des Busses: Jedes Gerät an der Leitung teilt sich einen Strom von Anfragen, getaktet von der wirksamen Ruhe zwischen den Rahmen, viele Geräte oder ein erhöhtes Intervall verlängern also jeden Zyklus des Lesens.