LabVIEWForum.de
sporadisches Fehlverhalten von Variant-Elementen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenkommunikation (/Forum-Datenkommunikation)
+---- Thema: sporadisches Fehlverhalten von Variant-Elementen (/Thread-sporadisches-Fehlverhalten-von-Variant-Elementen)

Seiten: 1 2


sporadisches Fehlverhalten von Variant-Elementen - Odie - 31.01.2017 08:56

Hallo zusammen,

ich hänge seit einiger Zeit an einem Problem mit dem Variant-Datentyp und mir gehen langsam die Ideen aus.
Eigentlich ist es eine simple Aufgabe: Ich habe ein Sub-VI in das ich ca. 10 verschiedene Datentypen (Strings, Cluster, Arrays) übergeben muss.
Dazu habe ich einen Eingang als Variant erzeugt, an den ich die verschiedenen Datentypen anschließen kann. Ich habe mir die verschiedenen Datentypen durchnummeriert, damit ich diese dann im Sub-VI in den entsprechenden Datentyp zurückwandeln kann. Das funktioniert auch soweit richtig.

Jetzt das Problem:
Von Zeit zu Zeit kommt es vor, dass das Variant-Eingangselement im SubVI nicht die Daten übernimmt, mit denen es gerade gestartet wurde. Es werden dann die Daten vom vorherigen Aufruf (ca. 5 Sekunden vorher) an das SubVI übergeben. Ca. 1 von 500 Aufrufen des SubVIs schlägt fehl mit diesem Verhalten und mein Programm bricht ab, da logischerweise die Datentypen nicht zusammenpassen. Soweit ich es überblicken konnte, sind die anderen Eingangselemente nicht betroffen, nur das Variant-Element. Das SubVI wird niemals parallel aufgerufen sondern immer hintereinander. Der Fehler hat sich verschlimmert, seit wir von Labview 8.2 auf Labview2015 umgestiegen sind. Mit 8.2 kam der Fehler vielleicht zweimal pro Woche vor, was noch akzeptabel war. Mit Labview2015 kommt der Fehler aber mehrmals täglich.

Hat irgendjemand eine Idee an was das liegen könnte?
Anbei noch ein Screenshoot von den Aufrufen des SubVIs und der internen Umwandlung.
[attachment=57260]

Viele Grüße

Dieter


RE: sporadisches Fehlverhalten von Variant-Elementen - GerdW - 31.01.2017 09:21

Hallo Dieter,

Zitat:Ich habe mir die verschiedenen Datentypen durchnummeriert, damit ich diese dann im Sub-VI in den entsprechenden Datentyp zurückwandeln kann. Das funktioniert auch soweit richtig.
Wo/Wie erfährt dein subVI, welchen Datentyp es da gerade bekommt?

Zitat:mein Programm bricht ab, da logischerweise die Datentypen nicht zusammenpassen.
Das hört sich nach einem nicht besonders gut programmierten Errorhandling an… Big Grin


RE: sporadisches Fehlverhalten von Variant-Elementen - Odie - 31.01.2017 09:40

Hallo Gerd,

das SubVI verwende ich in einem Sequenzer, bei dem ich über eine INI-Datei die Sequenzen zum Programmstart lade. Durch die INI ist damit definiert, in welcher Reihenfolge welcher Datentyp der Reihe nach kommt. Das wird dem SubVI unter anderem über den oberen linken Anschluß (Cluster) übergeben.
D.h. es gibt während des Programmlaufs keine Änderungen am Sequenzablauf. Es funktioniert ja auch 10, 20, 50, 100 Mal und dann kommt auf einmal der Fehler.

Das Errorhandling ist nicht das Problem. Die übergebenen Daten sind einfach verloren, d.h. der User muss zwingend das Programm neu starten, damit die Daten korrekt übergeben werden. Das ist halt ärgerlich. Den Fehler hab ich schon abgefangen, jedoch kann man nicht den Neustart vermeiden, um den Fehler zu korrigieren.

Viele Grüße

Dieter


RE: sporadisches Fehlverhalten von Variant-Elementen - jg - 31.01.2017 09:50

Was sagt denn der NI-Support dazu?

Gruß, Jens


RE: sporadisches Fehlverhalten von Variant-Elementen - GerdW - 31.01.2017 09:57

Hallo Dieter,

bei manchen "komischen" Datenproblemen hat sich das Einstreuen der AlwaysCopy-Funktion als hilfreich gezeigt.
Kannst du das mal ausprobieren?


RE: sporadisches Fehlverhalten von Variant-Elementen - Odie - 31.01.2017 10:01

Hallo Jens,

den NI Support werde ich dann wohl bemühen müssen.
Ich dachte ich versuch es zuerst mal hier. Mit euch hab ich bessere Erfahrungen gemacht Top1, als mit dem NI Support.

Gruß

Dieter
Hallo Gerd,

danke für deine Idee. Werde ich gleich in das Programm mit aufnehmen.
Ich werde das Element mal vor jeden Aufruf des SubVIs setzen und den Variant da durchführen.

Erste Ergebnisse erwarte ich in 2 - 3 Tagen.

Bis dahin

Dieter


RE: sporadisches Fehlverhalten von Variant-Elementen - GerdW - 31.01.2017 10:32

Hallo Dieter,

Zitat:Ich werde das Element mal vor jeden Aufruf des SubVIs setzen und den Variant da durchführen.
Ich würde das AlwaysCopy eher vor dem ToVariant und evtl. auch nochmal nach dem ToVariant platzieren…


RE: sporadisches Fehlverhalten von Variant-Elementen - jg - 31.01.2017 11:16

(31.01.2017 10:01 )Odie schrieb:  Hallo Jens,

den NI Support werde ich dann wohl bemühen müssen.
Ich dachte ich versuch es zuerst mal hier. Mit euch hab ich bessere Erfahrungen gemacht Top1, als mit dem NI Support.

Gruß

Dieter

Danke für die Blumen. Aber so wie du es beschreibst liegt da eher ein Problem bei LabVIEW vor, und das muss an den NI Support!

Gruß, Jens


RE: sporadisches Fehlverhalten von Variant-Elementen - Odie - 28.03.2017 07:07

Hallo zusammen,

nach langer Suche zusammen mit NI haben wir die Ursache für das merkwürdige Verhalten gefunden.
Das alles hat nichts mit den Variant-Elementen zu tun.

Das Main-VI starte ich dynamisch und verwende die "Elementwert festlegen" Methode, um während des Programmablaufs das Verhalten zu beeinflussen.
Dazu setze ich zwei Elementwerte hintereinander mit einem neuen Wert. Mein Programm ist so ausgelegt, dass bei der Wertänderung des zweiten Elements der Ablauf gestartet wird.

Laut NI kann es aber möglich sein, dass das zweite Element seinen Wert vor dem ersten Element ändert, obwohl zuerst das erste und dann dann das zweite Element gesetzt wird.
Die Lösung ist denkbar einfach: Nach dem Setzen des ersten Elements lese ich das Element solange aus, bis der Wert mit dem gesetzten übereinstimmt und erst dann setze ich das zweite Element.

[attachment=57561]

Viele Grüße

Dieter


RE: sporadisches Fehlverhalten von Variant-Elementen - GerdW - 28.03.2017 07:17

Hallo Odie,

danke für die Rückmeldung!

Zitat:Das Main-VI starte ich dynamisch und verwende die "Elementwert festlegen" Methode, um während des Programmablaufs das Verhalten zu beeinflussen.
Dazu setze ich zwei Elementwerte hintereinander mit einem neuen Wert. Mein Programm ist so ausgelegt, dass bei der Wertänderung des zweiten Elements der Ablauf gestartet wird.
Und warum nimmst du dann keine UserEvents oder eine Queue, mit der du Kommandos an dein VI schickst?