Ich hab etwas, womit ich eine Sollwert-Struktur auf einen USB-Stick speichern / von einem USB-Stick lesen kann.
Ich weiß nicht ob du damit was anfangen kannst, müsste aber deine Anforderungen abdecken:
// Fehler rücksetzen
//******************
IF (Fehler AND Quit_Fehler) THEN
Fehler:= FALSE;
END_IF
//Schrittschaltwerk Datentransfer
//********************************
CASE StepNr OF
// Action 0 : Stillstand
// *********************
0:
//Bei Fehler = Befehle rücksetzen
IF (Fehler) THEN
Schreiben:= 0;
Lesen:= 0;
END_IF
// Daten schreiben oder lesen
IF (Lesen OR Schreiben) AND (NOT Fehler) THEN
StepNr:= 1;
END_IF
// Action 1 : Dateiüberprüfung
// ***************************
1:
FOpen.enable:= 1;
FOpen.pDevice:= ADR('USB_STICK');
FOpen.pFile:= ADR('Rezept'); //Name der Datei
FOpen.mode:= 2; // Modus schreiben + lesen
FOpen();
IdentNr:= FOpen.ident;
// Datei existiert nicht
IF (FOpen.status= 20708) THEN
StepNr:= 2;
// Daten schreiben
ELSIF (FOpen.status= 0) AND (Schreiben) THEN
StepNr:= 3;
// Daten lesen
ELSIF (FOpen.status= 0) AND (Lesen) THEN
StepNr:= 4;
// Fehler
ELSIF (FOpen.status <> 65535) THEN
Fehler:= TRUE;
StepNr:= 0;
IF (FOpen.status= 20799) THEN
Error:= FileIoGetSysError();
END_IF
END_IF
// Action 2 : Datei erzeugen
// =========================
2:
FCreate.enable:= 1;
FCreate.pDevice:= ADR('USB_STICK');
FCreate.pFile:= ADR('Rezept');
FCreate();
IdentNr:= FCreate.ident;
// Daten schreiben
IF (FCreate.status= 0) THEN
StepNr:= 3;
//Fehler
ELSIF (FCreate.status <> 65535) THEN
Fehler:= TRUE;
StepNr:= 0;
IF (FCreate.status= 20799) THEN
Error:= FileIoGetSysError();
END_IF
END_IF
// Action 3 : Datei schreiben
// ==========================
3:
FWrite.enable:= 1;
FWrite.ident:= IdentNr;
FWrite.offset:= 0;
FWrite.pSrc:= ADR(Rezept); //Strukur, die geschrieben werden soll
FWrite.len:= SIZEOF(Rezept);
FWrite();
// Daten schreiben O.K.
IF (FWrite.status= 0) THEN
Schreiben:= FALSE;
StepNr:= 5;
// Fehler
ELSIF (FWrite.status <> 65535) THEN
Fehler:= TRUE;
StepNr:= 0;
IF (FWrite.status= 20799) THEN
Error:= FileIoGetSysError();
END_IF
END_IF
// Action 4 : Datei lesen
// ======================
4:
FRead.enable:= 1;
FRead.ident:= IdentNr;
FRead.offset:= 0;
FRead.pDest:= ADR(Rezept);
FRead.len:= SIZEOF(Rezept);
FRead();
// Daten lesen O.K.
IF (FRead.status= 0) THEN
Lesen:= FALSE;
StepNr:= 5;
// Fehler
ELSIF (FRead.status <> 65535) THEN
Fehler:= TRUE;
StepNr:= 0;
IF (FRead.status= 20799) THEN
Error:= FileIoGetSysError();
END_IF
END_IF
// Action 5 : Datei schließen
// ==========================
5:
FClose.enable:= 1;
FClose.ident:= IdentNr;
FClose();
// Datei geschlossen O.K.
IF (FClose.status= 0) THEN
StepNr:= 0;
// Fehler
ELSIF (FClose.status <> 65535) THEN
Fehler:= TRUE;
StepNr:= 0;
IF (FClose.status= 20799) THEN
Error:= FileIoGetSysError();
END_IF
END_IF
END_CASE
Wenn du mehr Infos brauchst, einfach eine PN