Variablenwerte in eine Datei schreiben

Chrissss

Level-1
Beiträge
1
Reaktionspunkte
0
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ß
 
Du musst die Bausteine nacheinander aufrufen und das busy Signal auswerten
 
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
 
Für die Nutzung dieser Website sind Cookies erforderlich. Du musst diese akzeptieren, um die Website weiter nutzen zu können. Erfahre mehr…