LabVIEWForum.de
Fehlercluster via Queue - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Fehlercluster via Queue (/Thread-Fehlercluster-via-Queue)

Seiten: 1 2 3


Fehlercluster via Queue - hansi9990 - 01.08.2015 10:40

Hallo

Ich habe hier ein Kostrukt aus zwei For-Schleifen, in der einen Schleife werden daten über den IEEE Bus von Messgeräten gelesen und die zweite Schleife ist für Anzeige, Messwererfassung und andere Dinge zuständig, die Messaten übertrage ich mit eine Queue von eine in die andere Schleife.
Ich möchte den Fehlercluter des Messgerätes bei einem Probelm als Hilfestellung für die Fehlerbehebung anzeigen lassen.
Ist es möglich entweder über die gleich Queue oder über zwei Queues einen Fehlercluster mit zu übertragen?
Wenn ja, hat jemand ein Bsp. oder einen Link in dem das beschrieben wird?

Danke
Hans


RE: Fehlercluster via Queue - hansi9990 - 01.08.2015 16:58

Ok ich habe es mir gearde selbst beantwortet (etwas herumprobieren hilft auch das Wissen zu erweitern Wink

So wie im Bild sollte es funktionieren.


RE: Fehlercluster via Queue - Lucki - 01.08.2015 22:01

Herumprobieren ist gut, aber genau so wichtig ist auch das eifrige Studium der mitgelieferten Beispiele.
Empfehlen würde ich hier:
LV-Eröffnungsbildschirm --> Projekt erstellen --> Handler für Nachrichtenqueues
Da ist auch Fehlerbehandlung mit dabei. (Es kann allerdings sein, daß das Beispiel brandneu ist und in LV2013 noch nicht dabei war. Sollte das so sein, könnte ich es Dir heruntercompilieren)

Gruß Ludwig


RE: Fehlercluster via Queue - hansi9990 - 04.08.2015 23:06

Hallo Ludwig

Danke für das Angebot.
Mir ging es nicht um die Fehlerbehandlung des Clusters ansich sondern darum einen Fehlercluster zwischen zwei Schleifen zu übertragen. In dem von dir genannten Beispiel konnte ich dazu nichts finden.
Ich hatte das benötigt da in meinem Programm in der einen Schleife die die Messungen und somit auch die Steuereung der Messgeräte (VISA) läuft und in der zweiten Schleife die Anzeige der Messdaten, Protokollerstellung...
Wenn jetzt ein Problem an dem Messgerät auftritt konnte man das erst erkennen wenn man die Schleifen verlassen hat, ich wollte das amn zur Laufzeit sieht was da passiert ist.


RE: Fehlercluster via Queue - Lucki - 05.08.2015 07:59

Es geht doch darum, wie man Daten unterschiedlichen Formats in einer Queue überträgt. Du hast jetzt die beiden Formate "Fehlercluster" und "DBL" in einen Cluster gesteckt, in dem Du das alles per Queue übertragen kannst.
Universeller ist etwas anderes:
Die Queue enthält einen Cluster. Das eine Element beschreibt die Botschaft. Das kann Text sein oder ein Enum. Bei Dir hießen die möglichen Textelemente "Messdaten" und "Fehler".
Das zweite Clusterelement ist ein Variant, mit dem sich jedes Datenformat übertragen läßt.
Deine Lösung ist im Moment zwar einfacher, aber sie stößt schnell an ihre Grenzen, wenn mehr als nur diese beiden Botschaftstypen übertragen werden sollen.


RE: Fehlercluster via Queue - hansi9990 - 06.08.2015 22:27

Danke für den Tip.
Naja ich hoffe das sich das künftig kaum ändern wird aber ich habe es mir dennoch mal angesehen. Da ich bisher mit Varianten noch nichts gemacht habe, habe ich mich mal nach einem Beispiel umgesehen und bin dabei auf diesen Beitrag gestossen Using Variants to Pass Multiple Data Types Through a Single Queue.
Auf dieser Basis habe ich mal etwas gespielt und mir einen Versuchsaufbau erstellt (siehe Anhang).
Wie ich Daten auf ein Variant bekomme habe ich schon verstanden aber mit der extraktion daraus habe ich noch meine Probleme.
Ich verstehe nicht wie ich die Daten dann richtig aus der Casestruktur und der For-Schleife bekommen soll, in meinem Beispiel funktioniert das zwar mit den Messdaten aber wenn ich den Fehlercluster herausführe geht der nicht. Dennoch kann ich mir auch nicht vorstellen das ich die Messdaten richtig herausgeführt habe denn bei einer Casestruktur muss ja auch der Ausgang "Messwerrt" im Case "Fehler" belegt sein, das habe ich zwar mit "Standard verwenden, wenn nicht verbunden" gelöst aber das kommt mir irgendwie falsch vor.
Hat jemand einen Tip oder Bsp. wie man das korrekt hin bekommt?


RE: Fehlercluster via Queue - GerdW - 07.08.2015 07:33

Hallo Hansi,

das Beispiel, was du da rausgesucht hast, ist doch prima.
Warum hast du es dann nicht exakt so, wie es präsentiert wurde, nachprogrammiert?

Du bist in deinem VI noch einen Schritt weiter gegangen und hast die Variant-Attribute verwendet. Auch die kann man gut verwenden, um Daten zu verwalten!

Zitat:Dennoch kann ich mir auch nicht vorstellen das ich die Messdaten richtig herausgeführt habe denn bei einer Casestruktur muss ja auch der Ausgang "Messwerrt" im Case "Fehler" belegt sein, das habe ich zwar mit "Standard verwenden, wenn nicht verbunden" gelöst aber das kommt mir irgendwie falsch vor.
Das mit dem "falsch" hast du richtig empfunden… Smile
Momentan würdest du bei deinen Messdaten immer einen Dummywert bekommen. Und noch schlimmer: da der Outputtunnel der FOR-Loop auf nicht-indizierend gesetzt wurde, kann es sein, dass du überhaupt keinen Messwert aus der Loop bekommst!

Reicht es aus, wenn ich die auf den Gebrauch von Schieberegistern in Loops hinweise?
Oder dank LV2014 auf den Gebrauch von bedingten Ausgangstunneln?


RE: Fehlercluster via Queue - hansi9990 - 07.08.2015 08:49

Ich habe es nicht exakt nachprogrammiert weil ich den falschen Link eingestellt hatte, eigendlich hatte ich dieses Beispiel gemeint Using Multiple Data Types within a Queue Wink. Im vorherigen Beispiel muss ja mit dem Element "Data Type" manuel ausgewählt werden, ich möchte aber alle Datentypen ohne Schalter in die zweite Schleife bekommen.
Dann werden auch noch die nicht gewählten Datentypen auf einen leeren Wert gesetzt (ok, das bekäme man auch mit dem Schieberegister hin)
Zudem hatte ich Lucki so verstanden das ich weg vom Cluster und direkt einen Variant in der Queue übertragen soll um flexibel zu bleiben, im vorherigen Beispiel werden die Daten in ein Variant und über einen Cluster in eine Queue gepackt.
Tja, der Tip mit dem Schieberegister ist dann Goldrichtig, das ich nicht immer selbst auf sowas komme Wink Zu meiner Verteidigung, ich Arbeite erst seit einem halben Jahr mit LV und hatte vorher kaum Programmierkenntnisse. Wink

So wie im Anhang funktioniert es jetzt oder kann es noch zu Probleme kommen die ich nicht bedacht habe?

PS: So ganz vertehe ich den Vorteil oder die Flexibilität von Varianten aber trotzdem nicht, wenn ich mal die Datentypen in der Queue erweitern will muss ich die Lösung mit dem Variant genauso, umprogrammieren wie meinen ersten Versuch im zweiten Beitrag.


RE: Fehlercluster via Queue - GerdW - 07.08.2015 08:59

Hallo Hansi,

- Schieberegister sollte man auch initialisieren…
- du hast den Case "Fehler" als Standard gesetzt. Was passiert, wenn beim Receiver plötzlich ein Attribut "xyz" mit unbekannten Daten ankommt?
- Das "Variant nach Daten" hat ErrorIO-Anschlüsse: die sollte man immer nutzen, wenn nicht 100% sicher ist, welcher Datentyp im Variant steckt!

Zitat:Im vorherigen Beispiel muss ja mit dem Element "Data Type" manuel ausgewählt werden, ich möchte aber alle Datentypen ohne Schalter in die zweite Schleife bekommen.
Du musst in beiden Varianten beim Emfänger wissen, welcher Datentyp im Variant (oder im Attribut) steckt. Im ersten Fall schickst du die entsprechende Information als Enum oder String-Parameter im Cluster mit, in deiner Variante packst du diese Information in den Namen des Attributs!

Die erste Variante ist also mit deiner quasi gleichwertig und dazu noch universeller/einfacher einsetzbar, da die Dateninformation in einem Variant (und nicht im Attribut) steckt. Wenn statt des Strings ein typdefiniertes Enum als Befehlsparameter verwendet wird, ist auch beim Receiver immer jeder mögliche Datentyp bekannt…

Zitat:Zudem hatte ich Lucki so verstanden das ich weg vom Cluster
Nein, Ludwig hat dir genau das vorgeschlagen, was du vorhin als erstes Beispiel verlinkt hattest: Ein Cluster aus Befehl und Daten…


RE: Fehlercluster via Queue - hansi9990 - 07.08.2015 09:33

Ich vetsehe aber trotzdem nicht wie ich ohne das Ereignisscase die Daten quasi als Multiplex nach unten bekomme da sich dieses Beispiel hier Using Variants to Pass Multiple Data Types Through a Single Queue ja darauf bezieht alles von Hand zu machen. Meine Daten (Messung und Fehler) kommen von einem VISA Treiber und werden nicht über ein Ereigniss am Frontpanel ausgelöst.