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 

Fehlerbehandlung in SubVIs



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!

13.05.2011, 14:08
Beitrag #1

BerndD Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: May 2011

9.0 Student
2011
DE



Fehlerbehandlung in SubVIs
Hallo,

mein erstes Projekt in LV ist es, für ein USB-Gerät eine LV-Anbindung zu schreiben. Ich habe die erste SubVI erfolgreich erstellt. Sie ruft über CLF’s eine in Delphi geschriebene DLL auf. Es funktioniert soweit gut.

Nun möchte ich mich um die Fehlerbehandlung kümmern. Also Fehlereingang zur Verfügung stellen, Fehler zur 1. CLF schleifen. Solange Fehler anliegt, nichts machen. Wenn Ok, DLL-Funktion aufrufen, Rückgabewert auswerten und in Fehlercluster einspeisen und zur nächsten CLF schleifen. Dort dasselbe wie bei der 1. CLF und dann den Fehlercluster als Ausgang zur Verfügung stellen. Am Ausgang sollen die durchgeschliffenen Fehler plus den eigenen Fehlern anliegen.

Da dies ein Standard-Problem ist, das von einem Profi quasi ständig gelöst wird, hoffe ich ihr könnt mir eine SubVI zeigen, wo dies vorbildlich gelöst wurde. Oder ein Artikel wo das Thema Fehlerbehandlung ausfühlich beschrieben wird.

Selbst habe ich leider nichts gefunden, was vermutlich daran liegt, dass bei Beispielen die Fehlerbehandlung weggelassen wird, um es einfach halten zu können. Das Durcharbeiten der Hilfe zum Thema Fehlerbehandlung scheitert daran, das ständig auf eine „NI Scan Engine” verwiesen wird. Was da dann steht ist mir einfach zu hoch. Ich denke so tief muss ich auch vorerst nicht einsteigen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.05.2011, 10:27
Beitrag #2

M Nussbaumer Offline
Zarathustra
****


Beiträge: 654
Registriert seit: Sep 2009

2009 SP1
2009
EN

6300
Schweiz
RE: Fehlerbehandlung in SubVIs
Den Error-Ausgang kannst du an eine Case-Struktur anschliessen, dadurch bekommst du einen Case für den Fehler und einen für den Normalfall. Wie du die Fehler aus deiner DLL behandeln willst, oder gar ignorieren willst liegt bei dir.

Hoffe das hilft dir weiter!

Gruss Marc
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.05.2011, 10:47
Beitrag #3

BerndD Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: May 2011

9.0 Student
2011
DE



RE: Fehlerbehandlung in SubVIs
Hallo,
danke Marc, ich bin zwischenzeitlich weiter gekommen und habe den Fehlerstatus an eine Case-Struktur angeschlossen. Wobei ich einfach mit dem Verbindungswerkzeug ein Abzweig zum Case-Eingang gemacht habe. LV scheint dann automatisch die Signal-Leitung aus dem Cluster zu nehmen.

Leider funktioniert es nicht. Wenn ein Fehler von meiner DLL zurückgeliefert wird, gibt es folgende Probleme:

1. Wenn ich das blinken des Debuggers richtig interpretiere, werden die Ausgabeparameter weiter propagiert, bevor der Rückgabewert (der die Fehlernummer enthält) ausgewertet wird.

2. Das Status-Signal im Fehlercluster wird nicht gesetzt. Oder setzt die Dialogausgabe des Fehlers den Fehlerstatus zurück? Wenn ja, wie kann man das verhindern?

3. Da der Fehlerstatus nicht gesetzt wird, wird der 2. DLL-Aufruf ausgeführt. Danach tritt ein weiteres Problem auf: LabView behauptet in ein Fehlerdialog, dass der zurückgegebene Fehler nicht definiert sei. Das kann eigentlich nicht sein, weil ich die Fehlerbehandlung bei dem beiden Aufrufen gleich aufgebaut habe. Allerdings fällt mir auf, dass beim 2. „General Error Handler.vi“ am Fehlercode-Eingang ein rotes Dreieck ist. Was hat das zu bedeuten?

Ich habe ein Bild der vi und das Projekt angehängt. Für die enthaltene DLL habe ich ein Virencheck bei Virustotal.com durchgeführt und das Protokoll als PDF beigelegt. Hier die MD5 Prüfsumme:

8133252f5978f6f4658baa4e92d6c7b0 *pei2c.dll

