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 

Zu SCHNELLES Auslesen einer Queue-Funktion ???



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!

03.03.2011, 17:08 (Dieser Beitrag wurde zuletzt bearbeitet: 03.03.2011 17:09 von GerdW.)
Beitrag #11

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
Hallo Sternhagel,

wenn eine Funktion einen Wert zurückgibt ("returns"), dann immer zum Aufrufenden und nie zur Daten-Quelle!

Du rufst eine Funktion auf und sie gibt dir einen Wert zurück. Wenn du eine Addition aufrufst, willst doch du das Ergenis haben und nicht einer der Summanden...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
03.03.2011, 17:14 (Dieser Beitrag wurde zuletzt bearbeitet: 03.03.2011 17:27 von Sternhagel.)
Beitrag #12

Sternhagel Offline
LVF-Grünschnabel
*


Beiträge: 27
Registriert seit: Feb 2011

10
2010
EN


Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
Ich habe meine Lösung so gewählt, weil ich in der Auswerteschleife unter umständen einfach nicht warten will bis ein neuer Wert in der Queue ankommt.

Ich sollte dazu sagen, dass die Werte Positionsangaben sind. Und die Position ändert sich von einem Wert zu anderen nicht so dramatisch als das ich nicht auch den davor ausgelesenen Wert benutzen könnte, wenn gerade kein ganz aktueller da ist.

Mit meiner Lösung bin ich damit nicht von der Ausführgeschwindigkeit der sendenden Schleife abhängig, was mir bei zwei voneinander total unabhängiger While-Schleifen wichtig ist.

Aber ich verstehe natürlich euere Argumente. So ganz steht mein Program auch noch gar nicht, und je nachdem werde ich zum Schluss dann eher eure oder eher meine Lösung auswählen :-)
(03.03.2011 17:08 )GerdW schrieb:  wenn eine Funktion einen Wert zurückgibt ("returns"), dann immer zum Aufrufenden und nie zur Daten-Quelle!

Du rufst eine Funktion auf und sie gibt dir einen Wert zurück. Wenn du eine Addition aufrufst, willst doch du das Ergenis haben und nicht einer der Summanden...

Wie kann mir den die Funktion etwas an mich ZURÜCKGEBEN, dass ich noch niemals hatte ;-)
Sie kann mir von mir aus etwas ÜBERGEBEN aber nicht ZURÜCK-geben!

Ich will damit nicht sagen, dass du unrecht hast, aber das hier ist einer dieser typischen Fälle, in denen die fachspezifische Nomenklatur nicht der "üblicherweise verwendeten Ausdrucksweise" entspricht... darum auch meine Fehlübersetzung! :-)

Ich hatte im Studium ja auch mal programmieren auf dem Stundenplan... wahrscheinlich hätte ich das damals auch anders "übersetzt" :-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.03.2011, 19:30
Beitrag #13

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
(03.03.2011 17:14 )Sternhagel schrieb:  Ich habe meine Lösung so gewählt, weil ich in der Auswerteschleife unter umständen einfach nicht warten will bis ein neuer Wert in der Queue ankommt.

Ich sollte dazu sagen, dass die Werte Positionsangaben sind. Und die Position ändert sich von einem Wert zu anderen nicht so dramatisch als das ich nicht auch den davor ausgelesenen Wert benutzen könnte, wenn gerade kein ganz aktueller da ist.

Mit meiner Lösung bin ich damit nicht von der Ausführgeschwindigkeit der sendenden Schleife abhängig, was mir bei zwei voneinander total unabhängiger While-Schleifen wichtig ist.

Aber ich verstehe natürlich euere Argumente. So ganz steht mein Program auch noch gar nicht, und je nachdem werde ich zum Schluss dann eher eure oder eher meine Lösung auswählen :-)
Ähm ja, aber in deinen Screenshots in Beitrag #7 hast du parallel zum Dequeue ein Wait von 20 ms programmiert.
Was ist jetzt, wenn du mit 10 ms Werte in die Queue schreibst? Dann kommst du gar nicht mehr mit, und irgendwann läuft dir der Speicher über!
Besser: Am Eingang von Dequeue eine 20 anschließen. Dann passiert nämlich folgendes: Ist die Queue nicht leer, bekommst du sofort einen Wert zurückgegeben, und wenn sie gerade leer ist, dann wird max. 20 ms gewartet, danach wird die Funktion mit einem Timeout beendet.

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
03.03.2011, 20:50
Beitrag #14

Sternhagel Offline
LVF-Grünschnabel
*


Beiträge: 27
Registriert seit: Feb 2011

10
2010
EN


Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
Hmmm... also die Auswerteschleife soll unabhängig von der Ausleseschleife laufen. Darum habe ich diese 20ms programmiert, um unterschiedlich schnelle Auswertevorgänge zu simulieren.

Das Problem ist, wenn ich es so mache wie du vorschlägst, dass, wenn das eingestellte Timeout irgendwann den Auslesevorgang abbricht, die Dequeue-Funktion mir doch eine Null liefert oder? Und mit der Null kann ich eben in der darauf folgenden Auswertung nix anfangen... darum wollte ich dann wenigstens den alten Wert haben.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.03.2011, 21:16
Beitrag #15

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
Natürlich sollst du im Timed-Out Fall wieder die Fallunterscheidung machen, also entweder gar keinen neuen Wert oder den letzten.

Aber in deinem Bsp kann es bei zu schnellem Schreiben in die Queue passieren, dass du gar nicht mehr mit dem Auslesen nach kommst, zwecks dem festen Takt von 20 ms.

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
03.03.2011, 22:47
Beitrag #16

Sternhagel Offline
LVF-Grünschnabel
*


Beiträge: 27
Registriert seit: Feb 2011

10
2010
EN


Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
Bin nicht sicher, ob ich dich verstanden habe :-)

Also ich muss auch nicht jeden einzelnen Wert unbedingt auslesen. Nur immer jeweils den aktuellsten sobald meine Auswerteschleife "fertig ausgewertet" hat.

Wenn der Auswerteprozess nun sehr lange dauert, dann ist klar, dass ich nicht jeden einzelnen Wert der Ausleseschleife auch tatsächlich auslese... aber das ist auch nicht weiter schlimm!

Die Queue wird im übrigen auf maximal einen Wert begrenzt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.03.2011, 22:50 (Dieser Beitrag wurde zuletzt bearbeitet: 03.03.2011 22:55 von GerdW.)
Beitrag #17

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
Hallo Sternhagel,

Zitat:Also ich muss auch nicht jeden einzelnen Wert unbedingt auslesen. Nur immer jeweils den aktuellsten sobald meine Auswerteschleife "fertig ausgewertet" hat.
Dann nimm entweder Notifier und eine Queue mit einer Länge von 1 Element zusammen mit LossyEnqueue...
(Das bisher gesagte zur Nutzung von TimeOut und Auswertung des TimedOut?-Ausgangs bleibt aber weiterhin gültig!)

Zitat:Wie kann mir den die Funktion etwas an mich ZURÜCKGEBEN, dass ich noch niemals hatte ;-)
Ich weiß ja nicht, wo und wann du das erste mal was zu "Programmierung" gehört hast, aber das "Funktionen" "Rückgabewerte" liefern, hatte ich schon vor längerer Zeit mitgeteilt bekommen... Manche Programmiersprachen unterscheiden zwischen Funktionen und Prozeduren: die einen liefern Rückgabewerte, die anderen nicht.

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.03.2011, 16:42
Beitrag #18

Kiesch Offline
LVF-Stammgast
***


Beiträge: 412
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
Wenn du im Prinzip alle Funktionen die eine Queue hat nicht nutzen möchtest (kein Timeout, dadurch kein sofortiges Auslesen wenn ein Wert hereinkommt; es nicht wichtig ist das jedes Element ausgelesen wird bei der Auswertung etc.), dann würde für deine Anwendung doch eigentlich eine Lokale Variable viel mehr Sinn machen in die du in der Ausleseschleife schreibst und in der Auswerteschleife aus diese ausliest.

Dir sind die entstehenden Racing conditions ja eh schnurz, da du weder jeden Wert lesen musst (zwingend), noch für dich unbedingt wichtig ist nur bei Wertänderungen (ergo auch wenn der gleiche Wert nochmal neu eingelesen würde) explizit zu erkennen das der geändert wurde. Eine Queue ist da doch nur unnötiger Aufwand....

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.03.2011, 21:57
Beitrag #19

Sternhagel Offline
LVF-Grünschnabel
*


Beiträge: 27
Registriert seit: Feb 2011

10
2010
EN


Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
Hmmm.... ja mit einer lokalen Variablen könnte ich es auch versuchen :-)

Besteht dadurch aber nicht die Gefahr, dass sich duch die Verwendung einer lokalen Variablen die Ausführung meines Program verlangsamt?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2011, 11:17
Beitrag #20

Kiesch Offline
LVF-Stammgast
***


Beiträge: 412
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
Da würde ich auf diesen Post verweisen. Da ist mal (eventuell nicht representativ aber als obere Abschätzung sicher brauchbar) eine Messung der Ausführungszeit vorgenommen (für 200.000 Transfers) - entsprechend sollte gegenüber deinen kritischen Ausführungszeiten im ms Bereich die der LV keine Rolle spielen (du benutzt ja nur eine). Laut der Messung wäre sie auch schneller als die Queue von daher würde dein Programm schneller.

Kannsts ja einfach mal selbst austesten - mit beiden Varianten den Zeitbedarf für 100.000 ungebremste Durchläufe deines Programms messen oder so ^^

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
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
Music FGEN Erzeugung eines Signalverlaufs anhand einer Mathematischen Funktion DavidStefan 11 7.434 29.05.2021 07:03
Letzter Beitrag: GerdW
  Daten einer SPS S7-1200 mit SP7 Toolkit auslesen Daniel9395 17 12.450 05.08.2020 09:26
Letzter Beitrag: Daniel9395
  Wie auf abgearbeitete Queue warten mez15 11 8.075 28.09.2017 13:02
Letzter Beitrag: TR61
  Datum Uhrzeit Queue DeleteAll 8 5.678 24.03.2017 15:47
Letzter Beitrag: GerdW
  TDMS in Queue laden gifo 8 5.464 07.01.2016 16:41
Letzter Beitrag: GerdW
  Fehlercluster via Queue hansi9990 23 14.306 07.08.2015 14:11
Letzter Beitrag: hansi9990

Gehe zu: