LabVIEWForum.de
Geöffnete Binärdatei per FTP übertragen und einlesen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO)
+---- Thema: Geöffnete Binärdatei per FTP übertragen und einlesen (/Thread-Geoeffnete-Binaerdatei-per-FTP-uebertragen-und-einlesen)

Seiten: 1 2


Geöffnete Binärdatei per FTP übertragen und einlesen - Matze - 12.11.2010 20:21

Hi zusammen,

ich muss jede Millisekunde aus meiner Anwendung heraus holen und bin nun her gegangen und öffne/erstelle beim Programmstart eine Binärdatei und beim Programmende wird sie geschlossen. Zwischendrinnen werden Messwerte u.ä. protokolliert.
Im Idealfall läuft die Anwendung über Monate ununterbrochen, d.h. die Datei ist im Prinzip immer geöffnet. Alles andere dauert viel zu lange.

Beim Schreibvorgang landet die Datei auf der Festplatte (bzw. auf dem Speicher eines RT-Systems, wobei das keine Rolle spielt).
Per FTP möchte ich jederzeit die Datei auslesen können.
Die Datei kann ich auch übertragen, aber beim Auslesen kommt irgendein Fehler mit unerwartetem EOF (End of FIle) oder sowas (auch wenn gerade nicht in die Datei geschrieben wird).

Ist es denn prinzipiell möglich, eine geöffnete Datei auszulesen?
Würde es reichen, wenn ich selbst das EOF anhänge?
Oder kann ich das vorgehen komplett vergessen?

Mit dem Vorgehen bin ich beim Schreiben um Faktor 10 schneller, als wenn ich die Datei öffne, schreibe und anschließend schließe.

Grüße


Geöffnete Binärdatei per FTP übertragen und einlesen - GerdW - 12.11.2010 20:39

Hallo Mecha,

Jein: prinzipiell kann man geöffnete Dateien auch lesen - solange sie nicht exklusiv reserviert sind...
Ob das mit den Eckdaten RT-System und FTP-Zugriff auch noch zutrifft, kann ich aber nicht sagen.


Geöffnete Binärdatei per FTP übertragen und einlesen - Matze - 12.11.2010 20:58

Hallo Gerd,

ich weiß gar nicht, wie man Dateien in LabVIEW exklusiv öffnet, vermutlich über "Dateiberechtigung setzen", doch das VI verwende ich nicht und die Übertragung per FTP funktioniert auch. Ich nutze das VI "Datei öffnen/erstellen" im Modus "write only".
Ich vermute, dass das EOF nur beim Schließen hinzugefügt wird (wäre auch logisch). Daher der Gedanke, die übertragene Datei irgendwie zu öffnen und das EOF anzuhängen. Nur wie kann ich die öffnen ohne EOF. *grübel*

Bei mir ist es so, dass die Datei auf einem System geöffnet ist, dann im geöffneten Zustand per FTP übertragen wird und dann auf einem anderen System ausgelesen wird.
Ich vermute, dass Dateiberechtigungen hier keine Rolle spielen.


Geöffnete Binärdatei per FTP übertragen und einlesen - jg - 12.11.2010 22:59

Geöffnete Datei gleichzeitig lesen, im Prinzip schon möglich. Aber das machst du ja gar nicht. Du überträgst eine geöffnete Datei per FTP. Das hört sich für mich nicht gut an. Davon würde ich die Finger lassen. Oder durch geschickte Programmierung dafür sorgen, dass nicht Schreiben und FTP-Senden/Lesen gleichzeitig passieren.

Alternativ, wieso nicht gleich die Daten aktiv per TCP/IP senden?!

Gruß, Jens


Geöffnete Binärdatei per FTP übertragen und einlesen - Matze - 12.11.2010 23:56

Hallo Jens,

es sollen die Messwerte protokolliert und nur passiv (bei Bedarf) visualisiert werden. Daher muss das Ganze auch ohne Windows-Applikation laufen. Ein laufendes Streamen ist daher nicht möglich.

Stimmt, wenn während der Übertragung in die Datei geschrieben wird, wäre das nicht gut.
Meinst du, man kann die Übertragung irgendwie so lange verzögern, bis die Daten geschrieben wurden?
Und wie könnte ich das sonst lösen?Sad

In meinem Testfall wurde die Übertragung erst gestartet, nachdem die Daten geschrieben wurden. Und auch hier kam der EOF-Fehler.


Geöffnete Binärdatei per FTP übertragen und einlesen - Matze - 14.11.2010 14:43

Hallo,

hat noch jemand eine Idee?

Ich habe soeben versucht, das rein unter Windows nachzustellen, doch das ist mir nicht gelungen. Folgendes funktionierte:

- Datei erstellen und hineinschreiben (geöffnet lassen)
- Datei über den Win-Explorer kopieren
- Datei schließen
- Versuch, die Kopie einzulesen

Vielleicht liegt das Problem auch in der FTP-Übertragung (Binärmodus ist eingestellt).Unsure


Geöffnete Binärdatei per FTP übertragen und einlesen - macmarvin - 14.11.2010 19:28

Sowas in der Art mache ich üblicherweise so:

- Datei auf dem RT anlegen und mit "deny access" den Zugriff für alle anderen blockieren.
- Datei benutzen.
- Wenn die Datei übertragen werden soll schickt die Windowsapplikation einen entsprechenden Befehl ans RT.
- RT schließt die Datei und legt sich eine Neue an ggf. auch einfach Kopie der alten.
- RT gibt Windowsapp rückmeldung, daß die Datei erfolgreich geschlossen wurde und abgeholt werden kann.
- Die Windowsapp holt die Datei, löscht sie ggf. auf dem RT und bereitet sie für die Ablage/Anzeige auf.

Die Übertragung selbst kann dann per FTP erfolgen oder per eigener Dateiübertragung, was ich eher bevorzuge (leidvolle Erfahrungen mit dem FTP-Server).


Geöffnete Binärdatei per FTP übertragen und einlesen - Matze - 14.11.2010 20:34

Hallo,

ja das ist an sich eine gute Lösung, nur sollte das ganze System auch ohne Windows-Anwendung funktionieren. Und ich weiß nicht, ob das funktioniert.
Da bräuchte ich vermutlich eine parallele TCP/IP-Schleife in der RT-Anwendung (ich habe bereits eine zur Kommunikation mit einem anderen Gerät) und dort ein kurzes Timeout festlegen, den Timeout-Fehler abfangen und erneut versuchen, die Verbindung aufzubauen.

Starte ich dann die Win-Anwendung, wird ein Listener dort erzeugt, der auf eine eingehende Verbindung wartet.
Beende ich diese, wird der Fehler im RT-System wieder abgefangen und fortlaufend probiert, sich zu verbinden.

Wäre das ein praktikabler Weg?

So eine Lösung hätte für mich einen weiteren, großen Vorteil:
Ich kann Programmparameter von der Win-Anwendung per FTP auf das cRIO laden. Ich bin nur noch nicht auf eine Lösung gekommen, wie ich der RT-Anwendung mitteilen kann, dass eine neue Datei vorhanden ist. Das könnte ich mit deiner Lösung auch erreichen.


Geöffnete Binärdatei per FTP übertragen und einlesen - macmarvin - 14.11.2010 21:47

Den Listener würde ich RT Seite machen und dich aktiv darauf connected.
Ich war pauschal davon ausgegangen, daß du eh schon eine TCP Verbindung zwischen Host und RT hast, zum Konfigurieren usw.

Wenn du ganz ohne spezielle Hostapp auskommen willst, kannst du auch einen einfachen Kommandointerpreter auf dem RT laufen lassen und darauf per telnet zugreifen.

Oder du benutzt FTP bzw. das RT-Filesystem als Kommandointerface. Das RT pollt ein definiertes Verzeichniss und der Benutzer legt dort per FTP Dateien die Kommandos darstellen ab. Nach der Abarbeitung löscht das RT dann jeweils die Dateien.

Die Polling Methode würde auch für neue Konfigdateien funktionieren.


Geöffnete Binärdatei per FTP übertragen und einlesen - Matze - 14.11.2010 22:04

' schrieb:Den Listener würde ich RT Seite machen und dich aktiv darauf connected.
ok, dann eben so herum.Smile

' schrieb:Ich war pauschal davon ausgegangen, daß du eh schon eine TCP Verbindung zwischen Host und RT hast, zum Konfigurieren usw.
Die besteht schon, nur ist die Anforderung, dass die Windows-Applikation nicht laufen muss. Daher erfolgt der Zugriff nur passiv (per FTP).

' schrieb:Wenn du ganz ohne spezielle Hostapp auskommen willst, kannst du auch einen einfachen Kommandointerpreter auf dem RT laufen lassen und darauf per telnet zugreifen.
Hm, damit kenne ich mich gar nicht aus.

' schrieb:Oder du benutzt FTP bzw. das RT-Filesystem als Kommandointerface. Das RT pollt ein definiertes Verzeichniss und der Benutzer legt dort per FTP Dateien die Kommandos darstellen ab. Nach der Abarbeitung löscht das RT dann jeweils die Dateien.

Die Polling Methode würde auch für neue Konfigdateien funktionieren.
Das hatte ich mir auch bereits überlegt. Als ich aber gesehen habe, wie langsam Dateizugriffe sind und wie stark sie die CPU auslasten, möchte ich eine bessere Lösung.