Vielen Dank im Vorraus.
Bernd

   
2009 .zip  LabView.zip (Größe: 475,57 KB / Downloads: 244)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.05.2011, 11:41
Beitrag #4

M Nussbaumer Offline
Zarathustra
****


Beiträge: 654
Registriert seit: Sep 2009

2009 SP1
2009
EN

6300
Schweiz
RE: Fehlerbehandlung in SubVIs
(17.05.2011 10:47 )BerndD schrieb:  Hallo,
danke Marc, ich bin zwischenzeitlich weiter gekommen und habe den Fehlerstatus an eine Case-Struktur angeschlossen. Wobei ich einfach mit dem Verbindungswerkzeug ein Abzweig zum Case-Eingang gemacht habe. LV scheint dann automatisch die Signal-Leitung aus dem Cluster zu nehmen.

Leider funktioniert es nicht. Wenn ein Fehler von meiner DLL zurückgeliefert wird, gibt es folgende Probleme:

1. Wenn ich das blinken des Debuggers richtig interpretiere, werden die Ausgabeparameter weiter propagiert, bevor der Rückgabewert (der die Fehlernummer enthält) ausgewertet wird.

Du kannst die Wertezuweisung nochmal in eine Case-Struktur setzten und dort nur im "Nicht-Fehlerfall" die neuen Werte setzen

2. Das Status-Signal im Fehlercluster wird nicht gesetzt. Oder setzt die Dialogausgabe des Fehlers den Fehlerstatus zurück? Wenn ja, wie kann man das verhindern?

Prinzipiell wird der Fehlerstatus nicht ohne entsprechende Programmierereinwirkung zurückgesetzt, jedoch könnte es sein das es sich bei der Fehlermeldung um eine Warnung handelt... Wann tritt der Fehler dann eigentlich auf? Wenn ich das Programm starte und keine Karte habe?
Du kannst auch den Fehlercluster nicht von Errorausgang sondern direkt von der DLL weiterführen, falls du den Verdacht hast, dass dein Dialog dir den Status zurücksetzt (was er eigentlich nicht machen sollte)

3. Da der Fehlerstatus nicht gesetzt wird, wird der 2. DLL-Aufruf ausgeführt. Danach tritt ein weiteres Problem auf: LabView behauptet in ein Fehlerdialog, dass der zurückgegebene Fehler nicht definiert sei. Das kann eigentlich nicht sein, weil ich die Fehlerbehandlung bei dem beiden Aufrufen gleich aufgebaut habe. Allerdings fällt mir auf, dass beim 2. „General Error Handler.vi“ am Fehlercode-Eingang ein rotes Dreieck ist. Was hat das zu bedeuten?

Dieses rote Dreieck zeigt an, dass eine Datentypenumwandlung stattfindet, in deinem Programm von U32 auf I32

Ich habe ein Bild der vi und das Projekt angehängt. Für die enthaltene DLL habe ich ein Virencheck bei Virustotal.com durchgeführt und das Protokoll als PDF beigelegt. Hier die MD5 Prüfsumme:

8133252f5978f6f4658baa4e92d6c7b0 *pei2c.dll

Vielen Dank im Vorraus.
Bernd



Hoffe das ganze hilft dir weiter!
Falls was unklar ist darfst du natürlich gerne nachfragenSmile

Gruss Marc
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.05.2011, 08:43
Beitrag #5

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Fehlerbehandlung in SubVIs
Schöne Beispiele zur professionellen Feherbehandlung findet man im Buch LabVIEW Graphical Programming Leider habe ichs verborgt, Rückgabetermin unbekannt.
Z.B. entsinne ich mich dunkel, dass Fehler bei parallelen Strukturen über Queues verwaltet wurden.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Seltsame Fehlerbehandlung in Treiber VI hansi9990 1 2.226 16.01.2016 18:23
Letzter Beitrag: GerdW
  Fehlerbehandlung funktioniert bei (GXML) SubVI nicht hansi9990 2 3.867 29.09.2015 18:50
Letzter Beitrag: hansi9990
  Komplexes Programm - Fehlerbehandlung Just-Me 4 4.659 24.11.2011 21:08
Letzter Beitrag: unicorn
  Beispiel für Fehlerbehandlung und Gliederung in SubVIs TSC 11 9.095 07.03.2009 12:12
Letzter Beitrag: Y-P
  Hilfe mit selbstgebauten Fehlern (Fehlerbehandlung) anhd 1 3.244 29.05.2006 16:35
Letzter Beitrag: A.Berndsen

Gehe zu: