-> Hier kostenlos registrieren
Hallo,
ich habe seit geraumer Zeit ein Problem mit dem FileIO unter Twincat 2. Ich komme trotz intensiver Suche nicht weiter und brauche dringend eure Hilfe.
Ich möchte unter Twincat2 Strings in eine Datei schreiben. Das sollte ja eigentlich kein Problem darstellen: ich verwende FileOpen, FileWrite und FileClose.
Nun zeigen sich aber zwei Fehler:
Fehler 1: Es ist- wieso auch immer- nur jedes zweite Schreiben erfolgreich, die anderen Schreibzugriffe laufen ins Leere. Das kann ich zwar umgehen indem ich jedes zweite mal einen Dummystring in die Datei schreibe, der dort nicht ankommt, schön ist jedoch was anderes.
Was mir aber wirklich Kummer bereitet ist der zweite Fehler:
Fehler 2:
Nach einiger Zeit funktioniert die FileWrite-Funktion nicht mehr, dh. die Funktion wird mit einem Fehler beendet. Der Errorcode ist 0x703 (invalid index offset). Das Problem hierbei ist, dass mein Funktionsblock etwa 700 mal ohne Probleme ausgeführt ist, und dann ohne sichtbaren Grund einfach nicht mehr funktioniert. Auch wenn ich die PLC resette und neu starte funktioniert das Schreiben einer Datei nicht, erst wenn ich den SystemManager neu starte funktioniert der Funktionsblock wieder- aber wieder eben nur ein paar taused mal.
Ich bin mit meinem Latein am Ende. Habt ihr irgendwelche Ideen? Ich würde auch alternative FileIO-Funktionen benutzen, oder das ganze FileHandling auslagern, hauptsache ich bekomme diesen Fehler los -.-
Im Folgenden mein Funktionsblock:
[TABLE="width: 90%"]
[TR]
[TD]Bei Step 2 tritt der Fehler auf.
Ich wäre für jede Hilfe sehr dankbar,
Grüße, Tobias
[/TD]
[TD][/TD]
[/TR]
[TR]
[TD][/TD]
[TD][/TD]
[/TR]
[/TABLE]
ich habe seit geraumer Zeit ein Problem mit dem FileIO unter Twincat 2. Ich komme trotz intensiver Suche nicht weiter und brauche dringend eure Hilfe.
Ich möchte unter Twincat2 Strings in eine Datei schreiben. Das sollte ja eigentlich kein Problem darstellen: ich verwende FileOpen, FileWrite und FileClose.
Nun zeigen sich aber zwei Fehler:
Fehler 1: Es ist- wieso auch immer- nur jedes zweite Schreiben erfolgreich, die anderen Schreibzugriffe laufen ins Leere. Das kann ich zwar umgehen indem ich jedes zweite mal einen Dummystring in die Datei schreibe, der dort nicht ankommt, schön ist jedoch was anderes.
Was mir aber wirklich Kummer bereitet ist der zweite Fehler:
Fehler 2:
Nach einiger Zeit funktioniert die FileWrite-Funktion nicht mehr, dh. die Funktion wird mit einem Fehler beendet. Der Errorcode ist 0x703 (invalid index offset). Das Problem hierbei ist, dass mein Funktionsblock etwa 700 mal ohne Probleme ausgeführt ist, und dann ohne sichtbaren Grund einfach nicht mehr funktioniert. Auch wenn ich die PLC resette und neu starte funktioniert das Schreiben einer Datei nicht, erst wenn ich den SystemManager neu starte funktioniert der Funktionsblock wieder- aber wieder eben nur ein paar taused mal.
Ich bin mit meinem Latein am Ende. Habt ihr irgendwelche Ideen? Ich würde auch alternative FileIO-Funktionen benutzen, oder das ganze FileHandling auslagern, hauptsache ich bekomme diesen Fehler los -.-
Im Folgenden mein Funktionsblock:
Code:
CASE nState OF
0: (* idle & init *)
IF(bExecute = TRUE) THEN
bExecute := FALSE;
bBusy := TRUE;
bError := FALSE;
nErrId := 0;
nErrState := 0;
hFile := 0;
bAgain := TRUE;
(* create and open output file *)
fbFileOpen( sNetId := sNetId,
sPathName := sPathName,
nMode := FOPEN_MODEAPPEND OR FOPEN_MODETEXT,
bExecute := TRUE );
bBusy := TRUE;
nState := nState + 1;
END_IF
1: (* create and open output file *)
fbFileOpen( bExecute := FALSE );
IF NOT fbFileOpen.bBusy THEN
IF fbFileOpen.bError THEN
nErrId := fbFileOpen.nErrId;
bError := TRUE;
nState := 100;
ELSE
hFile := fbFileOpen.hFile;
aBuffer := MAXSTRING_TO_BYTEARR(sInputString);
(* write to file *)
fbFileWrite(sNetId := sNetId,
hFile := hFile,
pWriteBuff := ADR(aBuffer),
cbWriteLen := LEN(sInputString),
bExecute := TRUE);
nState := nState + 1;
END_IF
END_IF
2: (* write to file *)
fbFileWrite( bExecute := FALSE);
IF ( NOT fbFileWrite.bBusy ) THEN
IF ( fbFileWrite.bError ) THEN
nErrId := fbFileWrite.nErrId;
bError := TRUE;
nState := 100;
ELSE
fbFileClose( sNetId:=sNetId,
hFile:=hFile,
bExecute:=TRUE);
nState := nState + 1;
END_IF
END_IF
3:(* close output file *)
fbFileClose( bExecute := FALSE );
IF ( NOT fbFileClose.bBusy ) THEN
IF ( fbFileClose.bError ) THEN
nErrId := fbFileClose.nErrId;
bError := TRUE;
nState := 0;
bBusy := FALSE;
ELSIF(bAgain)THEN
hFile := 0;
bAgain := FALSE;
sInputString := '___';
(* create and open output file *)
fbFileOpen( sNetId := sNetId,
sPathName := sPathName,
nMode := FOPEN_MODEAPPEND OR FOPEN_MODETEXT,
bExecute := TRUE );
nState := 1;
ELSE
hFile := 0;
nState := 0;
bBusy := FALSE;
END_IF
END_IF
100: (* error *)
IF(hFile <> 0)THEN
fbFileClose( sNetId:=sNetId,
hFile:=hFile,
bExecute:=TRUE);
nState := 3;
bAgain := FALSE;
ELSE
nState := 0;
bBusy := FALSE;
END_IF
END_CASE
[TABLE="width: 90%"]
[TR]
[TD]Bei Step 2 tritt der Fehler auf.
Ich wäre für jede Hilfe sehr dankbar,
Grüße, Tobias
[/TD]
[TD][/TD]
[/TR]
[TR]
[TD][/TD]
[TD][/TD]
[/TR]
[/TABLE]
Zuletzt bearbeitet: