Modbus: "Illegal data address" Fehler in Holding Register in zulässigem Bereich

Bohnet

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Modbus: "Illegal data address" Fehler in Holding Register in zulässigem Bereich

Bei den Unit-Tests für einen Modbus-Treiber am Testobjekt einer Wago-Steuerung bin ich über folgendes Verhalten gestoßen:
  1. Ich kann die Holding Register 0 bis 1022 auslesen.
  2. Ich kann die Holding Register 1022 bis 13000 nicht auslesen. Ich bekomme eine "illegal data address" Fehlermeldung.
  3. Ich kann die Holding Register 13000 bis 25000 auslesen.

Das Verhalten verwundert mich, da ich angenommen hatte, dass Geräte, welche Modbus unterstützen, sich auf eine der beiden folgenden Arten im Bezug auf Read Holding Registers (3) verhalten:
  1. Jedes Gerät unterstützt die volle Reichweite an Adressen zwischen 0x0000 und 0xFFFF.
  2. Jedes Gerät unterstützt Adressen im Bereich 0x0000 bis N, wobei N <= 0xFFFF

Keine der beiden oben genannten Thesen würde das vorgefundene Verhalten erklären, deswegen hier meine Fragen:

  1. Ist eine der Thesen über das erwartete Verhalten bei Lesezugriffen zutreffend und mein Gerät verhält sich fehlerhaft? Wenn nein, welches Verhalten kann ich erwarten?
  2. Gibt es einen anderen Grund, als "out of bounds" für eine "illegal data address" Fehlermeldung die das Verhalten erklären könnte?

Vielen Dank für jede Hilfe!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Es ist für mich nicht ganz klar, welche der beiden Steuerungen am Rack ich jetzt eigentlich benutze, aber es ist entweder eine 750-841 oder eine 750-312. Aber wenn das zumindest theoretisch möglich ist, nimmt mir das schon viel Last, dann weiß ich, dass ich mich darauf einstellen muss, dass ich auch innerhalb meines möglichen Addressierungsbereiches "illegal data address" Fehlermeldung erhalten kann und mich bei Optimierungsüberlegungen zu einem möglichen Zusammenfassen der Leseoperationen eben nicht darauf verlassen kann, dass wenn A und B, dann auch alles dazwischen.

Vielen Dank schon Mal.
 
Zuletzt bearbeitet:
Hallo,
Das Verhalten verwundert mich, da ich angenommen hatte, dass Geräte, welche Modbus unterstützen, sich auf eine der beiden folgenden Arten im Bezug auf Read Holding Registers (3) verhalten:
  1. Jedes Gerät unterstützt die volle Reichweite an Adressen zwischen 0x0000 und 0xFFFF.
  2. Jedes Gerät unterstützt Adressen im Bereich 0x0000 bis N, wobei N <= 0xFFFF

die Annahme ist leider falsch.

Aber selbst wenn sie richtig wäre, die Hersteller haben alle ihre eigene Interpretationen.

So gibt es unter anderen auch bei den Wago Controllern/Kopplern Adressen, auf die man mit Read Holding Registers und einer Länge größer 1 zugreifen muß, um Informationen zu bekommen, bei denen man aber nicht mit auf das nächsthöhere Register zugreift.

Z.B. beim Wago Koppler 352
Da erhält man über die Registeradresse 0x2020 die Kurzbeschreibung des Kopplers. Um die volle Beschreibung zu erhalten muß man die Adresse mit der Länge 16 lesen. Das zweite Word, daß man zurückbekommt gibt jetzt aber nicht den Inhalt der Adresse 0x2021 (Kompilierzeit) an sondern das zweite Word der Beschreibung. Um die Kompilierzeit zu erhalten muß man direkt addressieren (0x2021) und dann mit der Länge 8.

Gruß
 
So gibt es unter anderen auch bei den Wago Controllern/Kopplern Adressen, auf die man mit Read Holding Registers und einer Länge größer 1 zugreifen muß, um Informationen zu bekommen, bei denen man aber nicht mit auf das nächsthöhere Register zugreift.

Das ist sehr interessant und definitiv gut zu wissen! Ich glaube ich habe aber noch nicht ganz verstanden, wie das mit dem oben beschriebenen Verhalten korreliert. So, wie du das Problem beschreibst, verstehe ich, dass man beim Zugriff auf manche Register nicht die Daten bekommt, die man denkt zu bekommen, aber ich verstehe noch nicht, wie das dazu führen kann das manche Register unlesbar werden.
 
Und bei PFC100 und 200 von Wago sieht es nochmal ganz anders aus.
Fazit:
Alle Konstanten sind variabel :D
 
Zurück
Oben