Variablenwerte in eine Datei schreiben

Chrissss

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

ich habe ein Problem mit dem Speichern von Variablenwerten in einer Datei.
Hierzu habe ich wie in der Beckhoff online Doku beschrieben die 3 Funktionsbausteine Fileopen, Filewrite und FileClose.
Die Datei wird bei Ausführung angelegt und geöffnet, beim Schreiben gibt es die ADS Fehlermeldung 1795 (invalid index offset).
Eine Ausschnitt aus dem entsprechenden Programmbaustein habe ich angefügt:

current_open(
sNetId:= '',
sPathName:= 'c:\current.txt',
nMode:= file_opencreate,
ePath:= path_generic,
bExecute:= aufzeichnen,
tTimeout:= T#3S,
bBusy=> ,
bError=> berror1,
nErrId=> nerror1,
hFile=> hfile1);

Current_write(
sNetId:= '',
hFile:= hfile1,
pWriteBuff:= ADR(currentrec),
cbWriteLen:= SIZEOF(currentrec),
bExecute:= aufzeichnen,
tTimeout:= T#3S,
bBusy=> ,
bError=> berror1w,
nErrId=> nerror1w,
cbWrite=> sbwritew1);

Current_close(
sNetId:= '',
hFile:= hfile1,
bExecute:= aufzeichnen,
tTimeout:= T#3S,
bBusy=> ,
bError=>herrorc1 ,
nErrId=> nerroridc1);

Woran könnte das liegen? Hat jemand ggf. ein funktionierendes Beispiel für das Anlegen einer Datei?

Danke + Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich realisiere das gern in einer Case Anweisung als Schrittkette programmiert.
Code:
CASE MyVariable OF
  0:  //Warten auf Start Schreiben, wenn Start dann MyVariable auf 1 setzen
  1:  //File öffnen und gegebenenfalls erstellen, wenn FileOpen.Done dann MyVariable auf 2 setzen ansonsten warten bzw. Fehler Routine
  2:  //Daten schreiben, wenn FileWrite.Done dann MyVariable auf 3 setzen ansonsten warten bzw. Fehler Routine
 3:  //File schliessen, wenn FileClose.Done dann MyVariable auf 0 setzen ansonsten warten bzw. Fehler Routine
END_CASE
Scheint so als ob die FBs bei Beckhoff keinen Done Ausgang haben, dann vielleicht "neg. Flanke bBusy und kein bError" als Bedingung für nächsten Schritt.
 
Hi Chris,
damit kannst Du einen String wegschreiben




VAR_OUTPUT
Busy : BOOL;
END_VAR
VAR
sLogDaten: STRING(255);
hFile: UINT;
zLog: UINT := 0;
bOpenFile: BOOL;
bWriteData: BOOL;

fbOpenLogFile: FB_FileOpen;
fbWriteLogFile: FB_FileWrite;
fbCloseLogFile: FB_FileClose;
END_VAR

#########################################


IF Write THEN
bOpenFile := TRUE;
bWriteData := TRUE;
END_IF
CASE zLog OF
0:
IF bOpenFile THEN
zLog := 10;
bOpenFile := FALSE;
END_IF
10: (* Open file *)
fbOpenLogFile( sNetId:= '',
sPathName:= sLogFilename,
nMode:= FOPEN_MODEAPPEND OR FOPEN_MODEPLUS OR FOPEN_MODETEXT,
ePath:= PATH_GENERIC,
bExecute:= TRUE,
tTimeout:= t#2s,
bBusy=> ,
bError=> ,
nErrId=> ,
hFile=> hFile);
IF NOT fbOpenLogFile.bBusy THEN
fbOpenLogFile(bExecute:= FALSE);
zLog := 20;
END_IF
20: (* Write data *)
IF bWriteData THEN
fbWriteLogFile( sNetId:= '',
hFile:= hFile,
pWriteBuff:= ADR(DATA),
cbWriteLen:= LEN(DATA),
bExecute:= TRUE,
tTimeout:= t#3s,
bBusy=> ,
bError=> ,
nErrId=> ,
cbWrite=> );
IF NOT fbWriteLogFile.bBusy THEN
bWriteData := FALSE;
fbWriteLogFile(bExecute := FALSE);
END_IF
ELSE
zLog := 30;
END_IF
30: (* Close file *)
fbCloseLogFile( sNetId:= '',
hFile:= hFile,
bExecute:= TRUE,
tTimeout:= t#3s,
bBusy=> ,
bError=> ,
nErrId=> );
IF NOT fbCloseLogFile.bBusy THEN
fbCloseLogFile(bExecute := FALSE);
zLog := 0;
END_IF
END_CASE
Busy := fbCloseLogFile.bBusy;



Gruß Markus
 
Zurück
Oben