-> Hier kostenlos registrieren
Hallo erstmal und Danke das du mir helfen möchtest.
Ich möchte über die CAA file Lib eine Csv/txt datei erstellen wo diese 4 Sensorwerte hinterlegt werden.
Ich probiere es schon eine gefühlte Ewigkeit aus.
Das Programm möchte einfach nicht mir diese Datei im Laufwerk F erstellen, bzw. auch nicht überschreiben und verwenden. Ich check das Problem einfach nicht. Hab das Gefühl die Lib wird in der Bib einfach nicht mehr unterstützt.
Das Programm hat sehr Ähnlichkeit mit einem Beispiel snippet aus dem Netz.
Bin außerdem neu was Codesys anbelangt.
PROGRAM POU
VAR
Flussmenge:STRING;
Licht:STRING;
Temp1:STRING;
Temp2:STRING;
bWriteData:BOOL:=FALSE; //trigger to write log-data
uiStpDataLogger:UDINT:=0; //sequencer
//Dateiname und Pfad
sFileName: CAA.FILENAME:= 'F:/TestFile.csv'; // Dateiname
hFile: CAA.HANDLE;
measuredData: ARRAY [1..4] OF logData := [(index:='Flussmenge',data:='Flussmenge'),(index:='Lichtmenge',data:='Licht'),(index:='Temperatur 1',data:='Temp1'),(index:='Temperatur 2',data:='Temp2')];
sStringToWrite: STRING:='no data';
writeIndex:UINT:=1;
CRLF:STRING(2):= '$R$N';
LF:STRING(1):= '$N';
fopen : FILE.Open;
fwrite : file.Write;
fclose : file.Close;
END_VAR
Flussmenge := REAL_TO_STRING(Gvl.rAI0Fluss);
Licht := REAL_TO_STRING(Gvl.rAI1Licht);
Temp1 := REAL_TO_STRING(Gvl.rAI2Temp);
Temp2 := REAL_TO_STRING(Gvl.rAI3Temp);
CASE uiStpDataLogger OF
//TRIGGER fürs Daten schreiben
(*wait for trigger*)
0: IF bWriteData THEN
bWriteData:=FALSE;
uiStpDataLogger:=10;
END_IF
10: (* Datei Öffnung*)
fopen.sFileName:=sFileName;
fopen.eFileMode:=File.MODE.MRDWR;
fopen.xExclusive:=TRUE;
fopen( xExecute:=TRUE);
IF fopen.xDone THEN
hFile:=fopen.hFile;
sStringToWrite:='';
writeIndex:=1;
uiStpDataLogger:=20;
END_IF
20: (*Daten zusammenführen*)
sStringToWrite:=CONCAT(measuredData[writeIndex].index,',');
sStringToWrite:=CONCAT(sStringToWrite,measuredData[writeIndex].data);
sStringToWrite:=CONCAT(sStringToWrite,CRLF);
//sStringToWrite:=CONCAT(sStringToWrite,LF);
uiStpDataLogger:=30;
30: (* Schreiben in die Datei *)
fwrite.hFile:=hFile;
fwrite.pBuffer:=ADR(sStringToWrite);
fwrite.szSize:=LEN(sStringToWrite);
fwrite.udiTimeOut:=100000; //Timeout
fwrite( xExecute:=TRUE);
IF fwrite.xDone THEN
fwrite( xExecute:=FALSE);
writeIndex:=writeIndex+1;
IF writeIndex <= 4 THEN
uiStpDataLogger:=20;
sStringToWrite:='';
ELSE
uiStpDataLogger:=40;
END_IF
END_IF
IF fwrite.xError THEN
//Error
uiStpDataLogger:=16#DEADBEEF;
END_IF
40: (* Datei Schließen *)
fclose.hFile:=hFile;
fclose( xExecute:=TRUE);
IF fclose.xDone THEN
fopen( xExecute:=FALSE);
fwrite( xExecute:=FALSE);
fclose( xExecute:=FALSE);
uiStpDataLogger:=0;
END_IF
IF fclose.xError THEN
//Error
uiStpDataLogger:=16#DEaaaaaa;
END_IF
16#DEADBEEF:
//ErrorHandling
;
END_CASE
Ich möchte über die CAA file Lib eine Csv/txt datei erstellen wo diese 4 Sensorwerte hinterlegt werden.
Ich probiere es schon eine gefühlte Ewigkeit aus.
Das Programm möchte einfach nicht mir diese Datei im Laufwerk F erstellen, bzw. auch nicht überschreiben und verwenden. Ich check das Problem einfach nicht. Hab das Gefühl die Lib wird in der Bib einfach nicht mehr unterstützt.
Das Programm hat sehr Ähnlichkeit mit einem Beispiel snippet aus dem Netz.
Bin außerdem neu was Codesys anbelangt.
PROGRAM POU
VAR
Flussmenge:STRING;
Licht:STRING;
Temp1:STRING;
Temp2:STRING;
bWriteData:BOOL:=FALSE; //trigger to write log-data
uiStpDataLogger:UDINT:=0; //sequencer
//Dateiname und Pfad
sFileName: CAA.FILENAME:= 'F:/TestFile.csv'; // Dateiname
hFile: CAA.HANDLE;
measuredData: ARRAY [1..4] OF logData := [(index:='Flussmenge',data:='Flussmenge'),(index:='Lichtmenge',data:='Licht'),(index:='Temperatur 1',data:='Temp1'),(index:='Temperatur 2',data:='Temp2')];
sStringToWrite: STRING:='no data';
writeIndex:UINT:=1;
CRLF:STRING(2):= '$R$N';
LF:STRING(1):= '$N';
fopen : FILE.Open;
fwrite : file.Write;
fclose : file.Close;
END_VAR
Flussmenge := REAL_TO_STRING(Gvl.rAI0Fluss);
Licht := REAL_TO_STRING(Gvl.rAI1Licht);
Temp1 := REAL_TO_STRING(Gvl.rAI2Temp);
Temp2 := REAL_TO_STRING(Gvl.rAI3Temp);
CASE uiStpDataLogger OF
//TRIGGER fürs Daten schreiben
(*wait for trigger*)
0: IF bWriteData THEN
bWriteData:=FALSE;
uiStpDataLogger:=10;
END_IF
10: (* Datei Öffnung*)
fopen.sFileName:=sFileName;
fopen.eFileMode:=File.MODE.MRDWR;
fopen.xExclusive:=TRUE;
fopen( xExecute:=TRUE);
IF fopen.xDone THEN
hFile:=fopen.hFile;
sStringToWrite:='';
writeIndex:=1;
uiStpDataLogger:=20;
END_IF
20: (*Daten zusammenführen*)
sStringToWrite:=CONCAT(measuredData[writeIndex].index,',');
sStringToWrite:=CONCAT(sStringToWrite,measuredData[writeIndex].data);
sStringToWrite:=CONCAT(sStringToWrite,CRLF);
//sStringToWrite:=CONCAT(sStringToWrite,LF);
uiStpDataLogger:=30;
30: (* Schreiben in die Datei *)
fwrite.hFile:=hFile;
fwrite.pBuffer:=ADR(sStringToWrite);
fwrite.szSize:=LEN(sStringToWrite);
fwrite.udiTimeOut:=100000; //Timeout
fwrite( xExecute:=TRUE);
IF fwrite.xDone THEN
fwrite( xExecute:=FALSE);
writeIndex:=writeIndex+1;
IF writeIndex <= 4 THEN
uiStpDataLogger:=20;
sStringToWrite:='';
ELSE
uiStpDataLogger:=40;
END_IF
END_IF
IF fwrite.xError THEN
//Error
uiStpDataLogger:=16#DEADBEEF;
END_IF
40: (* Datei Schließen *)
fclose.hFile:=hFile;
fclose( xExecute:=TRUE);
IF fclose.xDone THEN
fopen( xExecute:=FALSE);
fwrite( xExecute:=FALSE);
fclose( xExecute:=FALSE);
uiStpDataLogger:=0;
END_IF
IF fclose.xError THEN
//Error
uiStpDataLogger:=16#DEaaaaaa;
END_IF
16#DEADBEEF:
//ErrorHandling
;
END_CASE