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 

Dieses Thema hat akzeptierte Lösungen:

Resourcen schonende Kommunikation



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!

08.04.2020, 12:22
Beitrag #21

LV-New Offline
LVF-Grünschnabel
*


Beiträge: 22
Registriert seit: Apr 2020

2016
2019
DE



RE: Resourcen schonende Kommunikation
Ich glaube die Queues erschlagen mich noch... zumindest bei der Menge die es dann werden.
Aber klar, es sind zuviele Parameter die ich beachten muss bei meiner Idee.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
08.04.2020, 12:32
Beitrag #22

GerdW Offline
______________
LVF-Team

Beiträge: 16.467
Registriert seit: May 2009

11SP1, 17SP1 (ab und zu 20)
1995
DE_EN

10×××
Deutschland
RE: Resourcen schonende Kommunikation
Hallo LV-New,

man kann Queues auch mit Namen anlegen.
Und wenn man weiß, z.B. per ConfigFile oder typdefiniertem Enum, welche Consumer zu erwarten sind, kann man für jeden Consumer eine Queue anlegen.
Jeder Consumer kennt seinen eigenen Namen und kann so auch seine Queue lesen.
Und um zu verhindern, dass die Queues den Speicher vollmüllen, kann man sie beim Erstellen auch gleich auf eine sinnvolle Länge begrenzen. (Man verwendet dann ein LossyEnqueue…)

Alles zusammen:
Man legt eine überschaubare Anzahl von benannten Queues an, die man natürlich zum Ende des Programms auch alle wieder löscht. Und jeder Consumer liest aus seiner längenbeschränkten Queue.

Klappt für "normale" Datenübertragung (d.h. keine Anforderungen an große Datenpuffer und sehr hohe Datenraten) sehr gut! Ich nutze das, um in einer Prüfstandssoftware mit einer unbekannten (aber über ein Enum definierten maximalen) Anzahl anzusteuernder Geräte Stellbefehle an alle Geräte zu verteilen. Jedes Gerät liest aus seiner Queue - und wenn der Gerätetreiber mangels Hardware nichts liest, stört das aufgrund der Längenbeschränkung der Queues auch nicht…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2020, 17:50 (Dieser Beitrag wurde zuletzt bearbeitet: 08.04.2020 17:52 von LV-New.)
Beitrag #23

LV-New Offline
LVF-Grünschnabel
*


Beiträge: 22
Registriert seit: Apr 2020

2016
2019
DE



RE: Resourcen schonende Kommunikation
Bräuchte nochmal Hilfe!
Versuche mich nun mehr und mehr in Queues einzuarbeiten...
Aktuell möchte ich gern die Slave-Queueschleife beenden, wenn aus der Masterschleife alle Queues gelesen wurden.
Aber irgendwie hänge ich gerade. Siehe Beispiel im Anhang (Wenn ich Queue-Status lesen in eine separate Schleife packe funktioniert es, warum nicht in der unten angehangenen Schleife?)
Kurze Erklärung warum es nicht geht wäre super, dann kann ich es auch verstehen.

Danke


Angehängte Datei(en)
16.0 .vi  Communication with queue v2.vi (Größe: 13,39 KB / Downloads: 17)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2020, 19:01
Beitrag #24

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.560
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Resourcen schonende Kommunikation
Schon mal dein VI im Highlighting Modus debuggt?

Du hast dir eine schöne Race-Condition programmiert in deinem Bsp-VI.
Get Queue Status in deiner Consumer-Loop wird je nach Ausführungsreihenfolge das erste Mal VOR dem ersten Enqueue in der Producer-Loop ausgeführt, lieert damit bei "Elements in Queue" als Ergebnis Null, womit du sofort deine Queue zerstörst...

"Elements in Queue" würde ich nicht dafür hernehmen, um einen Consumer zu beenden. Das ist eher zum Debuggen geeignet, ob der Consumer schnell genug hinterherkommt.

Lieber:
Vom Producer eine Nachricht an den Consumer senden, dass er aufhören soll.
Alternativ: Nach Ende des Consumers die Queue zerstören, und auf diesen Fehler im Consumer reagieren.
Nachteil dieses einfachen Ansatzes: Es gehen Meldungen verloren...

Offtopic2
Nie, wirklich NIEMALS das Label eines Controls wegeditieren (wie bei dir der Stopp-Button).
Wenn du das Label im FP nicht sehen willst, dann dort per Rechtsklick -> Visible Itmes das Label nicht anzeigen.

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
09.04.2020, 08:26 (Dieser Beitrag wurde zuletzt bearbeitet: 09.04.2020 08:38 von LV-New.)
Beitrag #25

LV-New Offline
LVF-Grünschnabel
*


Beiträge: 22
Registriert seit: Apr 2020

2016
2019
DE



RE: Resourcen schonende Kommunikation
Hi,

da hatte ich wohl die alter Version angehängt. :-(
Wie dem auch Sei, die Aufgabe sollte eben sein:
Es sollen keine Meldungen verloren gehen weder während der Producer Daten erzeugt (sollte durch Queue ja gesichert sein, richtig?) Noch nachdem der Producer fertig ist (Schleife beendet). Dennoch soll nachdem alle Werte aus der Queue gelesen wurden der Consumer Loop "automatische" geschlossen werden (Da Producer beendet wurde und keine Daten mehr ausgibt.)
Daher das "Elements in Queue".
Hintergrund: DAQ Daten Erstellung in einem separaten Loop zu einem TDMS lopp, der die Daten speichert.

Da hat doch bestimmt schon jemand was gemacht.... :-)


Angehängte Datei(en)
16.0 .vi  Communication with queue v2.vi (Größe: 13,41 KB / Downloads: 12)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.04.2020, 08:49 (Dieser Beitrag wurde zuletzt bearbeitet: 09.04.2020 09:01 von GerdW.)
Beitrag #26

GerdW Offline
______________
LVF-Team

Beiträge: 16.467
Registriert seit: May 2009

11SP1, 17SP1 (ab und zu 20)
1995
DE_EN

10×××
Deutschland
RE: Resourcen schonende Kommunikation
Hallo LV,

Zitat:Da hat doch bestimmt schon jemand was gemacht.... :-)
Dann lies dir bitte noch einmal Jens' Antwort von gestern abend durch!

So in etwa kann das aussehen:
   
Statt eines simplen Strings kann/sollte man ein typdefiniertes Enum verwenden: dann landet man schon beim QueuedMessageHandler-Pattern…

Zitat:Hintergrund: DAQ Daten Erstellung in einem separaten Loop zu einem TDMS lopp, der die Daten speichert.
Wenn es dir nur um die Datenspeicherung geht: das kann dein DAQmx-Task ganz allein erledigen! Dafür gibt es spezielle DAQmx-Funktionen und BeispielVIs im Beispielfinder!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
09.04.2020, 09:03 (Dieser Beitrag wurde zuletzt bearbeitet: 09.04.2020 09:10 von jg.)
Beitrag #27

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.560
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Resourcen schonende Kommunikation
Hallo LV-New

Auch dieses Beisoiel wird genauso scheitern.

Der Consumer wird in dem Moment, in dem das erste Element in der Queue landet, dieses auslesen, danach ist die Queue leer und du zerstörst die Queue. Think Dataflow!!

Ich hatte dir schon eine Lösung angedeutet, es ist "Standard", über die Queue nicht nur Daten, sondern auch Kommandos weiterzugeben.
Ich hab mal schnell was zusammengeklickt:

   

Hier gehören das Enum und der Cluster natürlich noch Typdefiniert, aber es soll nur das Prinzip darstellen.

Gruß

EDIT: Gerd war schneller (2 min)...

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
09.04.2020, 09:14
Beitrag #28

LV-New Offline
LVF-Grünschnabel
*


Beiträge: 22
Registriert seit: Apr 2020

2016
2019
DE



RE: Resourcen schonende Kommunikation
Hey Danke Euch nochmal, manchmal hat man einfach ein Brett vor dem Kopf.
Oder anders gesagt.. bin ich gerade noch dabei die ganzen kleinen Puzzelteile zusammen zu suchen um eine schnelle, aber Ressourcen schonende Kommunikation zwischen meinen Schleifen zu erstellen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.04.2020, 09:59
Beitrag #29

kpa Offline
LVF-Stammgast
***


Beiträge: 381
Registriert seit: Mar 2007

2019
2002
DE

88***
Deutschland
RE: Resourcen schonende Kommunikation
Hallo LV-New,

übersichtlich und resourcenschonend geht es auch so (da viele Knotenpunkte wegfallen):

   

Grüße
kpa
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.04.2020, 11:42
Beitrag #30

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.560
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Resourcen schonende Kommunikation

Akzeptierte Lösung

(09.04.2020 09:59 )kpa schrieb:  Hallo LV-New,

übersichtlich und resourcenschonend geht es auch so (da viele Knotenpunkte wegfallen):



Grüße
kpa

Dazu passend, aktuell kostenlos verfügbar:
https://learn.ni.com/training/resources/...munication

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
Antwort schreiben 


Gehe zu: