Modbus RTU exception, aber welche?

OP #6119774
Lesenswert?
• ▲
▼
sehr verehrte Spezialisten,

beim Basteln am zillionsten Modbus-Slave fehlt mir eine Fehlermeldung. 
Im Modbus Application Protocol heißt es
1
ILLEGAL_DATA_VALUE
2
A value contained in the query data field is not an allowable value
3
for server (or slave). This indicates a fault in the structure of
4
the remainder of a complex request, such as that the implied length
5
is incorrect. It specifically does NOT mean that a data item submitted
6
for storage in a register has a value outside the expectation of the
7
application program, since the MODBUS protocol is unaware of the
8
significance of any particular value of any particular register.
Wenn ich den Namen "DATA" wörtlich nehme, fehlt mir eine exception für 
den Fall, dass der Request die falsche Länge hat. Aber die Definition 
sagt das Gegenteil und deshalb fehlt eine exception für (besser: gegen) 
falsche Daten. SLAVE_DEVICE_FAILURE wäre eine Notlösung, aber das ist 
unfair, der Slave hat ja nichts falsch gemacht und es ist eben gerade 
nichts kaputt.
Wie ist das gemeint? Was antwortet ihr in so einem Fall?
#6119824
Lesenswert?
• ▲
▼
Hallo Bauform

der Begriff 'Data' wird in der Modbus Spec im Sinne von 'Parameter' 
verwendet. Der Exception Code 03 sagt aus, dass die gesendeten Parameter 
für den benutzten Function Code generell oder Server- (Slave-) 
spezifisch nicht korrekt sind (z.B. die von dir angeführte Länge).
In der MB Spec sind für die einzelnen Function Codes Ablaufdiagramme 
gezeigt, die die Abfolge der Überprüfung eines Requests und 
gegebenenfalls den Exception Code darstellen.
Modbus kennt (neben Bits) nur 16 Bit Register und jeglicher Inhalt ist 
für MB gültig. Wenn deine Kommunikation z.B. mehrere Register zu einer 
64-Bit Floating Point Zahl kombiniert, könnten dabei Werte innerhalb der 
4 verwendeten Register auftreten die für die Float zu einem 'not a 
number' Fehler führen, dem Modbus Protokoll aber völlig egal sind und zu 
keinem Exception Code führen.

Es gibt keine Plausibilitätsüberprüfung für Dateninhalte im Modbus 
Protokoll.
(nur für Protokollparameter)
OP #6120814
Lesenswert?
• ▲
▼
Faszinierend. Kaum kann ich mal ein paar Stunden hier nicht rein 
schauen, gibt es sofort eine richtig gute Antwort. Dankeschön!

Von den Ablaufdiagrammen her ist ja eigentlich alles klar. Ich finde nur 
den Namen SLAVE_DEVICE_FAILURE nicht so toll. Aber meinetwegen, dann 
soll es so sein.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.