CASE STATE OF
0:
IF bOPEN THEN
hFile := 0;
allWritten := FALSE;
fbFileOpen( bExecute := FALSE );
fbFileOpen( sNetId := '', sPathName := fPath, nMode := FOPEN_MODEAPPEND OR FOPEN_MODEPLUS,
ePath := PATH_GENERIC, bExecute := TRUE );
state := 1;
END_IF
1:
fbFileOpen( bExecute := FALSE, bError => bError, nErrID => nErrID, hFile => hFile );
IF NOT fbFileOpen.bBusy THEN
IF NOT fbFileOpen.bError THEN
state := 2;
ELSE
state := 100;
END_IF
END_IF
2:
IF bHead THEN
fbFileWrite(bExecute:=FALSE);
fbFileWrite(sNetID := '',pWriteBuff := ADR(HEADER),cbWriteLen:= SIZEOF(HEADER),bExecute := TRUE,hFile := hFile );
state := 3;
ELSE
fbFileWrite(bExecute:=FALSE);
fbFileWrite(sNetID := '',pWriteBuff := ADR(DATA),cbWriteLen:= SIZEOF(DATA),bExecute := TRUE,hFile := hFile );
state := 3;
END_IF
3:
fbFileWrite( bExecute := FALSE, bError => bError, nErrID => nErrID );
IF NOT fbFileWrite.bBusy THEN
IF NOT fbFileWrite.bError THEN
state := 10;
END_IF
END_IF
10:
fbFileClose( bExecute := FALSE );
fbFileClose( sNetId := '', hFile := hFile, bExecute := TRUE );
state := 11;
11:
fbFileClose( bExecute := FALSE, bError => bError, nErrID => nErrID );
IF ( NOT fbFileClose.bBusy ) THEN
hFile := 0;
state := 100;
END_IF
100:
IF ( hFile <> 0 ) THEN
state := 10;
ELSE
bBusy := FALSE;
state := 0;
allWritten := TRUE;
END_IF
END_CASE