Forum: Mikrocontroller und Digitale Elektronik Modbus RTU exception, aber welche?


von Bauform B. (bauformb)


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?

von Ulrich K. (elektromechanikus)


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)

von Bauform B. (bauformb)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.