Twincat Array nach CSV file

Nijkamp

Level-1
Beiträge
32
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich habe ein Problem bei es schreiben van mehrere Word nach ein File(CSV format).
Ich woll ein array von 10 WORDte nach ein file schreiben, in CSV format.
Wenn ich es mache mit FB_Fileopen und FB_FileWrite dann bekomme ich kein nützliche data.
Code:
Data      :                              ARRAY[1..10] OF UINT;
 
Data1 AT%IW0:WORD:= 32767;                                (*QW2*)
                Data2 AT%IW2:WORD := 32767;               (*QW4*)
                Data3 AT%IW4:WORD := 32767;               (*QW6*)
                Data4 AT%IW6:WORD := 32767;               (*QW8*)
                Data5 AT%IW8:WORD := 32767;               (*QW10*)
                Data6 AT%IW10:WORD := 32767;             (*QW12*)
                Data7 AT%IW12:WORD := 32767;             (*QW14*)
                Data8 AT%IW14:WORD :=10;                     (*QW16*)
                Data9 AT%IW16:WORD :=100;                   (*QW18*)
                Data10 AT%IW18:WORD :=1000;              (*QW20*)

Code:
FB_FileOpen(
                sNetId:='' ,
                sPathName:= 'Hard Disk2\logs\testfile3.txt' ,
                nMode:=FOPEN_MODEWRITE OR FOPEN_MODETEXT,
                ePath:=PATH_GENERIC ,
                bExecute:= fileopen,
                tTimeout:=t#5s ,
                bBusy=> ,
                bError=> ,
                nErrId=> ,
                hFile=>hFile );
 
FB_FileWrite(
                sNetId:= '',
                hFile:=hFile ,
                pWriteBuff:= ADR (Data) ,
                cbWriteLen:=SIZEOF (Data) ,
                bExecute:=filewrite ,
                tTimeout:=t#5s ,
                bBusy=> ,
                bError=> ,
                nErrId=> ,
                cbWrite=> );

Jetzt habe ich es auch auf die nächste weise gemacht:

Data1 ist 32767

Code:
Stringtest:= WORD_TO_STRING(Data1);
CSVtest:= STRING_TO_CSVFIELD(Stringtest,TRUE);
 
FB_FileOpen(
                sNetId:='' ,
                sPathName:= 'Hard Disk2\logs\testfile4.txt' ,
                nMode:=FOPEN_MODEWRITE OR FOPEN_MODETEXT,
                ePath:=PATH_GENERIC ,
                bExecute:= fileopen,
                tTimeout:=t#5s ,
                bBusy=> ,
                bError=> ,
                nErrId=> ,
                hFile=>hFile );
 
FB_FilePuts(
                sNetId:='' ,
                hFile:= hFile,
                sLine:=CSVtest,
                bExecute:=FILEWRITE ,
                tTimeout:= ,
                bBusy=> ,
                bError=> ,
                nErrId=> );

In die testfile4.txt steht jetzt ‘32767‘, aber ich woll die ganze array rein schreiben.(bzw. ‘32767‘32767‘32767‘32767‘32767‘32767‘32767‘32767‘10‘100‘1000‘
Wie kann ich das am besten machen.
 
Habe es jetzt so gemacht
Code:
CSVStringtest[1]:= STRING_TO_CSVFIELD(WORD_TO_STRING(Data3),TRUE);
CSVStringtest[2]:= STRING_TO_CSVFIELD(WORD_TO_STRING(Data4),TRUE);
CSVStringtest[3]:= STRING_TO_CSVFIELD(WORD_TO_STRING(Data5),TRUE);
CSVStringtest[4]:= STRING_TO_CSVFIELD(WORD_TO_STRING(Data6),TRUE);
CSVStringtest[5]:= STRING_TO_CSVFIELD(WORD_TO_STRING(Data7),TRUE);
CSVStringtest[6]:= STRING_TO_CSVFIELD(WORD_TO_STRING(Data8),TRUE);


FB_FileOpen(
	sNetId:='' ,
	sPathName:= 'Hard Disk2\logs\testfile1.xls' ,
	nMode:=FOPEN_MODEWRITE OR FOPEN_MODETEXT,
	ePath:=PATH_GENERIC ,
	bExecute:= fileopen,
	tTimeout:=t#5s ,
	bBusy=> ,
	bError=> ,
	nErrId=> ,
	hFile=>hFile );


R_TRIG1(CLK:=filewrite , Q=> );


FB_FileWrite(
	sNetId:= '',
	hFile:=hFile ,
	pWriteBuff:= ADR (CSVStringtest) ,
	cbWriteLen:=SIZEOF (CSVStringtest) ,
	bExecute:=R_TRIG1.Q ,
	tTimeout:=t#5s ,
	bBusy=> ,
	bError=> ,
	nErrId=> ,
	cbWrite=> );

Dann bekomme ich 100"1000"1500"2000"2500"3000 in Excel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich würde das mit einer State Machine machen.
Etwa so:

Pointer auf zu schreibende Startvariable

1. File öffnen
2. Zeile zusammenbauen
3. Zeile in Datei schreiben
4. Abfrage ob alle Zeilen geschrieben wurde, wenn nein Pointer erhöhen und zurück zu 2., wenn ja nach 5.
5. File schliessen


Gruß
 
Hi

Ist bei mir schon länger her, als ich csv Dateien speichern musste, aber fehlt da nicht noch ein File Close oder so was?? Sonst beendet es das File nicht richtig.

Gruss blimaa
 
Habe meine code von meine letzten post erweitert. Und bekomme auch in die File was ich bekommen wöll. Aber die code sieht nicht schon aus.
Ich werde ihm noch umbauen nach ein state machine.
Es geht ohne dass ich die file schließe, aber werde noch nachsehen was ob ich die File Close brauchen muss.

Danke
 
Zurück
Oben