INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Timeout Error Auslesen Modbusregister



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

16.07.2019, 13:32 (Dieser Beitrag wurde zuletzt bearbeitet: 16.07.2019 15:07 von jg.)
Beitrag #1

sarah_gru Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Aug 2018

2017
2016
DE



Timeout Error Auslesen Modbusregister
Hallo,
ich habe bei meinem Projekt teilweise noch Probleme beim Auslesen der Modbus-Register und hoffe, dass Ihr mir vllt. bei der Suche nach der Fehlerursache helfen könnt.
Ich habe mir schon sämtliche andere Beiträge im Forum dazu durchgelesen und mein Programm dementsprechend umprogrammiert um bspw. vor Glitches zu schützen. Jedoch treten immer noch teilweise Fehler auf.

Zur Fehlermeldung an sich:
- Fehlerbeschreibung LabVIEW: Fehler 6101 bei Timeout Error
- der Fehler tritt völlig unregelmäßig auf (bei einem Programmdurchlauf gar nicht, beim nächsten beim Auslesen des Parameters A, beim darauffolgenden beim Auslesen des Parameters B, dann wieder garnicht,...)

Habe jetzt schon für einige Ursachen einen Schutz eingebaut:
- falls beim Auslesen ein Fehler auftritt wird nochmal maximal 3 mal versucht das Register zu lesen (falls ein Glitch aufgetreten ist)
- falls auch bei den weiteren Versuchen Fehler auftreten wird die VISA-Schnittstelle geschlossen, 500ms gewartet, erneut geöffnet und gelesen (https://forums.ni.com/t5/LabVIEW/modbus-...anguage=en )
- als Timeout für das Auslesen der Register habe ich 1000ms eingestellt (hat somit eigentlich genug Zeit die Daten auszulesen und zu verarbeiten)

Aber trotzdem tritt hier und da noch ein Timeout-Fehler auf.
Ich habe wirklich keine Idee mehr, an was es sonst noch liegen könnte, da auch meine Schnittstelle (Expert EX9530) fehlerfrei ist.

Ich habe mal ein SubVI der Auslesung eines Registers mit in den Anhang getan ... die SubVIs zum Auslesen der anderen Parameter unterscheiden sich ausschließlich durch die Registeradresse.
Falls jemand die verwendeten fertigen SubVIs von LabVIEW nicht hat hab ich auch nochmal einen Screenshot vom Programm mit angehängt.

Ich hoffe ich konnte mein Problem verständlich beschreiben und dass mir jemand helfen kann, denn Bahn

Vielen Dank im Voraus!

MfG
Sarah


Angehängte Datei(en) Thumbnail(s)
   

17.0 .vi  MB absolut position read.vi (Größe: 46,45 KB / Downloads: 203)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
16.07.2019, 13:59
Beitrag #2

MaxP Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 88
Registriert seit: Oct 2016

LV Prof. SSP
-
DE_EN


Deutschland
RE: Timeout Error Auslesen Modbusregister
Hallo Sarah,

erzähl doch mal bitte mehr von deinem Aufbau.
Da du einen USB Serielle Wandler verwendest, gehe ich mal davon aus, dass deine Slave eine serielle Schnittstelle hat?

Wenn es einmal läuft und dann sporadisch nicht mehr, würde ich hier eher auf Hardwareprobleme wie Leitungsverlegung oder ähnliches tippen.

Gruß
Max
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.07.2019, 14:01 (Dieser Beitrag wurde zuletzt bearbeitet: 16.07.2019 14:02 von GerdW.)
Beitrag #3

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Timeout Error Auslesen Modbusregister
Hallo Sarah,

nichts zum Timeout-Fehler an sich, aber zu deinem VI:
Zitat:Habe jetzt schon für einige Ursachen einen Schutz eingebaut:
- falls beim Auslesen ein Fehler auftritt wird nochmal maximal 3 mal versucht das Register zu lesen (falls ein Glitch aufgetreten ist)
Deine Schleifen stoppen, wenn
1. ein Fehler auftritt
2. nach dem vierten (erste Schleife) oder dritten (zweite Schleife) erfolgreichen Modbus-Zugriff
Dies entspricht nicht dem, was du eigentlich haben wolltest!
(Außerdem enthält eine Schleife noch eine kleine Wartezeit, die andere aber nicht!?)

Ersetze die While-Schleifen durch FOR-Loops.
Verdrahte eine "3" an den "N"-Eingang der FOR-Loop.
Mache die Abbruchbedingung der FOR-Loop sichtbar, verbinde sie mit dem ErrorOut der Modbus-Funktion und setze sie auf "Continue if TRUE"…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.07.2019, 15:25
Beitrag #4

sarah_gru Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Aug 2018

2017
2016
DE



RE: Timeout Error Auslesen Modbusregister
Hallo,

danke für die schnellen Antworten!

(16.07.2019 14:01 )GerdW schrieb:  Ersetze die While-Schleifen durch FOR-Loops.
Verdrahte eine "3" an den "N"-Eingang der FOR-Loop.
Mache die Abbruchbedingung der FOR-Loop sichtbar, verbinde sie mit dem ErrorOut der Modbus-Funktion und setze sie auf "Continue if TRUE"…

Oh das stimmt im Prinzip hat es dann überhaupt nicht das gemacht, was ich wollte - habe es so abgeändert wie beschrieben - Danke! (s. Anhang überarbeitetes SubVI)


(16.07.2019 13:59 )MaxP schrieb:  erzähl doch mal bitte mehr von deinem Aufbau.
Da du einen USB Serielle Wandler verwendest, gehe ich mal davon aus, dass deine Slave eine serielle Schnittstelle hat?
Wenn es einmal läuft und dann sporadisch nicht mehr, würde ich hier eher auf Hardwareprobleme wie Leitungsverlegung oder ähnliches tippen.

Mein Aufbau ist folgendermaßen aufgebaut (s. auch Prinzipskizze Anhang):
- Modbus-Schnittstelle: Expert EX9530 über USB mit dem PC verbunden;
- Prüfgerät (Slave-Adresse: 1) mit Expert über Leitung A und B jeweils mit TX+/D+ (B) und mit TX-/D- (A) verbunden;
- auf dem selben Modbus liegt ein zweites Gerät (Slave-Adresse: 247), welches gleichermaßen mit dem Expert verbunden ist;
- lese und beschreibe das Modbus-Register des Prüfgerätes (Slave-Adresse: 1)
- beschreibe ein Modbus-Register des zweiten Gerätes (Slave-Adresse: 247)
- Prüfling und das zweite Gerät sind über I2C miteinander verbunden, wobei der Prüfling der Master ist


Angehängte Datei(en) Thumbnail(s)
   

17.0 .vi  MB absolut position read.vi (Größe: 43,02 KB / Downloads: 218)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.07.2019, 15:25 (Dieser Beitrag wurde zuletzt bearbeitet: 16.07.2019 15:28 von jg.)
Beitrag #5

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Timeout Error Auslesen Modbusregister
(16.07.2019 13:32 )sarah_gru schrieb:  Habe jetzt schon für einige Ursachen einen Schutz eingebaut:
- falls beim Auslesen ein Fehler auftritt wird nochmal maximal 3 mal versucht das Register zu lesen (falls ein Glitch aufgetreten ist)
- falls auch bei den weiteren Versuchen Fehler auftreten wird die VISA-Schnittstelle geschlossen, 500ms gewartet, erneut geöffnet und gelesen (https://forums.ni.com/t5/LabVIEW/modbus-...anguage=en )
- als Timeout für das Auslesen der Register habe ich 1000ms eingestellt (hat somit eigentlich genug Zeit die Daten auszulesen und zu verarbeiten)

Wie konfigurierst du die VISA-Schnittstelle? Mit dem Init-VI aus der Modbus-Library?

(16.07.2019 13:32 )sarah_gru schrieb:  Ich habe mal ein SubVI der Auslesung eines Registers mit in den Anhang getan ... die SubVIs zum Auslesen der anderen Parameter unterscheiden sich ausschließlich durch die Registeradresse.
Ich hoffe, du hast deine Abfragen nicht parallel programmiert. Die Modbus-VIs sind reentrant, die lassen eine parallele Verarbeitung zu, aber die serielle COM-Schnittstelle nicht. Das gibt garantiert Ärger!

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.07.2019, 15:30
Beitrag #6

sarah_gru Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Aug 2018

2017
2016
DE



RE: Timeout Error Auslesen Modbusregister
(16.07.2019 15:25 )jg schrieb:  Wie konfigurierst du die VISA-Schnittstelle? Mit dem Init-VI aus der Modbus-Library?
habe dafür das vorgegebene SubVI "MB Serial Init.vi" aus der Modbus-Library verwendet.

(16.07.2019 15:25 )jg schrieb:  Ich hoffe, du hast deine Abfragen nicht parallel programmiert. Die Modbus-VIs sind reentrant, die würden eine parallele Verarbeitung zulassen, aber die serielle COM-Schnittstelle nicht. Das gibt garantiert Ärger!
Nein die Auslesung der Register erfolgt hintereinander und überschneiden sich nicht.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
16.07.2019, 15:46
Beitrag #7

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Timeout Error Auslesen Modbusregister
OK, sehr gut zu beiden Punkten!

Ein Fehler in der Library ist mir bei Modbus RTU bekannt, vgl. die Rückmeldungen aus diesem NI-Beitrag.
Der Datentyp beim MB-CRC_16.vi ist falsch definiert. Ich bin mir aber nicht sicher, ob das wirklich zu Fehler 6101 führen kann.

Um mögliche Probleme mit dieser Modbus-API auszuschließen, du könntest ja einmal eine andere ausprobieren, z.B. diese hier.

Überprüfe auch mal die Powersettings deiner USB-Schnittstelle.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.07.2019, 09:23
Beitrag #8

sarah_gru Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Aug 2018

2017
2016
DE



RE: Timeout Error Auslesen Modbusregister
Ich habe jetzt einmal mit einer zusätzlichen Schnittstellte und dem Programm Docklight V2.2 die Datenübermittlung genauer beobachtet.

Habe jetzt drei verschiedene Fehlerfälle ermitteln können:

1) beim Lesen eines Registers: als function wird der Wert 0x94 übermittelt (s. Bild "functioncode") ... diesen sollte es jedoch nicht geben - ausschließlich 0x03 (Read) und 0x06 (Write)
2) beim Lesen eines Registers: es werden zu wenig Daten übermittelt (s. Bild "LostDataRead")
... eigentlich sollte z.B. 01 (Adresse) 03 (Lesen) 0B (Startadresse) 01 (Anzahl der zu lesenden Register) 01 06 (Daten) ... ... (CRC)
3) beim Schreiben des Registers: es werden zu wenig Daten übermittelt (s. Bild "LostDataWrite") ... die Daten stimmen, jedoch tritt öfters ein Fehler auf, da sobald zweimal der gleiche Datensatz auf dem Bus liegt ein Fehler vorgefallen sein muss und ein erneutes Senden / Empfangen versucht wird.

Bestätigt das vielleicht den Verdacht, dass der Fehler durch die Library kommt?

LG
Sarah


Angehängte Datei(en) Thumbnail(s)
           
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.07.2019, 18:34 (Dieser Beitrag wurde zuletzt bearbeitet: 19.07.2019 08:58 von jg.)
Beitrag #9

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Timeout Error Auslesen Modbusregister
Die Mitschnitte beweisen eher, dass du Probleme mit dem Bus, mit der Gegenstelle oder dem USB zu RS485 Umsetzer hast.

Alle deine Analysen stimmen nicht:

zu 1) Der Abfrage-Frame beginne ein paar Byte früher:
   
Er ist komplett und korrekt: Bytes in Hex: 01 03 00 05 00 01 94 0B - also Abfrage von Holding Registern von Device 1, Register 5, Anzahl 1, korrekte Checksumme.

Aber die Antwort ist verstümmelt. Vgl. hierzu eine korrekte Frage-Anwort Reihenfolge:
   
0x01 0x03 0x02 wurde irgendwie zu 0x20. Nachdem dieser Fehler in der Antwort liegt, hat das nichts mit LabVIEW zu tun.

zu 3) Bei Function Code 06 (Write Single Register) antwortet der Teilnehmer mit demselben Frame (vgl. https://en.wikipedia.org/wiki/Modbus ). Zweimal dieselbe Nachricht ist in diesem Fall also korrekt.

Ebenso bist du mit dem markierten Frame bei Punkt 2 auf dem Holzweg. Das ist die korrekte Antwort deines Slave auf die Master-Anfrage davor (vgl. wieder den Wikipedia Link). Die Antwort auf eine Holding-Register Anfrage lautet 01 03 "Anzahl Bytes" "Werte Register" "Checksum". Anzahl Bytes =2, da du nur 1 Register abgefragt hast, dann folgen 2 Bytes für den Wert des 16bit-Register und die 16bit CRC. Alles in Ordnung.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  PostMultipart Timeout Gladii 1 2.538 13.04.2022 10:15
Letzter Beitrag: Martin.Henz
  "Timeout" bei NI-XNET FRAME INPUT STREAM andrepf 4 6.253 06.04.2016 10:12
Letzter Beitrag: andrepf
  [split] VISA RS232 TimeOut MODDER 9 8.620 16.09.2013 09:12
Letzter Beitrag: GerdW
  Modbus Timeout ab 30 Registereinträgen Pitt 8 6.872 18.10.2012 14:20
Letzter Beitrag: Pitt

Gehe zu: