Was ist das Modbus-RTU - Protokoll?
Das Modbus-RTU - Protokoll ist eine Kommunikationsmethode, die den Datenaustausch zwischen einem Programmierbaren Logikcontroller (PLC) und einem Computer ermöglicht. Elektronische Geräte können Informationen über serielle Leitungen über das Modbus-Protokoll austauschen.
Es ist weit verbreitet und wird im Bau von Gebäudemanagementsystemen (BMS) und industriellen Automatisierungssystemen (IAS) verwendet. Seine Benutzerfreundlichkeit, Zuverlässigkeit und es ist Open Source und kann kostenlos in jedem Gerät oder Anwendung verwendet werden.
Das Protokoll wurde 1979 von Modicon ® für seine programmierbaren Logikcontroller entwickelt und veröffentlicht. Es ist mit einer Master / Slave-Architektur aufgebaut und unterstützt serielle Geräte, die das RS232 / RS485 / RS422 - Protokoll verwenden. Modbus wird häufig in Situationen verwendet, in denen mehrere Instrumente und Steuergeräte Signale an eine zentrale Steuerung oder ein System zur Erhebung und Analyse von Daten übertragen. Systeme für industrielle Automatisierung und Überwachungsteuerung und Datenerfassung (SCADA) verwenden in der Regel das Modbus-Protokoll.
Was bedeutet Modbus RTU?
Modbus RTU (Remote Terminal Unit) ist eines der beiden Übertragungsmodi, die in der ursprünglichen Modbus-Spezifikation definiert wurden. Die beiden Modus sind Modbus RTU und ASCII, die beide für serielle Geräte entwickelt wurden, die die Protokolle RS232, RS485 und RS422 unterstützen. Ein auffälliges Merkmal der Modbus RTU ist die Verwendung von Binärcodierung und leistungsstarker CRC-Fehleruntersuchung. Modbus RTU ist eine Implementierung des Modbus-Protokolls und wird am häufigsten in industriellen Anwendungen und automatisierten Produktionsanlagen verwendet.
Wie funktioniert Modbus RTU?
Das Modbus-Protokoll ist im Grunde ein System, das Anfragen und Antworten von elektronischen Geräten verarbeitet. Die Master / Slave-Architektur wird mit Master-Anfragen verwendet, die vom Slave-Gerät beantwortet werden.
Was ist eine Modbus RTU-Hauptstation?
Die Modbus RTU-Masterstation ist das zentrale Gerät, das Informationen von angeschlossenen Slave-Geräten anfordert. Die zentrale Steuerung in einem automatisierten Produktionssystem kann als Modbus-RTU - Masterstation fungieren. Die Modbus-Implementierung hat einen Master-Server. Das Master-Gerät erhält Informationen vom Slave-Gerät und kann sie auch in das Register des Slaves schreiben.
Was ist Modbus RTU von Station?
Modbus RTU Slave Station ist ein Gerät, das auf eine Anforderung des Master-Geräts reagiert. Es kann die Übertragung von Informationen nicht starten und befindet sich im Aufbewahrungsmodus, bis es auf eine Anforderung des Primärservers antwortet.
Das Herzstück des Modbus-Protokolls ist die so genannte Component Protocol Data Unit (PDU). PDUs bestehen aus Funktionscode und Daten und können unabhängig vom Modbus-Transportmodus konsistent erstellt werden. Der Funktionscode gibt Daten an, die von der Masterstation angefordert werden.
Im Modbus-RTU - Übertragungsmodus werden zusätzliche Informationen um die PDU verpackt, um eine vollständige Anwendungseinheit (ADU) zu erstellen. Bevor Sie den Funktionscode im Signalstrom und im Modbus-RTU - Modus versenden, wird eine 1 - Byte-ID des Slaves gesendet, um das Slave-Gerät zu identifizieren, das die Anforderung erfüllen sollte. An der PDU ist ein 2 - Byte-CRC angeschlossen, das sicherstellt, dass die richtige Anzahl von Bytes gesendet und empfangen wird.
Modbus-Geräte unterstützen vier Datenblätter, um die Kommunikation zwischen den Geräten zu erleichtern. Sie sind diskrete Eingänge, diskrete Ausgänge (Spule), Eingangsregister und Halteregister. Die Register führen verschiedene Funktionen aus und sind nicht für jedes Gerät enthalten. In einigen Fällen wird nur ein Haltregister für die I / O-Funktion verwendet.
| Bereiche | Besuch | Dimension | Beschreibung |
|---|---|---|---|
| Diskreten Eingang | Lesen-nur | 1 Bit | als Eingang |
| Spule Ausgang | Lesen / Schreiben | 1 Bit | für die Steuerung des diskreten |
| Eingangsregisters | Lesen-nur | 16 Bit | für die Eingabe |
| Haltenregisters | Lesen / Schreiben | 16 - Bit | wird für verschiedene Dinge verwendet, einschließlich Eingabe, Ausgabe, Konfigurationsdaten usw. |
Der Funktionscode zeigt an, wie das Master-Gerät mit dem Slave-Gerät interagiert, das in der Slave-ID angegeben ist. Je nach dem gesendeten Funktionscode kann das Master-Gerät ein Register des Slaves lesen oder schreiben.
Wenn Pakete von der Station erhalten werden, die Fehler in der Anforderung enthalten, geben sie einen Fehlercode zurück. Bei Problemen wie illegalen Funktionsanfragen, der Angabe einer illegalen Registeradresse, auf die die Slave-Station nicht zugreifen kann, und einer Meldung, die angibt, dass das Slave-Gerät beschäftigt ist oder fehlergeschlagen ist, wird ein Fehlercode zurückgegeben.
Modbus RTU erfordert, dass Sie Parameter wie die Baudrate, das Zeichenformat (8 Bit ohne Parität usw.) und die Slave-Station - ID kennen oder definieren, wenn Sie die Kommunikation starten. Jede dieser Parameter nicht übereinstimmt, führt zu einem fehlgeschlagenen Kommunikationsversuch.
Hier erklären wir uns die Modbus RTU-Datennachrichten ausführlich:
Frame-Struktur
Frame-Struktur = Adresse + Funktion? + Daten + Überprüfung
Adresse: Ein Byte, Bereich 0 - 255, wobei der gültige Bereich 1 - 247 ist, andere haben einen speziellen Zweck, wie 255 ist die Broadcast-Adresse (Broadcast-Adresse ist die Antwort auf alle Adressen, normalerweise müssen zwei Geräte Adressen, um Abfrage und Antwort zu erledigen).
Funktionscode: ein Byte, Funktionscode Bedeutung ist, zu wissen, was diese Anweisung ist, zum Beispiel können Sie die Daten des Slaves abfragen, können Sie auch Daten ändern, so dass verschiedene Funktionscode entsprechen verschiedenen Funktionen.
DatenJe nach Funktionscode gibt es unterschiedliche Strukturen, die in den folgenden Beispielen beschrieben werden.
PrüfungenUm sicherzustellen, dass die Daten nicht falsch sind, fügen Sie dies hinzu, und dann die vorhergehenden Daten berechnen, um zu sehen, ob die Daten konsistent sind, wenn sie konsistent sind, sagen Sie, dass die Daten des Rahmens korrekt sind, antworte ich; Wenn nicht, sagen Sie, dass es ein Problem bei der Übertragung dieser Daten gab, die Daten sind falsch, so dass ich sie verworfen habe.
Im Folgenden werden die Funktionscodes 03 und 06 ausführlich erläutert:
Funktionscode 0x03 (Lesen)
主机发送: 01 03 00 00 00 01 84 0A
从机回复: 01 03 02 19 98 B2 7E
Was bedeutet diese Datensammlung?
Aus dem oben angegebenen Abbild kann man sehen, dass die Daten, die vom Host gesendet werden, ungefähr- Adresse+- Funktionscode+Daten sind.+Prüfungen;
So lösen Sie Folgendes:
Senden Sie die Datenanalyse

01 - 地址,也就是你传感器的地址
03 - 功能码,03代表查询功能,查询传感器的数据
00 00 - 代表查询的起始寄存器地址.说明从0x0000开始查询。这里需要说明以下,Modbus把数据存放在寄存器中,通过查询寄存器来得到不同变量的值,一个寄存器地址对应2字节数据
00 01 - 代表查询了一个寄存器.结合前面的00 00,意思就是查询从0开始的1个寄存器值
84 0A - 循环冗余校验,是modbus的校验公式,从首个字节开始到84前面为止;Antworten auf die Datenanalyse

01 - 地址,也就是你传感器的地址
03 - 功功能码,03代表查询功能,查询传感器的数据。这里要注意的是注意发给从机的功能码是啥,从机就要回复同样的功能码,如果不一样说明这一帧数据有错误
02 - 代表后面数据的字节数,因为上面说到,一个寄存器有2个字节,所以后面的字节数肯定是2*查询的寄存器个数;
19 98 - 寄存器的值是19 98,结合发送的数据看出,01这个寄存器的值为19 98
B2 7E - 循环冗余校验
Grundprozess:
Senden Sie: Adresse des Slaves + Funktionscode, den ich tun möchte + Adresse des Registers, das ich überprüfen möchte + Anzahl der Register-Adressen, die ich überprüfen möchte + Check-Code
Antworten: Adresse des Slaves + Funktionscode, der vom Host gesendet wird + Anzahl der Bytes an die Daten, die an den Host gesendet werden sollen + Daten + Checkcode
Funktionscode 0x06 (Schreiben)
Was ist, wenn ich meine Daten ändern möchte? Gibt es diese Vereinbarung, die Antwort lautet ja!
主机发送: 01 06 00 00 00 01 48 0A
从机回复: 01 06 00 00 00 01 48 0ASenden von Datenanalyse

01-主机要查询的从机地址
06-功能码,06代表修改单个寄存器功能,修改有些不同,有修改一个寄存器和修改多个寄存器;
00 00-代表修改的起始寄存器地址.说明从0x0000开始.
00 01-代表修改的值为00 01.结合前面的00 00,意思就是修改0号寄存器值为00 01;
48 0A-循环冗余校验,是modbus的校验公式,从首个字节开始到48前面为止;Antworten auf Datenanalyse

01-从机返回给主机自己的地址,说明这就是主机查的从机
06-功能码,代表修改单个寄存器功能,主机发啥功能码,从机就必须回什么功能码;
00 00-代表修改的起始寄存器地址.说明是0x0000.
00 01-代表修改的值为00 01.结合前面的00 00,意思就是修改0号寄存器值为00 01;
48 0A-循环冗余校验,是modbus的校验公式,从首个字节开始到48前面为止;Details zum häufig verwendeten Funktionscode
Tabelle zum häufig verwendeten Funktionscode
| Funktionscode | Name | Datentyp | Aktion |
|---|---|---|---|
| 0x01 | Lesespulenregister | 位 | Erhält den aktuellen Zustand einer Reihe von Logikspulen (ON / OFF) |
| 0x02 | Leses diskreter Eingangsregister | 位 | Erhält den aktuellen Zustand einer Reihe von Schalt-Eingängen (ON / OFF) |
| 0x03 | Lesen Sie das Register | Integer, Fließkomma, Zeichen | Abrufen des aktuellen Binärwertes in einem oder mehreren Aufbewahrungsregistern |
| 0x04 | Lesen-Eingabe - Register | Integer, Fließkomma | Abrufen des aktuellen Binärwertes in einem oder mehreren Eingabe-Registern |
| 0x05 | Schreiben eines einzelnen Spule-Registers | 位 | Erzwingen Sie den Ein - und Ausschaltzustand einer Logikspule |
| 0x06 | Schreiben eines einzelnen Aufbewahrungsregisters | Integer -, Gleitkomma -, Zeichen-Typ | Laden eines spezifischen Binärwertes in ein Aufbewahrungsregister |
| 0x0F | Schreiben mehrerer Spule-Register | 位 | Erzwingen Sie eine Reihe von aufeinanderfolgenden Logikspulen ein / aus |
| 0x10 | Schreiben mehrerer Aufbewahrungsregister | Integer, Gleitkomma, Zeichen | Lade spezifische Binärwerte in eine Reihe von aufeinanderfolgenden Aufbewahrungsregistern |
01H-Lese - Spule-Zustand
1) Beschreibung: Leses Slave-Spule - Register, Bit-Operation, einzelne oder mehrere Lesbarkeit;
2) Senden Sie Befehle:
Nehmen wir an, dass die Slave-Adresse 0x01, die Register-Start - Adresse 0x0023, das Register-Ende - Boykott 0x0038, insgesamt 21 Spule gelesen werden. Die Vereinbarung lautet:

3) Antwort:
gibt jedes Bit der Daten zurück, das dem Spule-Zustand entspricht, 1 - ON, 0 - OFF, wie in der folgenden Tabelle;

in der obigen Tabelle gibt data1 den Spule-Zustand von 0x0023 - 0x002a an, und das niedrigste Bit von data1 stellt den Spule-Zustand der niedrigsten Adresse dar, der als Small-End - Modus verstanden werden kann;
data2 gibt den Spule-Zustand von 0x002b - 0x0033 an, wie in der folgenden Tabelle:

data3 zeigt den Zustand der Spule für die Adresse 0x0034 - 0x0038, nicht ausreichend 8 Bits, Bytes hochfüllt mit 0, wie in der folgenden Tabelle:

02H-Lese diskrete Eingabe-Zustand
1): Lese diskrete Eingabe-Register, Bit-Operation, lesbar einzelne oder mehrere, Protokoll ähnliche Funktionscode 0X01 Protokoll, hier ausgeschlossen;
03H-Read Hold Register
1) Beschreibung: Read Hold Register, Byte-Befehloperation, einzelne oder mehrere lesbare Befehle;
2) Senden von Befehlen:
Slave-Adresse 0x01, Hold Register Start-Adresse 0x0032, Read 2 Hold Registers

3) Antwort:

Datenspeicherreihenfolge

04H-Lese - Eingabe-Register
1) Beschreibung: Lese - Eingabe-Register, Byte-Befehl - Operationen, einzelne oder mehrere lesbare;
2)Senden Sie Anweisungen: gleichermaßen 03H;
3) Antwort: mit 03H;
05H-Schreiben einzelne Spule
1) Beschreibung: Schreiben einzelne Spule, Bit-Operation, nur eine kann geschrieben werden, schreiben 0xff00 bedeutet, den Spule-Status auf ON zu setzen, schreiben 0x0000 bedeutet, den Spule-Status auf OFF zu setzen
2) Senden Sie Befehl:
Setzen Sie 0x0032 Spule auf ON;

3) Antwort:
mit dem Senden von Anweisungen;
06H-Schreiben Single Hold Register
1) Beschreibung: Schreiben Single Hold Register, Byte-Befehl Operationen, nur eine kann geschrieben werden;
2) Senden-Befehl:
Schreiben 0x0032 Halt Register als 0x1232;

3) Antwort: Senden-Befehl;
0F-Schreiben mehrere Spulen
1)Beschreibung: Schreiben Sie mehrere Registers. Wenn ein Bitwert des Datenbereichs "1" ist, bedeutet der angeforderte Zustand der entsprechenden Spule ON, wenn ein Bitwert "0" ist, ist der Zustand OFF.
2)Anweisungen senden:
Die Spule-Adresse ist 0x04a5, 12 Spule schreiben,

DATA1 in der obigen Abbildung ist 0x0c, was bedeutet:

DATA2 ist 0x02, nicht genug 8 Bits, Bytes hochfüllt 0:

3) Antwort:

10H-Schreiben mehrere Aufbewahrungsregister
1) Beschreibung: Schreiben mehrere Aufbewahrungsregister, Bytes Anweisungsoperation, kann mehrere schreiben;
2) Senden Sie Befehl:
Beibehält die Startadresse des Registers 0x0034 und schreibt zwei Register 4 Byte Daten.

3)Antwort:

Antwort veröffentlichen