(*____________________________________________________________________________*)
0:
IF StartTrig.Q = TRUE THEN
Error := FALSE;
Busy := TRUE;
ExecuteTrig(CLK := FALSE);
TonMaxRuntimetoErr(IN := FALSE, PT := T#20S);
ReadBackup := 2;
END_IF;
(*____________________________________________________________________________*)
2: (* Warten bis Ordner gelistet wird - Durch Öffnen ausprobieren *)
TonMaxRuntimetoErr(IN := TRUE, PT := T#20S); (* nach 20s fehler ausgeben *)
ExecuteTrig(CLK := TRUE);
VarExecute := FALSE;
IF ExecuteTrig.Q = TRUE THEN
VarExecute := TRUE;
END_IF;
DirOpen(
xExecute := VarExecute,
sDirName := '/media/pi/DATAMONSTER',
hDir => hDir);
IF DirOpen.xError = FALSE THEN
IF DirOpen.xBusy = FALSE THEN
IF DirOpen.xDone = TRUE THEN
DirOpen(
xExecute := FALSE,
sDirName := '/media/pi/DATAMONSTER',
hDir => );
ExecuteTrig(CLK := FALSE);
Index := 0;
ReadBackup := 5; (* Test inhalt auslesen *)
END_IF;
END_IF;
ELSE
DirOpen(
xExecute := FALSE,
sDirName := '/media/pi/DATAMONSTER',
hDir => );
ExecuteTrig(CLK := FALSE);
(* So lange durchlaufen bis es gefunden wurde *)
IF TonMaxRuntimetoErr.Q = TRUE THEN
ReadBackup := 1000;
END_IF;
END_IF;
(*____________________________________________________________________________*)
5: (* Inhalt vom Ordner auflisten (max. 10 Dateien) *)
ExecuteTrig(CLK := TRUE);
VarExecute := FALSE;
IF ExecuteTrig.Q = TRUE THEN
VarExecute := TRUE;
END_IF;
DirList(
xExecute := VarExecute,
hDir := hDir,
deDirEntry => deDirEntry);
IF DirList.xError = FALSE THEN
IF DirList.xBusy = FALSE THEN
IF DirList.xDone = TRUE THEN
ListOfFile[Index] := DirList.deDirEntry; (* ganze Struktur übergeben *)
ListOfFileName[Index] := DirList.deDirEntry.sEntry; (* nur Bezeichnung vom Element übergeben *)
DirList(
xExecute := FALSE,
hDir := hDir,
deDirEntry => );
ExecuteTrig(CLK := FALSE);
IF Index < 9 THEN
Index := Index +1; (* Index raufzählen *)
ELSE
ReadBackup := 8; (* Dir Schließen *)
END_IF;
END_IF;
END_IF;
ELSE
ExecuteTrig(CLK := FALSE);
IF DirList.eError = File.ERROR.NO_MORE_ENTRIES THEN (* Fehler der Kein Fehler ist abfangen *)
ReadBackup := 8; (* Dir Schließen *) (* alle Daten ausgelesen also weiter im text *)
ELSE
ReadBackup := 1000; (* Fehler *)
END_IF;
DirList(
xExecute := FALSE,
hDir := hDir,
deDirEntry => );
END_IF;
(*____________________________________________________________________________*)
8: (* Ordner schließen *)
ExecuteTrig(CLK := TRUE);
VarExecute := FALSE;
IF ExecuteTrig.Q = TRUE THEN
VarExecute := TRUE;
END_IF;
DirClose(
xExecute := VarExecute,
hDir := hDir);
IF DirClose.xError = FALSE THEN
IF DirClose.xBusy = FALSE THEN
IF DirClose.xDone = TRUE THEN
DirClose(
xExecute := FALSE,
hDir := hDir);
ExecuteTrig(CLK := FALSE);
ReadBackup := 10; (* Hier geht irgendwas weiter *)
END_IF;
END_IF;
ELSE
DirClose(
xExecute := FALSE,
hDir := hDir);
ExecuteTrig(CLK := FALSE);
ReadBackup := 1000; (* Fehler *)
END_IF;