# Wago: CSV Datei auf FTP Server schreiben



## beginner87 (11 September 2013)

Hallo zusammen

Wir möchten auf einem FTP Server eine .csv Datei mit Messwerten erstellen. Diese sollen nach 50 Messungen gesendet werden. Die Wago stellt die Verbindung her, das File wird erstellt, allerdings ist es nicht lesbar(Nur wirre Zeichen :-S)

Die Messwerte werden als REAL erfasst und sollten auch als REAL (wenn möglich) abgelegt werden können. Als Trennzeichen für die .csv Datei werden STRING's benutzt. 
Abgelegt wird das ganze als ARRAY OF STRUCT:

TYPE Erfassung :
STRUCT
	dt_zeit					: DT;
	re_spannung				: REAL;
	st_Trennzeichen01				: STRING := ';';
	re_strom					: REAL;
	st_Trennzeichen02				: STRING := ';';
	re_energie				: REAL;
	st_Trennzeichen03				: STRING := ';';
	st_neue_zeile				: STRING := '/n';

END_STRUCT
END_TYPE

Wir versuchten die Daten ebenfalls schon als BYTE,STRING,INT etc. abzulegen, allerdings immer mit dem selben "Erfolg".

Im Anhang ist das komplette File. Als Grundlage diente die Vorlage "Filewritesend" von Wago. 

http://www.wago.com/wagoweb/documentation/app_note/a1141/a114100d_f.htm

Als Hardware benutzen wir eine Wago 750-849.

Dank und Gruss.


----------



## StructuredTrash (12 September 2013)

Eine CSV-Datei ist eine reine Textdatei, Du musst die DT/REAL-Werte in Strings umwandeln. Aber nicht als einzelne Strings in dem Struct, sondern so, dass jede Textzeile ein zusammenhängender String ist (Stichwort "Concat"). Wenn Du so weit bist, würde ich mal in der WAGO-Lib nach einem FB suchen, der einzelne Strings in die Datei schreibt. Das wäre von der Programmierung her einfacher als mehrere Strings in ein Bytearray zu packen. Dabei müsstest Du nämlich noch, je nach WAGO-String-Speicherformat, das ich nicht kenne, das führende Längenbyte oder die Null am Stringende entfernen.


----------



## EvilIce (12 September 2013)

Hier mal ein kleines Beispiel wie wir eine Datei erstellen:


```
SysFileOpenNum:=SysFileOpen(Filename,FileMode);
	WriteBuffer:=Datum;
	WriteBuffer:=CONCAT(WriteBuffer, ';');
	WriteBuffer:=CONCAT(WriteBuffer, Uhrzeit);
	WriteBuffer:=CONCAT(WriteBuffer, ';');
	WriteBuffer:=CONCAT(WriteBuffer, sTagesmenge);
	WriteBuffer:=CONCAT(WriteBuffer, ';');
	WriteBuffer:=CONCAT(WriteBuffer, '$R$N');
	DWWritten:=SysFileWrite(SysFileOpenNum,ADR(WriteBuffer),LEN(WriteBuffer));
	SysFileClose(SysFileOpenNum);
```


----------



## Mathias (30 September 2013)

*Ein weiteres Problem, die csv Datei enthält ungültige Zeichen*

Hallo zusammen das schreiben hat geklappt, nun ist das Problem, dass die geschriebene .csv ungültige Zeichen enthält. Im Anhang seht ihr den Array, welcher in die Datei geschrieben wird und daneben eine csv Datei. In der Csv werden 0 und auch $n geschrieben, welche gar nicht im Array enthalten sind. Ich habe auch schon versucht das Array mit Leerschlägen zu überschrieben, auch dies half nicht. Weiss jemand an was das liegen kann? Besten Dank und Grüsse


----------



## PN/DP (30 September 2013)

Ich weiß nicht, wo Du das mit dem $n her hast (und was das überhaupt für ein (nicht genormtes? oder nicht genau dokumentiertes) Zeichen ist).
Doch ersetze mal alle $n durch die zwei Zeichen $R$L (0x0D 0x0A).

Wenn man unbekannte Dateiformate erzeugen will, dann macht es großen Sinn, sich eine Original-Datei des Ziel-Dateitypes und die selbst erzeugten Dateien mit einem Hexeditor anzuschauen und zu vergleichen.

Was Excel versucht automatisch aus einem unbekannten Dateiformat herauszuinterpretieren kann man nicht beeinflussen. Man muß halt einfach normgerechte Dateiformate erzeugen.

Harald


----------



## PN/DP (30 September 2013)

Es könnte auch sein, daß Du die Zeichenfolge $R$N verwenden mußt. Auf jeden Fall müssen es die Zeichen 0x0D 0x0A sein. Um ganz sicher zu gehen kann man auch $0D$0A schreiben.

Anscheinend gibt es keine vernünftige Dokumentation, welche Zeichen genau CoDeSys bzw. ST unter $L, $N und $R meint.  Ich finde auf die Schnelle nichts.
Selbst die Bücher über die 61131 sind sich da anscheinend uneins. Beispiel

Harald


----------



## Mathias (30 September 2013)

*Es hat geklappt*

Besten Dank für die Antwort, es war der Befehl '$l' der funktioniert. Grüsse Mathias


----------



## PN/DP (30 September 2013)

Nochmal ganz deutlich formuliert: es müssen die *zwei* Zeichen $R $L ($0D $0A) zusammen sein, damit die CSV-Datei ganz kompatibel wird.
Nur eines von beiden ist nicht genug.

Harald


----------

