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!
Da mittlerweile mein Wissen langsam besser wird, habe ich beschlossen mich um die Fehlererkennung zu kümmern. Dies habe ich bisher vernachlässigt.
Eine Idee die ich gefunden habe, ist das registrieren von Fehlern als Event.
Im angehängten Beispiel ist eine Visa ressource (abgerufen im state ini) nicht angeschlossen. Ich hätte vermutet, dass ein Event auslöst.
Tut es aber nicht. Er bleibt im Ini hängen.
Wenn das wieder Think data flow ist, tut es mir leid. Ich tue mich sehr schwer damit und verstehe es hier nicht.
Ziel war es hier anhand des Fehlercodes irgedwann einen state/aktion auszulösen
ich kürze das nicht mit "Think Dataflow" ab. Da ich mir die Frage stelle, was du denn meinen könntest, was in dem Case "INI" mit dem Fehler passiert, führt mich zu etwas ganz Grundsätzlichem:
Was macht ein VI oder eine Funktion, wenn am Eingang ein Fehler in Form eines Error Clusters anliegt? Antwort: Es macht einfach nichts.
Was also tut "Send Notification"? Antwort: Es macht nichts.
Fazit: Du musst irgend etwas tun, damit im Fehlerfall auch irgend etwas passieren kann.
Etwas konkreter: Hänge z.B. den Error Handler einfach hinten an "VISA Open" ran und sende anschließend "EXIT" mittels "Send Notification". So bekommt der Benutzer eine Fehlermeldung und anschließend wird das Programm beendet. Die Leitung des Error Cluster zwischen "VISA Open" und "Send Notification" musst du natürlich weglassen.
Martin Henz
21.12.2020, 10:20 (Dieser Beitrag wurde zuletzt bearbeitet: 21.12.2020 10:27 von th13.)
Du musst den VISA-Fehler auch behandeln, d.h. prüfen, ob am Fehlerausgang ein Fehler auftritt. Im einfachsten Fall so:
Du kannst auch den Errorcode auswerten und je nachdem verschiedene Meldungen ausgeben.
Ein Tipp noch bzgl. Fehlerhandling: man sollte immer den Originalfehler (hier der VISA-Fehler) anzeigen oder zumindest loggen, das erleichtert das Finden von Fehlerursachen deutlich.
21.12.2020, 11:56 (Dieser Beitrag wurde zuletzt bearbeitet: 21.12.2020 12:00 von Freddy.)
Dein Event muss aber schon irgendwie durch den "Error (Ausgang)" gestartet werden. Durch den "Error (Eingang) kein Fehler" wird Auf keinen Fall ein Fehler gemeldet. es sei den die Benutzerereignisse währen falsch. Den Eintrag im Event ändern.
Die INI Fehlerleitung würde ich nicht ändern, da eine Initialisierung ohne VISA nicht funktioniert.
ich hatte es zu Anfang so ähnlich versucht.
Nur das funktionierte auch nicht. Daher klang die Idee mit dem Event interessant.
Aktuell (in der Verständnisphase) reicht es mir, wenn das Programm in exit springt und sich beendet.
Das tut es aber nicht. Im Anhang ist ein Bild was mit dieser Variante geschieht.
Das exit wird ausgelöst. Aber das Programm insgesamt beendet sich nicht. Statt dessen kommt die besagte Fehlermeldung.
Gruß
Steffen
21.12.2020, 12:15 (Dieser Beitrag wurde zuletzt bearbeitet: 21.12.2020 12:18 von Martin.Henz.)
lass die Verbindung des Error Clusters zu "Send Notofication" im Fehlerfall weg (sonst wird da nichts gesendet).
Und irgendwie ist es vermutlich sinnvoll, dem Anwender mitzuteilen, welcher Fehler aufgetreten ist. Um bei deinem
Ansatz zu bleiben, irgendwie so:
Hm..Danke für die Bemühungen.
Ich habe mal die Error-Verbindung zum Notifier getrennt.
Jedoch ändert das nichts. Er sendet den state nicht ab. Es kommt ziemlich genau dieselbe Fehlermeldung.
Gruß
Steffen
21.12.2020, 13:56 (Dieser Beitrag wurde zuletzt bearbeitet: 21.12.2020 14:12 von Martin.Henz.)
du machst bei EXIT auch nichts außer, dass zwei von den drei While-Schleifen beendet wird. :-)
Momentan zumindest sollte es doch im Fehlerfall so sein, dass beim Start des Programms festgestellt wird, dass das Gerät nicht vorhanden ist, der Benutzer eine Fehlermeldung bekommt. Anchließend wird das Programm wieder beendet. Du musst dann auch dafür sorgen, dass nach EXIT dein Programm auch tatsächlich vollständig beendet wird.
Doch dataflow...(unabhängig von der Meldung)
In meinem Universum schickte ich die Meldung raus und die ging in das event rein und sollte dann die trues zum Beenden verteilen.
Dem scheint aber nicht so zu sein, so dass ich nur die while Schleife mit den states beende.
Aber war dann mein Ansatz vom Wochenende nicht besser, einen Fehlerfall als event zu triggern? Dann würde ich alles beenden.
Nur warum funktionierte diese Variante nicht?