LabVIEWForum.de
Daten von cRio ziehen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenkommunikation (/Forum-Datenkommunikation)
+---- Thema: Daten von cRio ziehen (/Thread-Daten-von-cRio-ziehen)

Seiten: 1 2


Daten von cRio ziehen - Corono - 23.07.2009 16:49

Hallo zusammen

Die nächste Frage: Gibt es eine Möglichkeit, gespeicherte Daten schnell per LabVIEW vom cRio auf den PC zu kopieren? Das Problem ist, wenn ichs mit der FTP-Funktion von LabVIEW mache, dauert das extrem lange, weil er jedes Mal Session erstellt, dann einloggt etc. und halt jede Datei einzeln runtergeladen werden muss. Gibt es eine Möglichkeit, eine FTP-Session zu starten, alle Files reinzupacken, die er braucht, und sie dann wieder zu beenden? Oder noch besser, gleich ganze Ordner zu kopieren. Denn wenn ich es einfach über Windows-Kommandzeile mache, dauert es auch nicht so lange, da muss ich aber acuh jedes File einzeln

Ich weiss, dass es auch einfach über Windows möglich ist, aber das ganze sollte automatisiert ablaufen.


MFG Corono


Daten von cRio ziehen - jg - 23.07.2009 19:20

' schrieb:Die nächste Frage:
Woher soll jemand in 2 Tagen noch wissen, dass du kurz vorher diese Frage hier gestellt hast?
http://www.LabVIEWforum.de/index.php?showtopic=13599&hl=

Also, bitte immer vollständige Hintergrundinfos liefern, vor allem über verwendete Hardware (nicht nur allgemein cRIO).

Wie oft willst du Daten zwischen cRIO und einem LV-Programm auf einem PC übertragen? Wie wäre es mit direkter TCP/IP Kommunikation?!

Gruß, Jens


Daten von cRio ziehen - Corono - 24.07.2009 07:42

' schrieb:Woher soll jemand in 2 Tagen noch wissen, dass du kurz vorher diese Frage hier gestellt hast?
http://www.LabVIEWforum.de/index.php?showtopic=13599&hl=

Ok, cRio ist 9012.
Dachte, das spiele hier keine Rolle, weil es ja generell FTP-Server ist. Habe mal ein Bild angehängt, wie ich es bis jetzt gemacht habe über FTP.
Grundsätzlich soll es einfach so sein, dass man ab und zu mit einem PC vorbeikommen kann und sämltliche geschriebenen Logfiles rüberziehen kann. Grundsätzlich ist das ja über Windows möglich, aber es sollte eigentlich automatisiert ablaufen, also einfach ein klick und dann werden alle kopiert. So wie es im Bild mit FTP gemacht ist dauert es extrem lange, mich würde eigentlich interessieren, ob es auch schneller geht, also ob man z.B. einfach eine Session starten kann und dann alle Daten ziehen und nicht jedes Mal neu einloggen.

Es sind eben nciht immer gleich viele Daten, deshalb wird es mit einer einfachen Batchdatei ziemlich kompliziert.
Wie funktioniert denn das mit direkter TCP-IP-Übertragung? Geht das auch wenn nur ab und zu ein PC dranhängt?


MFG Corono


Daten von cRio ziehen - rolfk - 26.07.2009 19:56

' schrieb:Es sind eben nciht immer gleich viele Daten, deshalb wird es mit einer einfachen Batchdatei ziemlich kompliziert.
Wie funktioniert denn das mit direkter TCP-IP-Übertragung? Geht das auch wenn nur ab und zu ein PC dranhängt?
MFG Corono

Also da gibt es verschiedene Möglichkeiten. Du könntest VI Server einschalten und in Deiner Application ein VI einbauen dass über VI Server aufgerufen werden kann und dass Dir die Files zurückschickt.

Du könntest das Internet Toolkit verwenden das eine komplette FTP VI Library besitzt und Dir in LabVIEW einen eigenen Client schreiben der einmal einloggt, alle Files herunterlädt und das abschliesst.

Du kannst Dir auch einen kleinen TCP/IP Server in die RT Applikation auf Deinem cRIO einbauen und einen entsprechenden Client programmieren der damit kommuniziert.

Rolf Kalbermatter


Daten von cRio ziehen - cb - 27.07.2009 06:53

' schrieb:Wie funktioniert denn das mit direkter TCP-IP-Übertragung? Geht das auch wenn nur ab und zu ein PC dranhängt?
MFG Corono

ja.

Im Prinzip kann man sich die TCP/IP - Übertragung genauso vorstellen wie z.B. RS232. Die Daten werden byteweise übertragen und mit einem VI (TCP Read) wird geprüft ob irgendwelche Daten im Puffer liegen. das Read-VI hat einen Timeout (damit man es in einer Schleife laufen lassen kann) und wenn es Daten zurückliefert hat jemand was geschickt dass man dann verarbeiten kann und wenn es einen Fehler (Timeout) zurückliefert hat niemand was geschickt.

Es gibt dazu aber auch ein Beispiel im Example finder ...


Daten von cRio ziehen - Corono - 27.07.2009 07:20

Ok, danke für die Antworten.

Ich probiere einfach mal aus und melde mich wieder, wenn ich Probleme haben sollte.


MFG Corono


Daten von cRio ziehen - Corono - 28.07.2009 11:40

Hallo zusammen

So, habe es jetzt mal mit TCP versucht. Grundsätzlich funktioniert es auch. Ich hätte nur ne Frage wegem dem Timing. Das Problem ist ja, dass dann das eine File auf der cRio abläuft und das andere auf dem Computer. Wie kann ich die beiden synchronisieren, konkret gesagt, wie weiss ich z.B. dass das eine File erst zu lesen beginnt wenn das andere schon geschrieben hat oder dass das eine File nicht die Verbindung unterbricht bevor das andere fertig ist mit Lesen? So was wie Semaphoren wären da nützlich, aber die kann ich ja nur Fileintern verwenden, das andere File kann da ja nicht zugreiffen.

Am Anfang funktioniert es ja, dann baut der eine die Verbindung auf und der andere hört einfach den entsprechenden Port ab. Aber danach läuft das bei mir ziemlich zufällig ab.


MFG Corono


Daten von cRio ziehen - rolfk - 28.07.2009 14:38

' schrieb:Hallo zusammen

So, habe es jetzt mal mit TCP versucht. Grundsätzlich funktioniert es auch. Ich hätte nur ne Frage wegem dem Timing. Das Problem ist ja, dass dann das eine File auf der cRio abläuft und das andere auf dem Computer. Wie kann ich die beiden synchronisieren, konkret gesagt, wie weiss ich z.B. dass das eine File erst zu lesen beginnt wenn das andere schon geschrieben hat oder dass das eine File nicht die Verbindung unterbricht bevor das andere fertig ist mit Lesen? So was wie Semaphoren wären da nützlich, aber die kann ich ja nur Fileintern verwenden, das andere File kann da ja nicht zugreiffen.

Am Anfang funktioniert es ja, dann baut der eine die Verbindung auf und der andere hört einfach den entsprechenden Port ab. Aber danach läuft das bei mir ziemlich zufällig ab.
MFG Corono

Indem man ein intelligentes VI macht. Durch diese VI geht sowohl das Schreiben ins File als auch das Lesen davon. Dazu hast Du dann zwei Methoden im VI (plus eine Init beispielsweise mit der Du das File initialisierst/anlegst) die Du beispielsweise mittels eines Enums selektierst.

Bei nicht reentranten Vis stellt LabVIEW automatisch sicher dass es nicht gleichzeitig von zwei verschiedenen Orten aufgerufen werden kann und schon hast Du eine ganz einfache Methode um den Streit um den Filezugriff zu synchronisieren.

Kannst Dich natürlich auch mit Semaphores rumschalgen aber das ist hier völlig unnötig da nicht reentrante VIs dieses Problem sehr elegant und effizient lösen.

Rolf Kalbermatter


Daten von cRio ziehen - Corono - 29.07.2009 07:23

Hmm, ich bin nicht ganz sicher, ob ich deine Antwort verstehe. Das Problem ist nicht der Zugriff auf die Files, der ist schön geordnet eins nach dem anderen. Ich frage mich nur, wie ich sicherstellen kann, dass der cRio sendet und darauf der Computer liest. Am Anfang ist es ja so, dass man eine Verbindugn aufbaut und das andere File hört den Port ab. Da wird synchronisiert. Danach schreibt der cRio Daten und der Computer liest sie. Funktioniert alles ganz prima, ich frage mich jetzt nur, ob das Zufall ist, weil ich momentan gar keine Steuerung drin habe, was den Ablauf betrifft. Wie stelle ich z.B. sicher, dass das File auf dem Computer erst liest, sobald der cRio geschrieben hat? Oder macht das LabVIEW automatisch. Wird immer ein mal geschrieben und dann gelesen? Oder muss einfach das cRio-File schneller sein als das Computerfile?


MFG Corono


Daten von cRio ziehen - rolfk - 29.07.2009 08:07

' schrieb:Hmm, ich bin nicht ganz sicher, ob ich deine Antwort verstehe. Das Problem ist nicht der Zugriff auf die Files, der ist schön geordnet eins nach dem anderen. Ich frage mich nur, wie ich sicherstellen kann, dass der cRio sendet und darauf der Computer liest. Am Anfang ist es ja so, dass man eine Verbindugn aufbaut und das andere File hört den Port ab. Da wird synchronisiert. Danach schreibt der cRio Daten und der Computer liest sie. Funktioniert alles ganz prima, ich frage mich jetzt nur, ob das Zufall ist, weil ich momentan gar keine Steuerung drin habe, was den Ablauf betrifft. Wie stelle ich z.B. sicher, dass das File auf dem Computer erst liest, sobald der cRio geschrieben hat? Oder macht das LabVIEW automatisch. Wird immer ein mal geschrieben und dann gelesen? Oder muss einfach das cRio-File schneller sein als das Computerfile?
MFG Corono

Genau deswegen habe ich den Vorschlag gemacht die ganze Schreib- UND Leseoperation in einem einzigen VI als jeweils atomare Operation auszuführen. Dort wo Du Daten schreiben willst rufst Du das VI auf mit den Selektoreingang auf Schreiben gesetzt. In Deinem TCP/IP Server rufst Du das VI auf mit dem Selectoreingang auf Lesen gesetzt. LabVIEW stellt dann sicher dass die Lese und Schreibmethoden nacheinander und nicht durcheinander geschehen.

Rolf Kalbermatter