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 

Probleme mit Queues und Programmaufbau



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!

28.10.2018, 11:36 (Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2018 11:43 von stefan1312.)
Beitrag #1

stefan1312 Offline
LVF-Grünschnabel
*


Beiträge: 29
Registriert seit: May 2015

17
-
EN


Deutschland
Probleme mit Queues und Programmaufbau
Hallo!

Ich hab ein Programm geschrieben, mit welchen ich Sollwerte aus einem Textfile ( soll etwas ähnliches werden wie ein G-Code Interpreter) lese und anschließend
in einer Queue abspeicher.

Leider hat mein Programm das Problem, dass es aufgrund eines Speicherproblems abstürtzt.
Zunächst einmal habe ich ein paar Fragen zu einer Queue:

Das Prinzip dahinter ist mir ansich klar, aber leider weiß ich nicht genau wie man mit Queues umgeht.

Werden Queues normal zuerst befüllt, bis sie anschließend gelesen werden.
-> ich habe 1000 Werte - anschließend werden diese in die Queue geschrieben- sobald alle drinnen stehen können diese ausgelesen werden oder passiert das normal gleichzeitig?
Wie definiert man genau die Größe einer Queue?... ich denke an mein Textfile - die Anzahl der Werte ist doch immer variabel.?

Hmm vl hat jemand ein paar Tipps wie man zunächst die Queue zum Beispiel mit 1000 Werten befüllt und diese anschließend über einen Button entleert - um Cluster für Cluster einem weiteren Programm zur
Verfügung zu stellen..

Leider stehe ich mit den Queues ein wenig an Blink

Eine weitere Frage hätte ich noch:

In meinem Case : "File zum Lesen öffnen" weise ich dem zweiten Shift Register am Ausgang den Wert Standard zu, kann mir jemand sagen wie man das schöner lösen kann? .. oder ist das in meinem Fall die einzige Lösung?
bzw mit den Error Codes wärs whs am sinnvollsten ganz links in der While Schleife einen Standard zu definieren und diesen über Shift Register von Iteration zu Iteration mitzuführen? ..

Wäre über Infos echt dankbar!!
Vielen Dank für eure Unterstützung.

Ich benutze Labview 2017.

LG Stefan


Angehängte Datei(en)
17.0 .vi  G_Code Interpreter mit Menue.vi (Größe: 32,34 KB / Downloads: 188)

0.0 .txt  Textfile_2_Zeilen.txt (Größe: 46 Bytes / Downloads: 240)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.10.2018, 07:57 (Dieser Beitrag wurde zuletzt bearbeitet: 29.10.2018 07:59 von GerdW.)
Beitrag #2

GerdW Online
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Probleme mit Queues und Programmaufbau
Hallo Stefan,

Zitat:sobald alle drinnen stehen können diese ausgelesen werden oder passiert das normal gleichzeitig?
Sobald der erste Wert in der Queue drin steht, kann er am anderen Ende der Queue auch wieder ausgelesen werden.
Sowas passiert üblicherweise parallel…

Zitat:Wie definiert man genau die Größe einer Queue?... ich denke an mein Textfile - die Anzahl der Werte ist doch immer variabel.?
Du kannst der Queue beim Erstellen eine Maximalgröße vorgeben - meist benötigt man dies aber nicht.
Auf einem WindowsPC kann die Queue (quasi) beliebig groß wachsen - bis der Speicher platzt…

Zitat:Hmm vl hat jemand ein paar Tipps wie man zunächst die Queue zum Beispiel mit 1000 Werten befüllt und diese anschließend über einen Button entleert - um Cluster für Cluster einem weiteren Programm zur Verfügung zu stellen..
Einfach diese 1000 Werte in die Queue schreiben.
Und danach dann deinen Consumer starten.
Tipp: Schau dir mal die Producer-Consumer-Schemata an. LabVIEW bringt da schon Beispielprojekte mit!
Momentan befüllst du die Queue (so schnell es nur geht), bis du den STOPP-Button klickst. Und liest langsamer aus, da du noch die Bildschirmausgabe im Consumer drin hast…

Zitat:In meinem Case : "File zum Lesen öffnen" weise ich dem zweiten Shift Register am Ausgang den Wert Standard zu, kann mir jemand sagen wie man das schöner lösen kann? .. oder ist das in meinem Fall die einzige Lösung?
1. Deine States sollten mit einem (typdefinierten) Enum adressiert werden. Strings sind einerseits variabler, aber auch fehleranfälliger.
2. Wichtige Shiftregister NIE auf "default if unwired" setzen, sondern immer durchverdrahten! (Tipp: man kann Tunnel auch verknüpfen, dann übernimmt LabVIEW einen Großteil der Verdrahtungsarbeit!)
3. Cluster (wie deinen G-Code-Platzhalter) immer typdefinieren - und die Elemente mit sinnvollen Labels versehen. Dann (Un)BundleByName verwenden!

Zitat:bzw mit den Error Codes wärs whs am sinnvollsten ganz links in der While Schleife einen Standard zu definieren und diesen über Shift Register von Iteration zu Iteration mitzuführen? ..
??? Weiß nicht, was du da meinst… Hmm

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.10.2018, 22:45
Beitrag #3

stefan1312 Offline
LVF-Grünschnabel
*


Beiträge: 29
Registriert seit: May 2015

17
-
EN


Deutschland
RE: Probleme mit Queues und Programmaufbau
ok! Vielen Dank schon einmal für die Antwort!

Aber eine Frage hätte ich noch zu Queues:

Gibt es die Möglichkeit pro Schleifendurchlauf immer nur ein Element ( ein Cluster ) aus der Queue auszulesen?
Habe mir die Beispiele bereits durchgesehen aber hierfür leider nichts passendes gefunden..

LG Stefan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.10.2018, 07:40
Beitrag #4

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Probleme mit Queues und Programmaufbau
(29.10.2018 22:45 )stefan1312 schrieb:  Aber eine Frage hätte ich noch zu Queues:

Gibt es die Möglichkeit pro Schleifendurchlauf immer nur ein Element ( ein Cluster ) aus der Queue auszulesen?
Nur, wenn du du als Datentyp deiner Queue den Cluster und nicht ein "Array of Cluster" definierst.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.10.2018, 16:15
Beitrag #5

NoWay Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 241
Registriert seit: Jul 2013

LV-2019
2013
EN


Deutschland
RE: Probleme mit Queues und Programmaufbau
(30.10.2018 07:40 )jg schrieb:  
(29.10.2018 22:45 )stefan1312 schrieb:  Aber eine Frage hätte ich noch zu Queues:

Gibt es die Möglichkeit pro Schleifendurchlauf immer nur ein Element ( ein Cluster ) aus der Queue auszulesen?
Nur, wenn du du als Datentyp deiner Queue den Cluster und nicht ein "Array of Cluster" definierst.

Gruß, Jens

Dequeue Element holt ein Element aus der Queue. Ist das ein Array und du benötigst z.B. nur dessen ersten Wert, könntest du dies rausholen, indizieren/splitten und den Rest des Arrays, falls benötigt, wieder zurückschreiben (enqueue Element).

Zum Thema paralleles Handling von Queues:
Grundsätzlich hat das Dequeue Element einen Timeout Anschluss. Das VI wartet die angehängten Zeit ab, ehe es im Datenfluss weitergeht (vorrausgesetzt es befinden sich keine Elemente in der Queue). Hier ist natürlich Vorsicht geboten. Kein Wert (Standard ist 0) an diesem Anschluss lässt die Queue unendlich lange auf Werte warten. Kommt also nichts mehr, wird dein VI hier stehen bleiben und du hast keine Chance mehr dein VI zu beenden. Hängst du aber eine Zeit an, musst du mindestens prüfen, ob ein Timeout erfolgte oder nicht. Im Falle eines Timeouts spuckt dir der Dequeue Baustein sonst den Standardwert von Obtain Queue aus und das ist eventuell nicht zielführend Blink

Kleine Anmerkung, falls ich hier mit meinem Kommentar am Thema vorbeischieße: Ich konnte dein VI aktuell nicht öffnen, da mir derzeit nur Version 16 zur Verfügung steht. Möglicherweise hast du das also schon auf dem Schirm bzw. berücksichtigt, stefan1312.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.10.2018, 17:00
Beitrag #6

GerdW Online
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Probleme mit Queues und Programmaufbau
Ergänzung: beim timeout ist der Standardwert -1...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.10.2018, 17:08
Beitrag #7

NoWay Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 241
Registriert seit: Jul 2013

LV-2019
2013
EN


Deutschland
RE: Probleme mit Queues und Programmaufbau
(30.10.2018 17:00 )GerdW schrieb:  Ergänzung: beim timeout ist der Standardwert -1...

Ja stimmt. Entschuldigt bitte die Fehlinformation meinerseits. Ich war der felsenfesten Ansicht, dass eine 0 das gleiche Verhalten erzeugt. Das ist aber defacto nicht so, wie ich grad im Selbstversuch nochmal getestet habe.
Danke für den Hinweis!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Drei Queues in einer While-Schleife mit case-Struktur EinVolvic 12 13.159 17.05.2017 20:25
Letzter Beitrag: EinVolvic
  Speicher voll / Programmaufbau yapete 2 4.492 13.12.2016 16:21
Letzter Beitrag: jg
  2D Arrays per Queues abfragen Jan S. 3 3.981 16.01.2016 08:56
Letzter Beitrag: Lucki
  Frage zu Message Queues, Queue Cluster mehrfach aufschlüsseln dali4u 8 8.053 11.12.2014 09:07
Letzter Beitrag: Lucki
  Nachrichten-Queues, Exit wird nicht an andere Schleifen weitergereicht dali4u 4 6.168 28.10.2014 11:48
Letzter Beitrag: jg
  Synchronisation mit Queues Masterg4941 9 8.139 25.09.2013 12:24
Letzter Beitrag: GerdW

Gehe zu: