Modbus Basiswissen
Der Timberwolf Server unterstützt ab Firmware V 2.0 die beiden Protokolle Modbus RTU und Modbus TCP in der Rolle als der steuernde Client (“Master”).
Inhalt
Einsatzbereich
Die Protokollsammlung Modbus wird seit 40 Jahren in der Industrie und der Gebäudeautomatisierung für Sensornetze, Messwertaufbereitung und zur Anlagensteuerung verwendet.
Modbus ist der De-Facto Standard für den Datenaustausch mit Wärmepumpen, vielen Systemen der HKL-Technik, zur Steuerung von Wechselrichtern an Photovoltaikanlagen, Hausbatteriesystemen und Ladestationen für Elektrofahrzeuge. Darüber hinaus existiert ein umfangreiches Angebot für Modbus Sensoren und Modbus Smartmeter.
Haupteinsatzbereiche für Modbus ist:
Smartmeter: Für Modbus stehen teils äußerst preisgünstige Smartmeter und Zähler zur Verfügung
E-Mobility: Die meisten Wandladestationen sind Modbus fähig
Photovoltaik: Praktisch alle PV-Wechselrichter können den Status per Modbus ausgeben
Hausbatterien: Eine Vielzahl von Batterie-Steuerungen lassen sich per Modbus einbinden
Heizungssteuerungen: Viele Heizungs- und Wärmepumpensteuerungen sind ebenfalls per Modbus ansteuerbar
Sensoren: Für Modbus existiert sowohl ein breites Angebot an sehr günstigen Sensoren als auch für den professionellen Einsatz in der Industrie
Industrie: Sammeln, Umrechnen und Zusammenfassen von Messwerten inkl. Langzeitaufzeichnung und grafischer Auswertung sowie , Umrechnung von Modbus Systemen für übergeordnete SCADA Systeme
Übersicht
Historisches: Modbus wurde 1979 von dem Unternehmen Modicon als serielles Kommunikationsprotokoll zur Verwendung mit seinen speicherprogrammierbaren Steuerungen (SPS) veröffentlicht. Die Protokollsammlung Modbus dient der Übertragung von Informationen zwischen elektronischen Geräten. Modicon wurde 1988 zunächst durch die Daimler AG (AEG) und schließlich 1994 von der Schneider Electric SE übernommen. Der Modbus Standard wird von der “Modbus Organization, Inc”, einer in den USA registrierten unabhängigen, nur von den Mitgliedern getragenen non-profit Organisation, verwaltet.
Weiterentwicklung: Zunächst wurde Modbus für die Kommunikation über serielle Schnittstellen implementiert, später wurde das Protokoll um die Kommunikation über IP-Netzwerke ("Modbus TCP") erweitert. Seit Oktober 2018 steht hierfür auch die Erweiterung um eine TLS Verschlüsselung und Absicherung über digitale Zertifikate zur Verfügung.
Client / Server: Dasjenige Gerät, das die Informationen anfordert oder schreibt, wird als Modbus Client (früher der „Master“) bezeichnet, während die Geräte, deren Informationen abgefragt werden als "Modbus Server" (früher „Slave“) bezeichnet werden. Die Kommunikation wird jeweils vom Client (früher der „Master“) gesteuert.
Weltweite Nutzung: Der Standard ist ausgereift und wird neben der Gebäudesystemsteuerung vor allem in der Industrie genutzt und verfügt über eine der umfangreichsten installierten Basis für Automatisierung weltweit. Es stehen weit mehr als 100.000 Geräte zur Verfügung, die teils äußerst preiswert sind. Modbus ist der De-facto Standard für die Steuerung von Solaranlagen, Wechselrichter und Wandladestationen für Elektrofahrzeuge.
Neue Rollenbezeichnungen: Im Juli 2020 hat die Modbus Organisation – angeregt durch die Rassismus-Debatte – entschieden, die früheren technischen Rollenbezeichnungen „Master“ und „Slave“ durch „Client“ und „Server“ zu ersetzen. Wobei die bisher als „Master“ bezeichnete Rolle künftig als der steuernde „Client“ bezeichnet wird und das gesteuerte Gerät als „Server“. Wir begrüßen die neuen sensitiven Bezeichnungen und werden diese in Beschreibungen und in der Benutzeroberfläche sukzessive umsetzen.
Implementierung im Timberwolf Server: Der Timberwolf Server ist ab Firmware 2.0 mit einer umfassenden Modbus Implementierung ausgestattet. Die von jedem Browser auf jedem Endgerät nutzbare Benutzeroberfläche (“Web-APP”) ermöglicht eine besonders einfache und flexible Konfiguration der Leistungsmerkmale. Diese grafische Webschnittstelle ermöglicht eine interaktive Konfiguration, so dass die Parametrisierung nicht „blind“ vorgenommen werden muss. Alle Daten von Modbus Geräten können in Intervallen ab 10 ms abgefragt werden. Zusätzlich lassen sich alle Werte automatisch auf Plausibilität prüfen, mit freien Formeln umrechnen und in die Datentypen des Objekt-Systems konvertieren. Diese Objekte können anschließend dauerhaft aufgezeichnet und / oder (fast) beliebig mit allen anderen unterstützten Bussystemen n:m verknüpft werden.
Protokolle: Modbus RTU vs. Modbus TCP
Das Modbus Protokoll steht für zwei Übertragungsmedien zur Verfügung: Über serielle RS-485 Bussysteme sowie über TCP/IP Netzwerke. Die Verwendung von Modbus über RS-485 Bussysteme wird als „Modbus RTU“ bezeichnet. Die Protokollvariante, welche über TCP/IP Netze kommuniziert, wird als „Modbus TCP“ bezeichnet.
Der Timberwolf Server unterstützt ab Firmware Version 2.0 beide Protokolle in der Rolle als steuernder Client (früher als “Master” bezeichnet).
Modbus RTU (über RS-485 Bussystem)
Modbus RTU basiert elektrisch auf dem sehr robusten RS-485 Bussystem.
Bussysteme RS-485
RS-485 wurde 1983 von der Electronic Industrie Alliance ("EIA") entwickelt um die - erheblichen - Limitationen der seriellen RS-232 Schnittstelle zu überwinden. Der Standard wurde später von der Telecommunications Industry Association ("TIA") übernommen, die EIA löste sich 2010 auf.
Deswegen wird RS-485 auch als EIA-485 bzw. als TIA-485-A, selten auch als TIA/EIA-485-A bezeichnet. Wir verwenden in unseren Dokumentationen und Beschreibungen die übliche Bezeichnung RS-485. Die Buchstabenfolge "RS" stand für "Radio Selector", nach manchen Quellen auch als "Recommended Standard".
Der Standard beschreibt nur die elektrischen Schnittstellenbedingungen, es werden darin weder Stecker, Kabel oder die Übertragungsprotokolle definiert. RS-485 ist damit ein Industriestandard für eine physikalische Schnittstelle für die asynchrone Datenübertragung mit differenzieller Übertragung.
Die wesentlichen Merkmale von RS-485
Multipoint Bussystem: RS-485 erlaubt zwischen 32 bis 320 Teilnehmer (abhängig von der Buslast)
Leitung: Eine einfache Leitung mit zwei verdrillten Adern ist ausreichend, Schirm üblicherweise nicht auflegen, für optimale Reichweite wird die Verwendung einer Leitung mit einem Wellenwiderstand von ca. 120 Ohm empfohlen.
Topologie: Nur als streng linearer Bus, keine Abzweigungen, auf keinen Fall Sterne
Entfernung: Leitungslängen bis 1220 Meter (4000 ft), der Bus ist sehr störfest.
Terminierung: Der Bus ist an beiden Enden mit jeweils einem 120 Ohm Widerstand (zwischen den beiden Daten-Adern) abzuschließen.
Unterstützte Schnittstellen: Der Timberwolf Server benötigt für die Nutzung von Modbus RTU entweder eine im Server enthaltene Modbus Schnittstelle (Modelle 950Q / 960Q / 3500) oder die “Dual Isolated Modbus Extension”, die mit allen Modellen und Varianten des Timberwolf Servers genutzt werden kann. Es können Dutzende dieser Extensions gleichzeitig am Timberwolf Server genutzt werden.
Sowohl mit der internen Schnittstelle als auch der Extension werden jeweils bis zu 248 Modbus RTU Geräte über eine Länge von 1200 Metern unterstützt. Pro angeschlossenem RS-485 Bus.
Die “Dual Isolated Modbus Extension” wird ab Firmware 2.0 des Timberwolf Servers erkannt, automatisch per Plug´n´Play eingebunden und vollständig unterstützt. Fremde RS-485 Schnittstellen werden vom Timberwolf Server nicht erkannt und können nicht genutzt werden.
Für jeden Modbus RTU Bus richten Sie eine Modbus Schnittstelle ein und weisen ein Modbus Subsystem zu.
Terminierung: Beachten Sie die Angaben zur Terminierung beim eingesetzten Timberwolf Server bzw. der Modbus Extension sowie bei ALLEN angeschlossenen Geräten. Eine Terminierung muss und darf nur an den jeweiligen Enden des Busses vorgenommen werden, nicht in der Mitte des Busses.
Adressierung Modbus RTU: Die am RS-485 Bus angeschlossenen Modbus RTU Geräte können über die Adressen 1 bis 247 angesprochen werden. Diese Adressen sind individuell bei der Einrichtung eines jeden Modbus Gerätes (gemäß der jeweiligen Herstellerangaben) zu vergeben.
Anzahl Modbus Geräte am Bus: Auch wenn 248 verschiedene Geräte per Adressierung angesprochen werden könnten, ist die tatsächliche Anzahl der elektrisch anschließbaren Modbus RTU Geräte geringer und wird von der Buslast bestimmt, die vom jeweiligen Gerät verursacht wird. Jeder Sender in einem RS-485 Bussystem kann 32 Buslasten ansteuern. Eine Buslast ist eine imaginäre Einheit und steht eigentlich für eine Strommenge, die beim Design des Systems von einem Empfänger aufgenommen wurde. Damals konnte man daher nur 32 Geräte an einem RS-485 Bus betreiben, da der Sender eines Gerätes nur die Strombelastung von 32 Emfängern treiben konnte.
Moderne Modbus RTU Geräte belasten den Bus mit einer sehr viel geringeren Last, die zwischen ¼ bis 1/12 Buslast-Einheit liegt. Üblicherweise können Sie bei modernen Modbus RTU Geräten davon ausgehen, dass wenigstens 128 gleichzeitig angeschlossene Geräte an einem Bussegment möglich sind. Ja nach Datenübertragungsrate kann es jedoch dauern, bis alle Geräte der Reihe nach vom steuernden Client anangesprochen wurden, so dass eine so hohe Anzahl von gleichzeitig angeschlossenen Geräten nur bei entsprechender Nutzung (hohe Datenrate, wenig abzufragende Register, geringer Anspruch an Aktualität) sinnhaft ist.
Repeater: Ein RS-485 Bus kann mit Repeater in mehrere Segmente getrennt werden. Damit kann die maximale Leitungslänge über 1200 Meter hinaus verlängert und der volle Adressraum von 248 Geräten auch elektrisch genutzt werden. Auch hier gilt: Ja nach Datenübertragungsrate kann es jedoch dauern, bis alle Geräte der Reihe nach vom steuernden Client anangesprochen wurden, so dass eine so hohe Anzahl von gleichzeitig angeschlossenen Geräten nur bei entsprechender Nutzung (hohe Datenrate, wenig abzufragende Register, geringer Anspruch an Aktualität) sinnhaft ist.
Modbus TCP (über Ethernet)
Modbus TCP nutzt TCP/IP Netzwerke via Ethernet Schnittstelle. Mit dem Protokoll Modbus TCP werden die jeweiligen Geräte über ihre IP-Adresse (und ggfls die Unit ID) angesprochen.
Der Timberwolf Server nutzt für Modbus TCP die eingebaute Ethernet Schnittstelle zum lokalen Netzwerk. Sofern das lokale Netzwerk mit weiteren Netzen über Router, Datenleitungen und VPNs verbunden ist, können darüber Modbus TCP Verbindungen weltweit geführt werden.
Für jedes einzelne angesprochenes Modbus TCP Gerät richten Sie eine Modbus Verbindung ein und weisen ein Modbus Subsystem zu.
Modbus TCP Server
Ein Modbus TCP Gerät als Server (das abzufragende Gerät ist der Server, das ansteuernde Gerät ist der Client, der Timberwolf Server ist mithin der Client) wird nur über die IP Adresse angesteuert, die Unit ID wird ignoriert.
Modbus TCP Gateway
Modbus TCP Geräte können auch als Gateway implementiert sein.
Modbus TCP to RTU Gateways: Bei “echten” Modbus Gateways gibt es einen Anschluss für einen RS-485 Bus zur Nutzung mit Modbus RTU Geräten. Hier können also serielle RTU Geräte angeschlossen werden, der Timberwolf Server spricht hier mit dem Gateway per Modbus TCP und das Gateway setzt diese Kommunikation auf den RS-485 Bus mit Modbus RTU um. Da an Modbus RTU theoretisch bis zu 248 Geräte angeschlossen werden können, muss eine Adressierung der RTU Geräte möglich sein. Dies erfolgt durch die im Modbus TCP mit angebbare Modbus Unit ID Adresse. Diese wird vom Gateway dannn als Modbus RTU ID umgesetzt und auf den Bus mit gesendet. Auf diese Weise kann ein das Gateway abfragender Client jedes einzelne Gerät auf dem hinter dem Gateway liegenden RTU Bus adressieren.
Hinweis: Im Timberwolf Server müssen Sie bei Nutzung von Modbus TCP nicht angeben, ob es sich um einen normalen Modbus TCP Server handelt oder um ein Modbus TCP Gateway. Geben Sie einfach - soweit für die Adressierung nötig - die zu nutzende ID an, diese wird dann immer mitgesendet und von Gateways entsprechend beachtet (und von normalen Servern nicht). Damit können Sie auch Modbus RTU Geräte, die z.B. sich in einem Nebengebäude befinden, mit dem Timberwolf Server verbinden, wenn Sie nur eine IP Verbindung (LAN/WLAN) zum Nebengebäude (oder weiter entfernt über VPN) verbinden.
Modbus TCP “to intern” Gateways: Daneben gibt es auch “unechte” Modbus TCP Gateways, bei denen es zwar keinen nach außen geführten RTU Bus gibt, aber dennoch sich mehrere Funktionsmodule im Gerät befinden oder über einen herstellereigenen Bus geführt werden. Letzteres findet sich bei modularen HKL-Anlagen sowie modularen Wechselrichter- und Batterieanlangen. Die einzelnen Funktionseinheiten werden dann über die Unit ID adressiert, da der gemeinsame Controller über eine IP-Adresse angesprochen wird..
Prüfen Sie die Dokumentation bei Modbus TCP Geräten auf Unit-ID Vorgaben
Bitte prüfen Sie bei Modbus TCP Geräten - ohne erkennbar herausgeführten RTU Bus - daher, ob diese als normaler Modbus TCP Server implementiert sind (welche die Unit ID nicht beachten) oder als Modbus TCP Gateway und daher zusätzlich die Angabe der richtigen Unit ID für die vollständige Adressierung erforderlich ist.
Rollen: Modbus Client und Modbus Server
Modbus ist ein Client-Server-Protokoll (früher als “Master-Slave” bezeichnet). Der Client (früher “Master”) steuert die Kommunikation im Bus und fragt die Modbus Geräte ab, die als Modbus Server (früher als “Slave” bezeichnet) agieren. Der Client (“Master”) fragt nun von den Servern (“Slaves”) entweder die einzelnen Register ab („lesen“) oder überträgt Werte an dessen Register („schreiben“).
Ein die gesamte Kommunikation am Bus steuernder Client (aka “Master”) kann auch mehrere Server (aka “Slave”) ansprechen. Im Timberwolf Server legen Sie die Intervalle fest, welche Register welcher Server angesprochen werden und wie Lese- und / oder Schreib-Register angesprochen und konvertiert sowie mit dem Objektsystem verknüpft werden.
Zu Unterscheiden sind ZWEI verschiedene Ausführungen des “Modbus”:
Modbus RTU: In einem Modbus RTU Bus (serieller zweidraht Bus) darf es nur einen steuernden Client geben und bis zu 248 adressierbare Server pro Modbus System (das ist ein auf RS-485 basierender serieller Bus mit Modbus Protokoll).
Modbus TCP: In Modbus TCP (TCP Netzwerk) ist die Zahl der Clients, die einen Server (gleichzeitig) abfragen nicht durch das Protokoll selbst begrenzt. Üblich ist es jedoch, dass in der jeweiligen Implementierung eines Modbus TCP Servers die Anzahl der gleichzeitigen Verbindungen durch Clients limitiert ist. Dies entnehmen Sie bitte der Anleitung des fremden Modbus TCP Servers bzw. Gateways.
Hinweis Im Timberwolf Server ist die Anzahl der gleichzeitigen Verbindungen zu den Modbus Geräten (als Server) nicht künstlich begrenzt. Sie können den Timberwolf Server bis zur Ausschöpfung der Systemressourcen bzw. der verfügbaren Bandbreiten der Bussysteme konfigurieren.
Datenaustausch: Register, Registersets und Functioncode
Modbus Geräte können jeweils über bis zu vier Sets zu jeweils 65.536 Register verfügen. Zwei dieser Sets sind nur für 1-Bit Register vorgesehen (jeweils in der Variante “Nur-Lesen” sowie “Lesen- und Schreiben”), die anderen beiden Sets ausschließlich für 16 Bit Register (ebenfalls jeweils einmal als “Nur-Lesen” sowie einmal als “Lesen- und Schreiben”).
Welches Register aus welchem der vier Registersets angesprochen wird, ergibt sich aus der Kombination von anzusprechender Registeradresse und dem jeweilig verwendeten Functioncode.
Hinweis Für die vier möglichen Gruppen von Registern gibt es keine klare Bezeichnung in der Modbus Spezifikation. Teilweise werden diese als Tabelle bezeichnet. Für die Benutzeroberfläche im Timberwolf Server und innerhalb dieser Dokumentation verwenden wir die Bezeichnung “Registerset”. Wie diese im jeweiligen Modbus Gerät umgesetzt sind, obliegt dem jeweiligen Hersteller. Es ist durchaus möglich, dass die vier (theoretisch möglichen) Registersets intern auf dieselben Datenbereiche “gemappt” sind. Bitte konsultieren Sie die Herstellerdokumentation der verwendeten Modbus Geräte.
Functioncode
Die Art und Weise des Zugriffs auf Modbus Register wird über “Functioncodes” gesteuert. Der Zugriff auf ein Register erfolgt über eine Registeradresse in Verbindung mit dem Functioncode.
Hinweis Die Register der vier unterschiedlichen Registersets werden zunächst über dieselbe Registernummer adressiert, obwohl das eine Register unter dieser Nummer z.B. ein schreibgeschütztes 1-Bit Register sein kann oder auch ein beschreibbares 16-Bit Register. Das Modbus Gerät erkennt erst in Verbindung mit dem Functioncode, welches Register aus welchem Registerset tatsächlich auszuwählen ist.
Für die Zuordnung der Functionscodes zu Registerset gilt die folgende Tabelle:
REGISTER | FUNCTIONCODES & ERRORCODES | |||||
---|---|---|---|---|---|---|
Register-Adresse | Datagram-Adresse | Registerset | Breite | (Multiple) | Single | Multiple |
00001 bis | 0x0000 bis | Set 0 | 1 Bit R/W | FC: 0x01 (01) | FC: 0x05 (05) | FC: 0x0F (15) |
00001 bis | 0x0000 bis | Set 1 | 1 Bit RO | FC: 0x02 (02) |
|
|
00001 bis | 0x0000 bis | Set 3 | 16 Bit RO | FC: 0x04 (04) |
|
|
00001 bis | 0x0000 bis | Set 4 | 16 Bit R/W | FC: 0x03 (03) | FC: 0x06 (06) | FC: 0x10 (16) |
erläuterungDie Datagram Adresse ist derjenige 16-Bit Wert der Registeradresse, der in der Kommunikation mit dem Modbus Gerät tatsächlich im Protokoll verwendet (also über den Bus übertragen) wird und ist hier der Unterscheidung wegen in hexadezimaler Schreibweise angegeben. Die Datagram Adresse erfolgt nach dem binären System und die erste nutzbare Adresse ist “0”.
In der Gerätedokumentation werden Registeradressen jedoch meist zur Basis 1 angegeben (erste nutzbare Adresse beginnt mit 1) obwohl diese zur Basis 0 über den Bus übertragen werden. Der Unterschied zur Darstellung in der Dokumentation wird auch manchmal als “Offset” bezeichnet. Details hierzu weiter unten.
Die Errorcodes werden vom Timberwolf Server automatisch ausgewertet.
Funktion Im Modbus Profileditor kann die Registeradresse mit dem Functioncode durch interaktive Prüfung bei der Erfassung eines Datenaustauschpunktes bereits während der Eingabe vom Nutzer getestet werden, so dass keine “blinde” Konfiguration nötig ist.
Registeradressierung: Base 0 oder Base 1 / Dezimal oder Hex
Damit wird bezeichnet, ob die Zählweise einer Adressierung bei 0 oder bei 1 beginnt. In der Computertechnik starten Adressen und Zähler bei dem Wert “0”, der Mensch ist gewohnt ab “1” zu zählen.
Wichtig: Sie müssen unbedingt darauf achten, ob die Adresse in der Dokumentation zur Basis 0 (als Datagramm Adresse) oder zur Basis 1 angegeben wird. Häufig findet sich beide Darstellungen auch nebeneinander. Ebsenso wichtig ist, ob es sich um eine dezimale oder hexadezimale Darstellung handelt.
Base 0: Technisch werden im Modbus Protokoll die Registeradressen beginnend ab 0 adressiert. Die erste ansprechbare Adresse eines Registers hat damit die Adresse “0” und die größte mögliche ansprechbare Adresse ist “65.535”. Diese Adresse wird auch als die “Datagram-Adresse” bezeichnet, weil diese 16 Bit Adresse innerhalb des Modbus Protokoll in der tatsächlichen Kommunikation am Bus so verwendet wird.
Dies ist der Tatsache geschuldet, dass der kleinste Wert in jeden Zahlensystem die 0 ist. Wir Menschen tun uns damit schwer, weil uns von Kind das Zählen ab 1 beigebracht wird und wir, z.B. bei einer Reihe von Bäumen, der erste Baum als der 1. bezeichnet wird ist und nicht mit der Nummer 0 und der zweite Baum mit der 1. Im Rechnern wird dagegen bei 0 angefangen mit dem Indizieren und dies ist damit die kleinste Adresse, mithin beginnt das kleinste mögliche Modbus Register mit der Adresse 0. Es obliegt dem Hersteller, welche Adressen tatsächlich belegt werden, es muss keinesfalls bei 0 begonnen werden.
Base 1: In der Begleitdokumentation der Hersteller zu Modbus Geräte werden Adressen (der menschlichen Zählweise entsprechend) oft beginnend ab “1” dargestellt, entsprechend im Bereich von 1 bis 65.536. Technisch übertragen würden diese von 0 bis 65.535 auf dem Bus.
Dezimal vs. HEX: Üblich ist in Dokumentationen eine dezimale Darstellung der Adresse, manchmal findet sich jedoch auch eine hexadezimale Darstellung der Adressen in der Dokumentation.
Funktion Die im Timberwolf Server vorgesehene Umschaltung der Darstellung der Registeradressen sowohl zur Basis 0 als auch zur Basis 1 und diese jeweils in der dezimalen oder der hexadezimalen Schreibweise ist noch nicht vollständig umgesetzt. Ggfls. müssen Sie daher selbst umrechnen.