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 

Fehler 1 bei Element in Queue einfügen



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!

18.03.2008, 10:38
Beitrag #1

s200rs Abwesend
LVF-Gelegenheitsschreiber
**


Beiträge: 75
Registriert seit: Jul 2005

7.1 / 8.5.1
2002
DE

02826
Deutschland
Fehler 1 bei Element in Queue einfügen
Hallo,

heute habe ich ein Problem mit einer Queue.

in einem Sub-VI lasse ich mir verschiedene Meldungen über eine Queue ausgeben, die vom aufrufenden VI ausgewertet werden.
Die Queue-Elemente bestehen aus einem Cluster aus einem Enum, das den Typ der Meldung klassifiziert (Meldung, Fehler, etc.) und einem String, der die Meldung enthält.

Interessanterweise funktioniert das ganze bis zur ersten Meldung einwandfrei. Alle weiteren Meldungen lösen bei "Element in Queue einfügen" den Fehler 1 "Ein Ausgabeparameter ist ungültig" aus.

Die Queue ist so initialisiert, daß die Anzahl der Elemente unbegrenzt ist. Mittlerweile verwende ich auch Timeouts beim Einfügen von Elementen und beim Entfernen aus der Queue - aber ohne Erfolg.

Kann sich jemand vorstellen, warum das nur beim allerersten Element klappt, aber danach nicht mehr?

Gruß Andreas

________________

LV 7.1; 8.5
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
18.03.2008, 13:48
Beitrag #2

s200rs Abwesend
LVF-Gelegenheitsschreiber
**


Beiträge: 75
Registriert seit: Jul 2005

7.1 / 8.5.1
2002
DE

02826
Deutschland
Fehler 1 bei Element in Queue einfügen
Hallo nochmal,

also ich hab noch bißl rumgespielt und dabei etwas festgestellt, doch zuerst noch mal was zu meinem Algorithmus:
In meinem Haupt-VI initialisiere ich die Queue über "Queue anfordern". Die daraus erhaltene Queue (bzw. ist es ja eine Referenz) übergebe ich zum einen an eine Wiederholungsschleife, welche die Meldungen ausgeben soll, und zum anderen an mein Sub-VI als Übergabeparameter. Das Sub-VI wird über eine VI-Referenz geladen und ausgeführt.

In dem aufgerufenen Sub-VI greife ich direkt auf die übergebene Variable zu.

Die Widerholungsschleife liest alle Meldungen der Queue aus und verarbeitet sie weiter, so lange das Sub-VI läuft. Anschließend wird die Queue wieder freigegeben.

Wenn ich im Sub-VI vor dem ersten Aufruf von Queue-"Element einfügen" den Queue-Status abrufe, erhaltet ich als Queue-Namen den Namen, unter dem ich im aufrufenden VI die Queue auch angefordert habe. Lese ich den Status nochmal aus, nachdem die erste Meldung ausgegeben wurde, erhalte ich einen leeren String und Fehler bei bei Queue-Status lesen.

Hingegen erhalte ich beim ersten Lesen des Queue-Status und beim Einfügen des ersten Elements keine Fehlermeldung.

Es sieht so aus, als ob beim Schreiben des ersten Elements die Referenz zur Queue verlorengeht.

Weiterhin habe ich das ganze so ausprobiert, wie es in einem der Beispiele in LV8.5 dargestellt wird: Im Sub-VI wird die Queue mit dem gleichen Namen wie im aufrufenden VI erneut angefordert, dann damit gearbeitet und wieder freigegeben. Doch auch hier erhalte ich nur das erste Element.

________________

LV 7.1; 8.5
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.03.2008, 14:22
Beitrag #3

StefanHH Offline
LVF-User
*


Beiträge: 35
Registriert seit: Aug 2006

7.0, 8.21, 8.5, 2013
2006
DE_EN

21220
Deutschland
Fehler 1 bei Element in Queue einfügen
' schrieb:...
Im Sub-VI wird die Queue mit dem gleichen Namen wie im aufrufenden VI erneut angefordert, dann damit gearbeitet und wieder freigegeben.

Hi,

es ist nur eine Vermutung, aber was meinst Du mit wieder freigegeben!? Könnte es sein, das du in deinem SubVI mit der Funktion "Release Queue" die Queue wieder freigeben willst...!? Damit würdest du sie näml. zerstören. Da gibt es nicht freizugeben, da der Zugriff niht geschützt ist. Für eine zusätzliche Synchronisation könnte man dann einen Mutex nutzen. Es reicht aus, die Queue einmal in deinem TopLevelVI zu erzeugen ("ObtainQueue") mit selbiger Funktion kannst du im SubVI die Referenz anfordern und aus der Queue lesen. Die Funktion "ReleaseQueue" führst du nur einmal bei der Deinitialisierung im TopLevelVI aus.

Gruß,
Stefan

Unter Intuition versteht man die Fähigkeit gewisser Leute,
eine Lage in Sekundenschnelle falsch zu beurteilen.
-Friedrich Dürrenmatt-
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.03.2008, 15:26
Beitrag #4

s200rs Abwesend
LVF-Gelegenheitsschreiber
**


Beiträge: 75
Registriert seit: Jul 2005

7.1 / 8.5.1
2002
DE

02826
Deutschland
Fehler 1 bei Element in Queue einfügen
Hallo Stefan,

also, so wie ich's ursprünglich (und mittlerweile wieder) mache, ist so wie Du's beschrieben hast: also die Queue im Aufrufenden VI anfordern und dort auch wieder freigeben (wie bereits beschrieben, wenn die Ausführung des Sub-VIs abgeschlossen ist).

Ich hatte nur zwischenzeitlich ausprobiert, ob es besser funktioniert, wenn ich die Queue im Sub-VI anhand des Namens erneut anfordere (so wie es in einem der LV-Beispiele gemacht wird). Aber das hat auch nicht zum Erfolg geführt und deswegen hab ich das alles wieder rausgelöscht.

Und selbst wenn ich sie am Ende des Sub-VIs freigeben würde, macht das auch nichts, da die Vorgänge da drin estwas länger dauern, so das die Meldungen über das parallel laufende aufrufende VI schon abgeholt worden sind. Nein, ich bekomme ja die Fehlermeldungen noch während das Sub-VI ausgeführt wird. Und mit jedem Abschnitt (ist 'ne Zustandsmaschine) wieder.

Das funktioniert im Prinzip so: Sub-VI gestartet -> in ersten Wiederholungschleifendurchlauf -> Queue-Status abrufen --> Ergebenis: Queue-Name stimmt, kein Fehler -> in einen Case rein, abarbeiten abhängig vom Ergebnis nächsten Case festlegen und entsprechendes Element in Queue einfügen --> Ergebnis: kein Fehler -> nächster Schleifendurchlauf: Queue-Status auslesen --> Ergebnis, Kein Name, Fehlermeldung Fehler 1 -> in vorhger gewählten Case rein, abarbeiten, Ergebnis in Queue einfügen --> Ergbenis: wieder Fehler 1 und immer so weiter bis ich einen Endstatus erreicht habe.

Also immer nachdem das erste Element übergeben wurde geht nichts mehr.

Vielleicht geh ich ja auch falsch ran, daß es mit der Queue-Referenz als Übergabe-Parameter an ein Sub-VI nicht funktioniert. Das würde mich allerdings wundern, denn auf die Art und Weise mach ich das schon seit 3 Jahren mit LV7.1 und dort hatte ich keine Probleme dieser Art.

________________

LV 7.1; 8.5
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Queuereferenz in Array einfügen - Fehler t.hipp 3 3.372 07.02.2018 17:32
Letzter Beitrag: t.hipp
  Wie auf abgearbeitete Queue warten mez15 11 7.121 28.09.2017 13:02
Letzter Beitrag: TR61
  Datum Uhrzeit Queue DeleteAll 8 4.908 24.03.2017 15:47
Letzter Beitrag: GerdW
  Fehler 1 -> Element einfügen in Queue meta_ir 14 8.519 31.01.2017 10:55
Letzter Beitrag: GerdW
  TDMS in Queue laden gifo 8 4.845 07.01.2016 16:41
Letzter Beitrag: GerdW
  Fehlercluster via Queue hansi9990 23 12.336 07.08.2015 14:11
Letzter Beitrag: hansi9990

Gehe zu: