Anfängerfrag Dateien lesen/schreiben

kunse

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

habe ein Problem und kann es leider nur umschreiben, da der Herr der das Problem tatsächlich hat sich zu fein ist, selbst zu fragen (Toll Ein Anderer Machts), mir aber nach drei Wochen langsam der Geduldsfaden reißt ;-D

Haben einen FB programmiert, der ein String aus einem Eingabefenster in eine Textdatei scheibt, aktiviert durch einen Button. Orientiert haben wir uns an dem Beispiel des Copy-FB aus dem Beckhoff Infosys.
Setzen wir einen Breakpoint und gehen alles Step-by-Step durch, so klappt dies auch, im Normalbetrieb jedoch wird soweit ich weiß entweder nichts gemacht oder der Text zig mal eingetragen.

Mehr weiß ich leider auch nicht, hoffe ihr könnt uns trotzdem helfen!

MfG
 
Kannst du euren Code bzw. euer Programm posten?? Dann können wir den anschauen und euch sagen, was ihr falsch macht.
Jetzt aus dem Stehgreif zu erahnen, was da falsch läuft, ist eher schwierig.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
FUNCTION_BLOCK FBInhaltInDatei
VAR_INPUT
srcNetId :T_AmsNetId;
srcFileName :T_MaxString;
bExecute :BOOL;
tAdsTimeOut :TIME;
END_VAR
VAR_OUTPUT
bBusy :BOOL;
bError :BOOL;
nErrId :UDINT;
END_VAR
VAR
fbFileOpen :FB_FileOpen;
fbFilePuts :FB_FilePuts;
fbFileClose :FB_FileClose;
hsrcFile :UINT;
step :INT;
END_VAR



IF NOT bBusy THEN
bBusy:=TRUE;
bError:=FALSE;
nErrId:=0;
hSrcFile:=0;
step:=1;
END_IF

CASE step OF
0:
;

1: fbFileOpen(bExecute:=FALSE); (*Datei öffnen*)
fbFileOpen( sNetID:='',
sPathName:='d:\Test.txt' ,
nMode:=FOPEN_MODEAPPEND OR FOPEN_MODETEXT,
ePath := PATH_GENERIC,
tTimeout := t#20s,
bExecute := TRUE);
step:=step + 1;
fbFileOpen(bExecute := FALSE);

2:
IF (NOT fbFileOpen.bBusy) THEN

IF fbFileOpen.bError THEN
nErrId:=fbFileOpen.nErrId;
bError:=TRUE;

ELSE
hSrcFile := fbFileOpen.hFile;
step:=step + 1;

END_IF
END_IF

3:
fbFilePuts(bExecute := FALSE); (*Inhalt holen*)
fbFilePuts( sNetId:= '',
hFile:=hSrcFile,
sLine := g_sInhalt,
bExecute := TRUE,
tTimeout := t#20s);
step:=step + 1;
fbFilePuts(bExecute := FALSE);
4: IF (NOT fbFilePuts.bBusy) THEN
IF fbFilePuts.bError THEN
nErrId:=fbFilePuts.nErrId;
bError:=TRUE;
ELSE
step:=step + 1;
END_IF
END_IF
5: fbFileClose(bExecute:=FALSE);
fbFileClose( sNetId:= '',
hFile:=hSrcFile,
bExecute := TRUE,
tTimeout := t#20s
);
fbFileClose(bExecute := FALSE);
bBusy:=FALSE;
step:=0;
g_bSpeichern:=FALSE;

END_CASE
 
Bevor du in deinen Steps 2 und 4 den Wert der bBusy Variablen auslesen kannst, musst du den Baustein aktualisieren. Du musst fbFileOpen() bzw. fbFilePuts() einbauen.
 
Hoffe, der Beitrag erweckt nochmal kurz zum Leben ;-D
Gibt es eine Möglichkeit, nach einem Eintrag einen Zeilenumbruch in der Textdatei zu erzwingen? Sollte dann folgendermaßen aussehen:

Eintrag 1
Eintrag 2
.
.
.
Eintrag n

Mfg Kunse
 
Haben nun das Problem, dass der Speichervorgang recht lange dauert. Wenn man nicht mehrere Sekunden wartet, werden nicht alle Einträge gespeichert. Wer eine Idee, woran das liegen könnte? Haben in unserem Testprogramm nur den fb, muss also dara liegen

Mfg
 
Erst denken, dann fragen ;-D

Haben vergessen abzufragen, ob das Schließen der Datei schon beendet war.
 
Zurück
Oben