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 mit Klassifizierung



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!

19.05.2009, 12:43
Beitrag #1

danielsan Offline
LVF-Grünschnabel
*


Beiträge: 39
Registriert seit: Mar 2007

2011-SP1
2006
DE

22000
Deutschland
Fehlerbehandlung mit Klassifizierung
Hallo zusammen,
ich arbeite schon einige Zeit an einem etwas größeren Projekt. Die Fehlerbehandlung habe ich bisher etwas stiefmütterlich behandelt und möchte sie jetzt effizient integrieren.

Immerhin habe ich alle Funktionen mit Fehlercases ausgerüstet, um (so dachte ich jedenfalls) später die Fehlerbehandlung ohne größeren Aufwand einführen zu können. Das Projekt ist komplett objektorientiert (LVOOP) programmiert.

Leider bin ich mit der in LV vorgesehenen Fehlerbehandlung nicht so ganz glücklich. Tritt nämlich ein Fehler auf, so wird dieser ja jetzt durch alle meine VIs durchgereicht, bis er irgendwo bearbeitet wird.

Ich würde mir aber lieber wünschen, dass nur bestimmte Fehler zu einer Ignoranz des Codes führen (z.B. bei Visa Fehler kann immer noch mit der Datenbank kommuniziert werden). Klar kann man die Fehler nach den Code-Bereichen bewerten, aber diese Bewertung müsste ich ja jetzt in jedem VI nachpflegen.

Durch die Verwendung von OOP gibt es bei mir auch nicht so eine ausgeprägte Verwendung von State-Machines. Es gibt eine für das Hauptprogramm und eine für eine untergeordnete Testroutine. Wenn ich jetzt hier mit einer Fehler Queue arbeite und die Fehler nach jedem Case behandel, werden aber immer zu viele VIs ignoriert. Diese Methode macht doch eh nur Sinn, wenn man für jedes SubVI einen eigenen Case anlegt, oder? Das geht aber mit dem OOP nicht zusammen.

Vielleicht hat ja jemand noch eine gute Idee, sonst muss ich wohl die Fehlerklassifizierung nachpflegen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.05.2009, 12:51
Beitrag #2

TSC Offline
LVF-Team
LVF-Team

Beiträge: 1.882
Registriert seit: Sep 2008

LV 2018 SP1
2008
EN

52379
Deutschland
Fehlerbehandlung mit Klassifizierung
Also ich habe ein VI "Fehlerbehandlung.vi". Das hat als eingang einen Fehle rund als Ausgang einen Fehler. Innerhalb des VIs habe ich eine Casestruktur die den ErrorCode auswertet. Bekannte Fehler haben einen eigenen Case und da entscheide ich, was ich mit den Fehlern mache. Üblicherweise wir ddie Ursache behoben, der Fehler in die Logdatei geschrieben und dann der Fehler gelöscht. Kenne ich den Fehler nicht, sprich er hat keinen Case, wird der defaultcase ausgeführt. da wird der fehler bei mir einfach weitergereicht.

Dieses VI habe ich dann auf jeden fall am ende von jedem subvi eingebunden, aber auch so schon mal an allen stellen wo ich fehler erwarte die ich behandeln kann.

LG
Torsten

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.05.2009, 13:14
Beitrag #3

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Fehlerbehandlung mit Klassifizierung
Ehrlich gesagt habe ich nicht ganz verstanden was der Unterschied zwischen "normaler" LV-Programmierung und LVOOP-Programmierung im Bezug auf Fehlerbehandlung ist.
Das mit dem Weiterreichen des Fehlers durch alle VIs ist doch ne tolle Sache. Wie sieht überhaupt deine Programmstruktur aus? Kannst du es kurz beschreiben?
So wie ich verstehe hast du mehrere Objekte (VISA, DB u.s.w.) in deinem Programm seriell geschaltet. Der Ablauf ist bei dir durch den Fehlercluster gewährleistet. Du kannst aber den Fehler von Objekt einer Klasse zum nächsten Objekt der gleichen Klasse anschliessen. Somit hast du so viele Fehlerleitungen wie Objekte. Den Datenfluss kannst du über die Daten machen, die du von einer Klasse zur anderen weiterreichst.

Passt die Antwort zu deiner Frage Oder habe ich es falsch verstanden?

Nur zum Andeuten, was ich meine, habe ich einen Screenshot gemacht. Das Programmm funktioniert noch nicht und ist noch gar nicht fertig, also bitte nicht darüber diskutieren.


Angehängte Datei(en) Thumbnail(s)
   

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.05.2009, 14:23
Beitrag #4

danielsan Offline
LVF-Grünschnabel
*


Beiträge: 39
Registriert seit: Mar 2007

2011-SP1
2006
DE

22000
Deutschland
Fehlerbehandlung mit Klassifizierung
Grober Programmaufbau:
Ich habe in dem Programm viel mit Kompositionen gearbeitet.
D.h.:
Am Anfang wird ein Objekt TestStand initiiert. In den Privatdaten dieses Objektes werden dann Prüfmodule der Klasse Module abgelegt, die je nach dem welche Module per Hardwarekennung im Prüfstand erkannt worden sind, mit gegebenen Konfigurationen (Tasks usw..) initiiert werden.

So hat man dann quasi eine ziemliche Verschachtelung an Objekten und kann eben leider nicht für jede Klasse eine eigene Fehlerleitung nutzen (obwohl ich diesen Ansatz sehr interessant finde), da ja in vielen SubVis verschiedene Objekte aufgerufen werden.

Man könnte natürlich die Fehler per Array oder Cluster zusammenfassen. Das würde aber auch wieder umfangreichere Umbauarbeiten zur Folge haben.

Objektorientiert heißt einfach, dass z.B. ein Prüfablauf nicht (nur) über eine State Maschine gesteuert wird, sondern z.b. einfach für jede zu testende Komponente eines Prüflings ein Objekt in einem Array abgelegt ist. Diese Objekte sind dann Subklassen von einer Klasse Komponente oder von spezielleren Klassen. Somit lassen sich viele Gemeinsamkeiten nutzen (z.B wenn nur ein Befehl für die serielle Ansteuerung unterschiedlich ist).

Soll einfach heißen, es gibt halt nicht so viele Cases wie bei rein funktionalen Programmen und deshalb werden evtl. Fehler nicht so oft bearbeitet, wenn man das nach jedem Case machen würde.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.05.2009, 14:04
Beitrag #5

danielsan Offline
LVF-Grünschnabel
*


Beiträge: 39
Registriert seit: Mar 2007

2011-SP1
2006
DE

22000
Deutschland
Fehlerbehandlung mit Klassifizierung
Falls jemand mal einen ähnlichen Fall hat, meine derzeitige Lösung:
Ich mehrere Fehlerklassen eingeführt, die alle Subklassen der Klasse Error sind. Diese hat als Attribute den Fehlercluster sowie Min- und Maxwerte des zugehörigen Fehlercodes.
In einer Klasse ErrorCompound ist je ein Objekt jeder Fehlerklasse als Attribut gespeichert. Somit hat man jetzt die Möglichkeit, je nach Fehlerart individuell zu reagieren.
Komplexere SubVIs, die wiederum SubVIs aufrufen, bekommen ErrorCompound als Eingang. Einfachere haben nur einen einfachen Fehlereingang, der mit der jeweiligen Fehlerklasse verbunden wird. Auftretende Fehler werden anhand des Codes klassifiziert und in der jeweiligen Klasse gespeichert. Die Abarbeitung kann dann durch die Vererbungsstruktur und überschreibende VIs individuell erfolgen.

Hört sich kompliziert an, ist aber durch Schleifen und Vererbung ziemlich einfach zu realisieren und bietet mir wesentlich mehr Flexibilität, als die Standard-Fehlerbearbeitung.

Danke nochmal für die guten Anregungen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Gehe zu: