-> Hier kostenlos registrieren
Hallo alle miteinander,
ich glaube, mein Problem wird für euch ein klacks sein- und ihr werdet mir schnell helfen können:
Ich habe (versucht) mir einen Baustein zu schreiben, in dem ich die Kommandos FB_Fileopen, FileWrite und FileClose automatisiert ablaufen lasse.
So weit so gut- ich kann mit die drei Bausteine umgehen- wenn ich sie "händisch hintereinander antriggere tun sie genau was sie sollen- nur in meiner Case Anweisung tun Sie das leider nur beim ersten Durchlauf nachdem ich die Konfiguration geladen habe- beim zweiten bleib ich beim case 10- den File Open stecken- der wird nicht ausgeführt- geht auch dann nicht auf busy.
Hier mein Code:
Ich bedank mich schonmal für eure Hilfe
Und ich würd mich auch freuen- wenn ich einen Input bekommen würd, was man da noch verbessern könnt... steh erst am Anfang meiner Programmierkarriere Also auch dafür danke
ich glaube, mein Problem wird für euch ein klacks sein- und ihr werdet mir schnell helfen können:
Ich habe (versucht) mir einen Baustein zu schreiben, in dem ich die Kommandos FB_Fileopen, FileWrite und FileClose automatisiert ablaufen lasse.
So weit so gut- ich kann mit die drei Bausteine umgehen- wenn ich sie "händisch hintereinander antriggere tun sie genau was sie sollen- nur in meiner Case Anweisung tun Sie das leider nur beim ersten Durchlauf nachdem ich die Konfiguration geladen habe- beim zweiten bleib ich beim case 10- den File Open stecken- der wird nicht ausgeführt- geht auch dann nicht auf busy.
Hier mein Code:
Code:
CASE uiStpLogger OF 0: //Wait for Trigger
IF bWriteData THEN
bWritingDone := FALSE;
uiStpLogger := 10;
END_IF
10: // create or open File
//fopen.bExecute := TRUE;
fOpen(
sNetId:= ,
sPathName:= sPathname,
nMode:= FOPEN_MODEAPPEND OR FOPEN_MODETEXT,
ePath:= ,
bExecute:= TRUE,
tTimeout:= tTimeout,
bBusy=> ob,
bError=> ob1,
nErrId=> ner,
hFile=> hFile);
fOBusy(CLK:= fopen.bBusy, Q=> );
IF fobusy.Q THEN
fopen.bExecute:=FALSE;
uiStpLogger := 20;
END_IF
IF fopen.bError =TRUE THEN
uiStpLogger := 100;
END_IF
20: //write to file
fwrite.bExecute := TRUE;
fWrite(
sNetId:= ,
hFile:= hFile,
pWriteBuff:= ADR(sStringtoWrite),
cbWriteLen:= INT_TO_UDINT(len(sStringtoWrite)),
bExecute:= ,
tTimeout:= tTimeout,
bBusy=> ,
bError=> ,
nErrId=> ,
cbWrite=> );
fWBusy(CLK:= fwrite.bBusy, Q=> );
IF fwbusy.Q THEN
fwrite.bExecute := FALSE;
uiStpLogger := 30;
END_IF
IF fwrite.bError = TRUE THEN
uiStpLogger := 100;
END_IF
30: //Close File
fclose.bExecute := TRUE;
fClose(
sNetId:= ,
hFile:= hfile,
bExecute:= TRUE,
tTimeout:= tTimeout,
bBusy=> ,
bError=> ,
nErrId=> );
fCBusy(CLK:= fclose.bBusy, Q=> );
IF fcbusy.Q THEN
fclose.bExecute := FALSE;
bWritingDone := TRUE;
bWriteData := FALSE;
uiStpLogger := 0;
END_IF
IF fclose.bError =TRUE THEN
uiStpLogger := 100;
END_IF
100: //Error Handling
IF fopen.bError THEN //Error at Open File
bError := TRUE;
udiErrorId := fopen.nErrId;
ELSE
IF fwrite.bError THEN //Error at Write File
berror := TRUE;
udiErrorId:= fwrite.nErrId;
ELSE
IF fclose.bError THEN //Error at Close File
berror := TRUE;
udiErrorid := fclose.nErrId;
END_IF
END_IF
END_IF
END_CASE
Ich bedank mich schonmal für eure Hilfe
Und ich würd mich auch freuen- wenn ich einen Input bekommen würd, was man da noch verbessern könnt... steh erst am Anfang meiner Programmierkarriere Also auch dafür danke
Zuletzt bearbeitet: