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 

Client Server Anwendung mit Producer-Consumer Template



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!

13.01.2010, 14:49 (Dieser Beitrag wurde zuletzt bearbeitet: 13.01.2010 15:01 von echtzeit.)
Beitrag #1

echtzeit Offline
LVF-Grünschnabel
*


Beiträge: 39
Registriert seit: Oct 2009

8.6.1 und Labview 2009 SP1
2008
de

1099
Deutschland
Client Server Anwendung mit Producer-Consumer Template
Hallo LabVIEWgemeinde,
Ich habe aus den simple client-server Beispielen von LabVIEW mit dem Producer-consumer-template ein Beispiel "gezimmert.
Der Server wartet ewig, bis sich der client meldet. Jetzt fängt er an Daten zu senden (da ich mir über einen grundlegenden Zusammenhang im Unklaren bin, ist dies nur ein Minimalbeispiel. Als "Daten" werden hier nur die Anzahl der Iteration "gesendet".)

Auf dem Client läuft jetzt die Producer-consumer loop. Nur wenn Daten auf der aufgebauten Verbindung ankommen, soll die consumer loop arbeiten.

(Hintergrund: das server VI ist eigentlich ein subVI das auf einem RT-Target liegt. Sobald der user am Host aktuelle Messdaten angezeigt bekommen möchte, "clickt" er auf "call for data" und lässt sich die Daten in einem Graph anzeigen. Dies habe ich wie gesagt hier alles weggelassen...)

Wenn ich auf "call for data" drücke, läuft der "Zähler" auf dem Frontpanel des clientVI wie gewünscht hoch (der server sendet also seine "Daten" und der client verarbeitet sie wie gewünscht.)
Sobald ich auf "IDLE" drücke unterbreche ich die producer-consumer-Verbindung. Ich dachte jetzt, der Server arbeitet ja noch und sendet seine Daten jetzt ins "Leere".
Pustekuchen.... wenn ich nämlich wieder auf "call for data" drücke (und somit die producer-consumer-verbindung wieder aufnehme) beginnt der "Zähler" auf dem Frontpanel des clientVI an der Stelle, an der er vorher aufgehört hatte...
Das bedeuted, es gehen keine Daten verloren. Ich möchte aber keine alten Daten, sondern nur die aktuellen..es dürfen ruhig Daten verloren gehen..

Wo bitteschön werden denn die Daten (in diesem Fall unerewünschterweise) zwischengespeichert?? In irgendeinem rießigen Netzwerkbuffer auf meinem Windows-PC??

   

   

Bitte um Aufklärung...Tongue

Edit1:
P.S.:Ich verwende LabVIEW 8.6

Edit2:
Lösung wäre für mich also (wenn meine vermutung mit dem Netzwerkbuffer stimmt? Unsure ) diesen Buffer zu löschen direkt nachdem ich "call for data" drücke....aber so eine Funktion gibts nicht.....


Angehängte Datei(en)
Sonstige .vi  Host_getData_queue.vi (Größe: 16,54 KB / Downloads: 218)

Sonstige .vi  to_Host.vi (Größe: 11,35 KB / Downloads: 209)

Sonstige .ctl  stop_connect.ctl (Größe: 3,81 KB / Downloads: 208)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.01.2010, 15:29
Beitrag #2

SeBa Offline
LVF-Guru
*****


Beiträge: 2.025
Registriert seit: Oct 2008

09SP1 & 10 FDS
2008
DE

65xxx
Deutschland
Client Server Anwendung mit Producer-Consumer Template
Wenn ich die Screenshots richtig deute, dann liest deine Producerloop die Daten vom Netzwerk und schreibt sie in eine Queue. In der Consumerloop liest du dann Daten aus der Queue aus.

Dann hast du genau hier deinen Puffer erzeugt... -> die Queue.

Wenn du der Queue keine max. Größe gibst und die Daten verlustbehaftet einfügst, bleiben die da drin bis du sie abholst.

Alternativ kanst du die Queue auch leeren und die Daten der Queue die bis dahin angelaufen sind ins Nirgendwo schicken... hört sich für mich aber nicht so gut an, da die Queue dann immer größer wird, bis mal endlich wieder jemand Daten sichtet.


Also max. Größe der Queue festlegen und Elemente verlustbehaftet einfügen.


Gruß SeBa

Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.

Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.

Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.01.2010, 15:45 (Dieser Beitrag wurde zuletzt bearbeitet: 13.01.2010 15:46 von echtzeit.)
Beitrag #3

echtzeit Offline
LVF-Grünschnabel
*


Beiträge: 39
Registriert seit: Oct 2009

8.6.1 und Labview 2009 SP1
2008
de

1099
Deutschland
Client Server Anwendung mit Producer-Consumer Template
Jein..Big Grin

Wenn "call for data" gedrückt ist, werden die Daten eingelesen und in die queue geschrieben.

Aber im Falle von "IDLE":

   

wird nichts eingelesen und auch nichts in die queue geschrieben.
Da es in LabVIEW keine Funktion gibt für "Netzwerkbuffer löschen" müsste ich mir eine dll schreiben, dass sobald wieder "call for data" eingestellt ist, ersteinmal der Netzwerkbuffer gelöscht wird.
..oder ich stoppe eben im Falle von "IDLE" das Senden des Servers...

noch mehr Optionen?

Grüße,
riorio
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.01.2010, 16:11
Beitrag #4

SeBa Offline
LVF-Guru
*****


Beiträge: 2.025
Registriert seit: Oct 2008

09SP1 & 10 FDS
2008
DE

65xxx
Deutschland
Client Server Anwendung mit Producer-Consumer Template
Ich hab jetzt einfach mal das TCP lesen Gedöns aus dem Call for Data Case auch in den IDLE Case kopiert, allerdings ohne die Daten in die Queue zu schreiben. Die gehen also ins Leere.

Damit funktioniert es. Der Counter springt nach Pause auf den aktuellen wert vom to_Host VI.


Gruß SeBa

Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.

Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.

Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.01.2010, 16:23 (Dieser Beitrag wurde zuletzt bearbeitet: 13.01.2010 16:24 von eg.)
Beitrag #5

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Client Server Anwendung mit Producer-Consumer Template
Ich vermute, dass solange die Verbindung zwischen dem Client und Server offen bleibt, existiert dieser Puffer.
Deshalb würde ich die Verbindung im IDLE clientseitig schliessen. Der Server bekommt es auch mit (Fehlermeldung) und soll aus der inneren Schleife rausgehen und in die außere Schleife (die es bei dir noch nicht gibt) springen.

Webseite des Benutzers besuchen 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
  OPC UA Labview (client) PLC SPS (Server) Babithan 1 5.448 27.10.2020 16:12
Letzter Beitrag: jg
  Exe Anwendung keine COM-Anschlüsse gefunden Tomy 1 3.725 01.04.2019 16:09
Letzter Beitrag: GerdW
  OPC UA Client Icebaer 6 11.924 17.03.2015 09:01
Letzter Beitrag: Icebaer
  Probleme mit TCP Kommunikation zwischen Server & Client ChiefChill 3 6.793 10.03.2014 09:02
Letzter Beitrag: cb
  Server/Client TCP/IP RFID Reader che-salih 2 5.771 29.10.2013 13:24
Letzter Beitrag: jg
  Client Server Applikation - wie fange ich an? nemesismf 4 4.674 14.10.2013 13:46
Letzter Beitrag: nemesismf

Gehe zu: