In dieser Lektion

Was diese Lektion behandelt

  • Der Adressplan: Adresse 0, der reservierte Bereich und die 247 nutzbaren
  • Warum eine doppelte Adresse den ganzen Bus lahmlegt, nicht ein Gerät
  • Abfragereihenfolge, Timeouts und wie viele Geräte an ein Segment passen

Vorher lesen: RS485 erklärt: A, B, Common und Terminierung, Baudrate und Parität: warum 8E1 Standard ist

Mehrere Modbus Geräte an einem Bus teilen sich eine gemeinsame Leitung, auf der jedes Telegramm bei jedem Gerät ankommt. Nur das erste Byte, die Serveradresse, entscheidet darüber, wer antwortet und wer schweigt. Steht dieselbe Adresse zweimal auf der Linie, liegt nicht ein Gerät still, sondern der ganze Bus. Nach dieser Lektion stellen Sie einen Adressplan auf, erkennen eine doppelte Adresse am Fehlerbild und wählen Timeouts, die den Rest der Anlage nicht ausbremsen.

Woher der Client weiß, wer antwortet

Weil die Adresse vorne im Telegramm steht und der Server sie in der Antwort wiederholt. Hier ist eine vollständige Anfrage an den Zähler mit der Serveradresse 1, der drei Holding-Register ab PDU-Adresse 107 liefern soll, im Datenblatt die Nummer 40108:

01 03 00 6B 00 03 74 17
ByteWertFeld
101Serveradresse: an wen die Frage geht
203Funktionscode FC03, Holding-Register lesen
3 bis 400 6BStartadresse, PDU-Adresse 107
5 bis 600 03Anzahl: 3 Register
7 bis 874 17CRC-16, Low-Byte zuerst

Die Antwort desselben Zählers auf demselben Adernpaar:

01 03 06 02 2B 00 00 00 64 05 7A
ByteWertFeld
101Serveradresse: wer geantwortet hat
203derselbe Funktionscode FC03
306Byte Count: 6 Datenbytes folgen
4 bis 902 2B 00 00 00 64die Werte 555, 0 und 100
10 bis 1105 7ACRC-16 über das gesamte Telegramm

Zusammen sind das 1 plus 1 plus 1 plus 6 plus 2, also 11 Bytes. Daraus folgt die Regel: Der Client trägt die Zieladresse ein, der Server setzt seine eigene Adresse in die Antwort, und alle anderen Teilnehmer hören mit und schweigen.

Dieselbe Anfrage an den zweiten Zähler auf Adresse 3 unterscheidet sich in genau einem Punkt: Das erste Byte wird zu 03. Die beiden CRC-Bytes ändern sich dadurch mit, denn die Prüfsumme läuft über das komplette Telegramm. Der Client selbst hat übrigens keine Adresse. Adressiert werden nur Server.

Welche Adressen dürfen Sie nutzen?

Für Geräte gilt der Bereich 1 bis 247. Der Adressraum umfasst insgesamt 256 Adressen, aber 0 ist die Broadcast-Adresse und 248 bis 255 sind reserviert.

AdresseBedeutung
0Broadcast, alle Server hören mit
1 bis 247individuelle Serveradressen
248 bis 255reserviert, nicht verwenden

Broadcast bedeutet: Jeder Server erkennt Adresse 0 und führt den Befehl aus, aber keiner antwortet, denn sonst würden alle gleichzeitig senden. Deshalb funktioniert Broadcast nur beim Schreiben, niemals beim Lesen. Ein Broadcast-Schreibbefehl sieht so aus:

00 06 00 01 00 03 99 DA

Das ist FC06, schreibe den Wert 3 auf PDU-Adresse 1, gerichtet an alle. Eine Antwort kommt nicht zurück, und das ist so gewollt.

Reserviert heißt nicht, dass Ihr Gerät die Adresse ablehnt. Viele akzeptieren 250 klaglos, und dann läuft es genau so lange gut, bis ein Gateway oder eine neue Firmware sich an die Spezifikation hält.

Was bei doppelter Adresse passiert

Beide Geräte antworten gleichzeitig. Ihre Signale liegen übereinander auf denselben zwei Adern, das Ergebnis ist kein lesbares Frame, und der Client meldet CRC-Fehler oder gar nichts. Weil die Überlagerung von der Bitfolge abhängt, kommen mal gültige und mal kaputte Antworten an, und genau dieses sprunghafte Bild sieht aus wie ein Kabelproblem.

ClientZähler 1addr 3Zähler 2addr 3Beide auf Adresse 3Frames überlagern sich, CRC-Fehler
Zwei Server mit derselben Adresse antworten gleichzeitig, und der Client liest Unsinn.

Die Spezifikation schreibt den Herstellern dafür eine Warnung ins Handbuch: Sind zwei Geräte gleich adressiert, kann sich der gesamte serielle Bus abnorm verhalten, sodass der Client keinen einzigen Teilnehmer mehr erreicht. Eine doppelte Adresse legt also nicht ein Gerät lahm, sondern die ganze Linie.

Ein Gerät finden, dessen Adresse Sie nicht kennen

Sie fragen die Adressen der Reihe nach ab, von 1 bis 247, und notieren, welche antwortet. Ein Scanner macht nichts anderes: Er schickt dieselbe kurze Leseanfrage an jede Adresse und wertet aus, ob eine Antwort kommt oder der Timeout zuschlägt.

Adress-SweepID 1ID 12ID 301247AntwortetStill
Gehen Sie den Adressraum mit jeweils einem Gerät am Bus durch.

Entscheidend ist die Vorbedingung: genau ein Gerät am Bus. Sweepen Sie mit der kompletten Linie, dann liefert eine vorhandene Doppeladresse Treffer, die es gar nicht gibt. Baudrate und Parität müssen dabei stimmen, sonst antwortet niemand, obwohl alle da sind. Wie ein solcher Durchlauf abläuft, steht in der Anleitung zum Scannen eines Modbus-Netzwerks.

Wie viele Geräte passen an ein Segment?

Ohne Repeater sind 32 Geräte immer zulässig. Braucht auch nur ein Teilnehmer eine Leitungspolarisierung, kostet Sie das vier Plätze, es bleiben also 28.

Die Adressen 1 bis 247 klingen nach 247 Teilnehmern, sind aber keine Zusage über den Bus. Elektrisch zählt das Segment, und diese Grenze kommt zuerst.

Mehr als 32 geht nur, wenn jedes Gerät eine anteilige Unit Load mitbringt und das so im Datenblatt steht: mit Transceivern von einem Achtel Unit Load passen bis zu 256 Geräte an ein Segment, mit externem Fail-safe-Biasing noch 96. Sind Sie an der Grenze, hilft ein Repeater. Er macht aus einer langen Linie zwei Segmente, die jeweils wieder eigene Teilnehmer zählen dürfen, jedes mit Terminierung an seinen beiden Enden. Welches Kabel und welche Terminierung dazugehören, steht in der Anleitung zur RS485-Verkabelung für Modbus, und die elektrischen Hintergründe klärt die Lektion zu RS485, Terminierung und Biasing.

In welcher Reihenfolge fragen Sie ab?

Der Reihe nach, denn ein Client spricht immer nur mit einem Gerät. Die Zykluszeit ist damit schlicht die Summe aller Transaktionen, und das langsamste Gerät bestimmt das Tempo für alle.

Ein durchgerechnetes Beispiel: zehn Energiezähler, 9600 Baud, pro Zähler ein Block von 24 Registern. Die Anfrage ist 8 Byte lang, die Antwort 53 Byte, davor und danach stehen je 3,5 Zeichenzeiten Pause, zusammen 7. Das sind 68 Zeichenzeiten zu je 1,1458 ms bei 9600 Baud, also 77,92 ms reine Buszeit pro Zähler. Rechnet man 20 ms Verarbeitungszeit im Gerät dazu, eine Annahme und kein Wert aus der Spezifikation, sind es 97,92 ms pro Zähler und rund 979 ms für den Zyklus. Fragen Sie dieselben 24 Register in zwölf einzelnen Lesevorgängen ab, wächst derselbe Zyklus auf 5,7 Sekunden, also fast das Sechsfache.

Daraus folgt die Planungsregel: erst die Zykluszeit rechnen, dann das Poll-Intervall festlegen, nicht umgekehrt. Wie Sie daraus die Buslast bestimmen, vertieft die Lektion zu Poll-Intervall und Buslast. Welche Zähler sich für dichte Abfragen eignen, zeigt der Vergleich von Modbus-Energiezählern für Installateure.

Timeouts und Retries, die nichts kaputt machen

Die Spezifikation nennt bei 9600 Baud einen typischen Response-Timeout von 1 Sekunde bis zu einigen Sekunden und ein Turnaround-Delay von 100 bis 200 ms nach einem Broadcast. Das sind Anhaltspunkte, keine Vorgaben, und hier wird oft zu großzügig eingestellt.

Rechnen Sie das Beispiel weiter: Von den zehn Zählern fällt Zähler 7 aus. Neun Geräte brauchen zusammen 881 ms, dazu kommt einmal der volle Timeout von 1000 ms. Der Zyklus wächst auf 1.881 ms, verdoppelt sich also fast wegen eines einzigen Geräts. Macht der Client drei Versuche, bevor er aufgibt, wartet er dreimal 1000 ms auf dasselbe Gerät: 881 ms plus 3000 ms sind 3.881 ms. Steht das Poll-Intervall auf 2 Sekunden, läuft der Zyklus ab diesem Moment über sein eigenes Intervall, und Sie sehen Lücken bei allen Geräten, nicht nur beim toten.

Abfrage 1AntwortAbfrage 2TimeoutAbfrage 3TimeoutAbfrage 4TimeoutOffline meldenErst nach drei Fehlversuchen offline melden
Eine einzelne misslungene Abfrage ist keine Störung. Drei hintereinander schon.

Häufige Fehler

Adressen ohne Plan vergeben. Zwei Geräte auf 1, weil beide ab Werk auf 1 stehen, ist die häufigste Variante. Das Ergebnis sind CRC-Fehler, die nach einem Kabelproblem aussehen. Konfigurieren Sie jedes Gerät einzeln, bevor es an die Linie kommt.

Mit der kompletten Linie sweepen. Steckt bereits eine Doppeladresse im Bus, liefert der Sweep unbrauchbare Treffer. Hängen Sie ein Gerät nach dem anderen an und lesen Sie es einzeln aus.

Adresse 0 oder 250 verwenden. 0 ist Broadcast, 248 bis 255 sind reserviert. Manche Geräte übernehmen solche Werte trotzdem, und dann läuft es genau so lange gut, bis ein anderes Gerät sich an die Spezifikation hält.

Ein totes Gerät im Zyklus stehen lassen. Bei 1 Sekunde Timeout und drei Versuchen kostet ein einziger Ausfall drei Sekunden pro Runde, mehr als die neun funktionierenden Zähler zusammen. Das ist die übliche Erklärung für den Satz, seit letzter Woche sei alles langsam.

Selbst ausprobieren

Ziel dieser Übung: Sie erstellen einen Adressplan und sehen das Fehlerbild einer doppelten Adresse mit eigenen Augen.

  1. 1

    Bus auf Papier zeichnen

    Notieren Sie, welches Gerät an welcher Stelle der Linie sitzt und welche Serveradresse es bekommt. Vergeben Sie ausschließlich Adressen zwischen 1 und 247.

  2. 2

    Die zwei Enden markieren

    Zeichnen Sie die beiden physikalischen Enden der Linie ein und markieren Sie dort die Terminierung. Nur an diesen zwei Stellen.

  3. 3

    Geräte einzeln anschließen

    Hängen Sie ein Gerät an, lesen Sie es aus, und erst dann kommt das nächste dazu. So schließen Sie Verdrahtung und Adresse gleichzeitig aus.

  4. 4

    Doppelte Adresse absichtlich erzeugen

    Stellen Sie zwei Geräte bewusst auf dieselbe Adresse und lesen Sie diese Adresse aus. Notieren Sie, was Sie sehen: keine Antwort, oder abwechselnd gültige und fehlerhafte Frames.

  5. 5

    Adressen wieder eindeutig machen

    Stellen Sie die Adressen zurück und prüfen Sie, ob alle Geräte wieder antworten.

  6. 6

    Zykluszeit ausrechnen

    Zählen Sie Ihre Geräte, nehmen Sie die Registeranzahl pro Gerät und addieren Sie die Transaktionen so, wie es der Abschnitt zur Abfragereihenfolge vormacht. Legen Sie das Poll-Intervall deutlich über dieses Ergebnis.

  7. 7

    Klemmenleiste beschriften

    Kleben Sie ein Etikett mit Baudrate, Parität und Adresse an die Klemmenleiste. Der nächste Monteur muss dann nicht erneut sweepen.

Vervollständigen Sie danach dieses Paar. Die obere Zeile ist die geprüfte Anfrage an Server 1, die untere geht an Server 3:

Anfrage an Server 1:  01 03 00 6B 00 03 74 17
Anfrage an Server 3:  03 03 00 6B 00 03 __ __

Die letzten beiden Bytes sind nicht 74 17, denn die Prüfsumme läuft über das gesamte Telegramm inklusive Adressbyte. Wie Sie sie ausrechnen, steht in der Lektion zu RTU-Frame und CRC.

Ohne Hardware. Starten Sie zwei Instanzen des pymodbus-Simulators auf verschiedenen TCP-Ports und fragen Sie beide abwechselnd ab. pymodbus 3.15.0 ist kostenlos nutzbar, auch gewerblich. Die mitgelieferte Konfiguration lauscht auf Port 5020; für die zweite Instanz kopieren Sie die Setup-Datei und tragen in server_list einen anderen Port ein:

pymodbus.simulator --modbus_server server --modbus_device device --http_port 8081
pymodbus.simulator --json_file bus2.json --modbus_server server --modbus_device device --http_port 8082

Eine doppelte Adresse lässt sich dort nicht nachstellen, weil auf TCP die IP-Adresse die Geräte unterscheidet und nicht das Adressbyte. Genau dieser Unterschied ist die Brücke zum nächsten Kapitel.

Erwartetes Ergebnis: ein Adressplan auf Papier, eine ausgerechnete Zykluszeit und das Fehlerbild einer doppelten Adresse mit eigenen Augen gesehen.

Zusammenfassung

  • Auf einem RS485-Bus hört jedes Gerät jedes Telegramm mit, und nur die Serveradresse im ersten Byte entscheidet, wer antwortet.
  • Geräte bekommen Adressen zwischen 1 und 247, denn 0 ist Broadcast und 248 bis 255 sind reserviert.
  • Zwei Geräte mit derselben Adresse senden gleichzeitig und machen nicht ein Gerät, sondern den gesamten Bus unbrauchbar.
  • Ohne Repeater sind 32 Geräte zulässig, mit Leitungspolarisierung noch 28, und der Adressbereich sagt darüber nichts aus.
  • Ein Client fragt immer nur ein Gerät ab, deshalb verlängert ein totes Gerät den Zyklus für alle anderen mit.

Überprüfen Sie sich selbst

Vier Fragen zu dieser Lektion. Zu jeder Antwort gibt es eine Erläuterung.

Frage 1 von 4
Seit Sie einen zweiten Zähler ergänzt haben, kommen von Adresse 3 abwechselnd gültige Antworten und CRC-Fehler. Was verdächtigen Sie zuerst?
Warum können Sie mit einem Broadcast an Adresse 0 keine Register lesen?
Ihr Bus braucht Biasing. Wie viele Geräte dürfen Sie ohne Repeater noch anschließen?
Von zehn Zählern fällt Zähler 7 aus. Ihr Timeout steht auf 1 Sekunde, Retries sind aus. Was merken Sie an den übrigen neun?

Kommen Sie bei einem Projekt nicht weiter?

Beschreiben Sie, was Sie sehen und wo es hakt. Wir schauen es uns an und sagen Ihnen, was wir tun würden.

Weiterlesen in der Wissensdatenbank