Auslesen eines Slaves über Modbus RS485 Fehlermeldung "illegal data value"

Zuviel Werbung?
-> Hier kostenlos registrieren
Die Hinweise die Busleitungen zu drehen oder die Kommunikationseinstellungen zu prüfen ergeben keinen Sinn da bereits mit dem Slave kommuniziert werden kann.
Der Fehler 2: Illegal Data Address wird vom Slave zurückgesendet. Somit empfängt der Slave das Modbus Telegramm und die Antwort erreicht auch den Master.

Eingaberegister müssen auf jeden Fall mit dem Funktionscode 4 gelesen werden. Die Fußzeile in der Modbusdokumentation auf Seite 4 macht mich stutzig. Hier bin ich mir nicht sicher ob auf die Adresse im Handbuch noch ein Offset aufgerechnet werden muss.

Im Screenshot von gestern sehe ich, dass Du drei Modbusanfragen sendest. Bist Du sicher, dass der Fehler von der Anfage auf Register 4898 stammt?

Grüße
 
@Tobsucht der Fehler tritt bei allen Anfragen. Ich habe einen Versuchsaufbau mit einem anderen Gerät des Herstellers durchgeführt (ohne Messwerte). Der Test hat mit Modbus Poll sowie auch mit dem selben Programm in eCockpit funktioniert. Somit schließe ich darauf das es vermutlich einfach am Gerät selbst liegt. Vielleicht hat es etwas mit den Einstellungen zu tun oder das Gerät ist defekt.
 

Anhänge

  • Register Wirkleistung.png
    Register Wirkleistung.png
    16,5 KB · Aufrufe: 8
Zuviel Werbung?
-> Hier kostenlos registrieren
Zur Lösung des Problems:

Es hat sich herausgestellt, dass der Abschlusswiderstand von 120 Ohm auf dem Bus zu gering war.
Somit habe ich zwei Widerstände in Reihe geschalten. Fehlermeldung "illegal data value" ist weg und ich kann mir problemlos alle Register auslesen.
 
Also doch was physikalisches, wie vermutet.
Kurioser Fehler. Ich habe bei RTU Kommunikation nie mit was anderem als 120 Ohm gearbeitet.
Ich finde es super das du uns hier die Lösung fürs Problem verrätst
 
Ein reiner Widerstand legt beide Busleitungen auf das gleiche Potential. Dies ist bei RS485 ungünstig, da die Transceiver eine Spannung kleiner als -200mV bzw. größer als 200mV benötigen um eindeutig zwischen 0 und 1 unterscheiden zu können.
Daher ist ein aktiver Abschluss vorgesehen, der den Pegel in Kommunikationspausen auf einem gültigen Wert hält.

Wenn Du den Widerstand vergrößerst werden die Transceiver nicht so stark belastet, was einen höheren Pegel zur Folge hat.

Das passt aber alles nicht zu Deinem Fehlerbild.
In fast einem Monat hast Du am Aufbau und an der Anfrage nicht verändert außer einen weiteren Widerstand einzufügen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Für mich ist die Erklärung mit dem Abschlußwiderstand auch nicht befriedigend.

Könnte es vielleicht sein, daß da mehrere Teilnehmer am RS485-Bus angeschlossen sind? Und es sind mehr als 2 Abschlußwiderstände angeschaltet, womöglich bei fast jedem Teilnehmer? Oder ist das Buskabel zu dem Teilnehmer sehr lang oder gar eine lange Stichleitung, sprich Stern-Struktur anstatt Linien-Struktur? Oder ist das Buskabel in ungeeigneter Qualität (nicht abgeschirmt oder Adern nicht verdrillt)?

Kommt die Fehlermeldung "illegal data value" vom Slave oder vom Modbus Master Baustein?

Harald
 
Der Fehler "illegal data value" kommt vom Slave.
Der String wird aus einer Funktion zurückgegeben. Die Funktion erhält den vom Slave zurückgegebenen Fehler aus der Response und gibt den entsprechenden Fehlerstring aus der Modbus Dokumentation zurück.

Selbst wenn Bits bei der Kommunikation kippen und so die Anzahl der Register oder die Registeradresse verändert wird, wird dies über die CRC Checksumme erkannt und das Telegramm wird verworfen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Noch ein paar weitere Infos zum Thema:

Ich hatte die letzten Wochen nur Kontakt zum Support von Wago sowie PQ Plus. Da alle von eine softwareseitigen Fehler ausgingen haben wir nur aus der Ferne drauf geschaut.

Ich war allerdings doch mal vor Ort, da sich nichts besserte. Den Fehler an sich hatte ich durch Zufall entdeckt. Der Abschlusswiderstand von 120 Ohm war parallel auf Klemmen vor der Wago Steuerung geklemmt. Ich wollte checken ob dieser richtig sitzt und habe ihn mit zwei Fingern reingedrückt. Dabei habe ich der Widerstand verändert und zeitgleich gesehen, dass die Verbindung auf "OK" gesprungen ist.

(richtig "illegal data value" kam vom Slave)

Erklären kann ich mir das ganze auch nicht wirklich. Deswegen habe ich auch ein Beweisvideo gemacht :D
Aber durch zwei 120Ohm Widerstände in Reihe hatte es dann problemlos funktioniert.


@PN/DP Zur Verbindung an sich:
Etwa 25m Zweidrahtverbindung über Verdrillte Adern siehe Bild im Anhang. Es gibt keine Weiteren Teilnehmer. Schirm soweit ich weis nicht vorhanden. In einem Verteilerschrank gab es auch noch eine Klemmstelle.
 

Anhänge

  • WhatsApp Image 2023-06-23 at 07.43.17 (1).jpeg
    WhatsApp Image 2023-06-23 at 07.43.17 (1).jpeg
    108,6 KB · Aufrufe: 13
  • WhatsApp Image 2023-06-23 at 07.43.17.jpeg
    WhatsApp Image 2023-06-23 at 07.43.17.jpeg
    86 KB · Aufrufe: 13
Zuletzt bearbeitet:
Zurück
Oben