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 

Zwei Wege 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!

16.11.2011, 13:01
Beitrag #1

Kiesch Offline
LVF-Stammgast
***


Beiträge: 412
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
Zwei Wege Kommunikation
Hallo liebe LVF Nutzer,

gibt es für Labview eine einfachere Möglichkeit sowas (zwischen zwei verschiedenen VIs) zur Prozesskommunikation zu realisieren als zwei Queues zu machen?

Randbedingungen:

Polling bzw. unnötige Wartezeiten sollen vermieden werden (deswegen fallen wohl FGVs, Shared und Globale Variablen raus, oder gibt es dafür "value change" Events?).


Realisiert habe ich das schon über zwei Queues (je Einelementig), die jeweils ausgelesen und damit wieder geleert werden. Jeder Prozess liest eine Queue und schreibt die andere. Durch die Beschränkung auf ein Element soll realisiert werden, dass genau so schnell geschrieben wird wie auch gelesen wird. Umgekehrt wird auch nur gearbeitet wenn ein Leseprozess stattgefunden hat, dann jedoch Zeitnah, so dass ich schnelles Ansprechverhalten auf Daten ohne Overhead durch schnelles Polling habe.

Kann man das Verhalten auch irgendwie anders (vulgo: einfacher) zusammenbauen?

Gruß Kiesch

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
Anzeige
16.11.2011, 13:16
Beitrag #2

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
RE: Zwei Wege Kommunikation
TCP/IP?! Unsure

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.11.2011, 13:20
Beitrag #3

unicorn Offline
LVF-Freak
****


Beiträge: 680
Registriert seit: Jul 2009

8.6.1, 2010 - 2012
1994
EN

10xxx
Deutschland
RE: Zwei Wege Kommunikation
Wenn sozusagen "der Staffelstab" zwischen den beiden VI immer hinundher gereicht wird, ist die Semaphore das richtige. Befindet sich auf Synchronisationspalette. Im Prinzip bleibt der Aufwand der gleiche wie mit der einelementigen Queue.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.11.2011, 12:12 (Dieser Beitrag wurde zuletzt bearbeitet: 17.11.2011 12:18 von Kiesch.)
Beitrag #4

Kiesch Offline
LVF-Stammgast
***


Beiträge: 412
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: Zwei Wege Kommunikation
Müsste ich den Semaphor nicht auch pollen? Außerdem verstehe ich nicht wie ich das zur Kommunikation nutzen kann. (von A nach B) ich könnte maximal isolieren, dass nicht A und B gleichzeitig auf Daten schreiben - aber das hilft mir doch an sich nicht weiter (ausser mir racing conditions zu ersparen). Ich will ja von A mit B reden. Außerdem finde ich jetzt auf die schnelle keine "auf Semaphor freigabe warten" Funktion. Wie gesagt, polling will ich ja möglichst auch nicht.

Fällt mir auch grade ein:

Bremst es die Laufzeit stark, dass ich eine einelementige Queue verwende? (dabei muss ja immer erst der eine dann der andere Prozess arbeiten von daher muss der Prozessor etc. auch erstmal entsprechend Zeit zuteilen) Meine Daten kommen nämlich in der schon realisierten Variante typischerweise eher stoßweise (die werden von einem VI geliefert, dass ich fernsteuere und in dem mit Wartezeiten gepollt wird - daran wollte / konnte ich allerdings nicht großartig rumspielen, verbessern, da ich keine neuen Bugs da drin gebrauchen kann atm; allerdings ist die Kommunikation hier und da etwas langsam scheinbar (Daten gehen über ne Queue an nen Modul das TCP IP Kommunikation mit nem zweiten Rechner macht von dem aus die Daten dann wieder per Queue an ein VI gesendet werden - das ganze wie gesagt auf zwei Wege Basis. Entsprechend kann ich mir zumindest vorstellen, dass die Queue Größe da ein Flaschenhals für die Laufzeit ist).
Bin nämlich nach durchdenken für den Thread darauf gekommen, dass ich die Bedingung einelementig doch noch aufweichen könnte - dann würde mir allerdings die gewollte (sofortige) Info an den ersten Prozess abhanden kommen, dass die Daten aktuell nichtmehr verarbeitet werden können - einelementige Queue gibt mir entsprechend eine sofortige Response wenn irgendwas nicht geklappt hat - mit ner Mehrelementigen könnte ich lediglich sicherstellen, dass die Befehle in der richtigen Reihenfolge abgearbeitet werden - nicht aber, dass der sendende Prozess weis welche Befehle schon bearbeitet wurden...

Sorry wenn das vielleicht ein wenig wirr klingt. Hoffe es is einigermaßen verständlich. Kernpunkt der Frage ist:

Bremst es die Ausführungszeit stark ein wenn eine einlementige Queue zur Kommunikation genutzt wird statt eine Mehrelementige - unter der Maßgabe, dass bei der mehrelementigen jeweils ein Element gelesen würde bis die leer ist und dann auf neue Daten gewartet wird und, dass die Daten eher Stoßweise kommen mit längeren Leerzeiten (10ms Bereich) zwischen den Daten"bündeln?

P.S: Zu TCP/IP - finde ich persönlich zu kompliziert... Und auch da muss man minimum zwei Ports nehmen um die Kommunikation sauber zu trennen. Dazu kommt, dass man keine Trennung nach Datenpaketen hat (ein String den ich über eine Queue sende bringt seine Länge gleich mit, ist also über die Queue in seiner Länge definiert - ensprechend sauber kann ich einzelne Befehle voneinander trennen; bei TCP IP müsste ich nach Steuerzeichen durchsuchen die die Befehle trennen (was geht) und zusätzlich entweder Zeichenweise lesen oder eine Kommunikation programmieren, die erst Länge der gesendeten Daten und dann die Daten sendet. Geht natürlich auch - ist aber meiner Meinung nach noch deutlich mehr aufwand als das über Queues zu machen.
Die Hauptfrage wäre dann also: Wie performant sind Zeichenweise TCP IP Leseprozesse auf Localhost? Falls die schnell genug sind könnte das eventuell tatsächlich ne alternative sein... (Größenordnung dürfte bei ~30 Zeichen pro Befehl im Mittel liegen).

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
17.11.2011, 12:42
Beitrag #5

unicorn Offline
LVF-Freak
****


Beiträge: 680
Registriert seit: Jul 2009

8.6.1, 2010 - 2012
1994
EN

10xxx
Deutschland
RE: Zwei Wege Kommunikation
Durch das Senden-Antwort-Verhalten ist die Performance reduziert. Es ist als würde alles auf einem Rechner seriell ablaufen. Der Verzicht auf das Warten auf die Antwort würde die Performance erhöhen. Wenn der Sendeprozess zwingend auf die Antwort der vorherigen Aktion angewiesen ist, kannst Du nichts ändern.

Das Netzwerk kann auch die Perfomance verschlechtern, wenn andere Daten über das Netzwerk gesenden werden.

Wenn Du nicht auf das Ergebnis des Verarbeitungsprozesses angewiesen bist, bietet sich eine viel-elementige Queue an. Diese speichert die Daten zwischen. Damit können stoßweise anfallende Daten kontinuierlich verarbeitet werden oder der Sendeprozess kann kontinuierlich Daten einstellen auch die Verarbeitung der Daten unterschiedlich lange dauert.
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
  Serielle Kommunikation zwischen zwei Laptops Gerd Grote 34 23.448 19.09.2016 17:00
Letzter Beitrag: jg
  TCP / IP Kommunikation zwischen zwei Rechnern Kiesch 4 10.499 11.08.2011 14:09
Letzter Beitrag: lapser

Gehe zu: