-> Hier kostenlos registrieren
Hallo miteinander,
mit einem Pixtend V2-L (Raspberry) steuere ich meine Solaranlage. Die Regelparameter und ein paar Statistikdaten möchte ich in einer ini-Datei speichern. Dazu habe ich mir die Erweiterung IIoT Libraries SL gekauft. Das schreiben der ini-Datei schaut folgendermaßen aus:
CASE State OF
//0...7:
8:
GVL.INIEntry.sSection := 'Ertrag';
GVL.INIEntry.sKey := 'PreviousYear.W_PV';
GVL.INIEntry.sValue := REAL_TO_STRING(GVL_Retain.Ertrag.PreviousYear.W_PV);
GVL.iniEntryManager.DeleteEntry (strIniFileEntry := GVL.INIEntry);
IF GVL.iniEntryManager.AddEntry (strIniFileEntry := GVL.INIEntry) <> INI_UTIL.ERROR.NO_ERROR THEN
JMP Error;
END_IF;
State := 9;
9:
fbDelete(xExecute := TRUE, sFileName := GVL.iniFileName);
IF fbDelete.xDone OR (fbDelete.xError AND fbDelete.eError = FILE.ERROR.NOT_EXIST) THEN
fbDelete(xExecute:=FALSE);
iniWriter.sFileName := GVL.iniFileName;
iniWriter.paIniFileEntry := ADR (GVL.aIniFileEntry);
iniWriter.uiSizeIniFileEntry := GVL.iniMaxEntries;
iniWriter.psBuffer := ADR (GVL.iniBuffer);
iniWriter.udiBufferSize := GVL.iniBufferSize;
iniWriter.xExecute := TRUE;
State := 10;
END_IF
10:
iniWriter();
IF NOT iniWriter.xBusy THEN
IF iniWriter.xError THEN
//iniWriter.Close();
iniWriter.xExecute := FALSE;
//iniWriter.Close();
JMP Error;
END_IF
IF iniWriter.xDone THEN
State := 0;
xDone := TRUE;
//iniWriter.Close();
iniWriter.xExecute := FALSE;
//iniWriter.Close();
ND_IF
END_IF
State := 0;
END_CASE
Die Funktion iniWriter.Close() erzeugt folgende Fehlermeldung:
Mitteilung vom Gerät:
"runtime received SIGABRT - system may be in an inconsistent state
**** We recommend a reboot of the controller now! ****"
Dabei ist es egal, an welcher Stelle im Programm (vor oder nach iniWriter.xExecute := FALSE) die Close-Funktion ausgeführt wird.
Wenn ich nun meine Speicher-Funktion so wie oben (ohne Close) ausführe, funktioniert das ganze genau einmal. Wenn ich die Funktion ein weiteres Mal ausführe, wird keine Datei mehr erstellt. Erst nach einem Reset der Steuerung funktioniert das ganze wieder genau einmal. Auch wenn beim Ausführen keine ini-Datei erstellt wird, ist iniWriter.xError = False und iniWriter.xDone = True. Ich vermute, dass es daran liegt, dass die CLose-Funktion nicht ausgeführt wird.
Vielleicht hat irgendjemand noch eine Idee, was ich noch ausprobieren könnte?
mit einem Pixtend V2-L (Raspberry) steuere ich meine Solaranlage. Die Regelparameter und ein paar Statistikdaten möchte ich in einer ini-Datei speichern. Dazu habe ich mir die Erweiterung IIoT Libraries SL gekauft. Das schreiben der ini-Datei schaut folgendermaßen aus:
CASE State OF
//0...7:
8:
GVL.INIEntry.sSection := 'Ertrag';
GVL.INIEntry.sKey := 'PreviousYear.W_PV';
GVL.INIEntry.sValue := REAL_TO_STRING(GVL_Retain.Ertrag.PreviousYear.W_PV);
GVL.iniEntryManager.DeleteEntry (strIniFileEntry := GVL.INIEntry);
IF GVL.iniEntryManager.AddEntry (strIniFileEntry := GVL.INIEntry) <> INI_UTIL.ERROR.NO_ERROR THEN
JMP Error;
END_IF;
State := 9;
9:
fbDelete(xExecute := TRUE, sFileName := GVL.iniFileName);
IF fbDelete.xDone OR (fbDelete.xError AND fbDelete.eError = FILE.ERROR.NOT_EXIST) THEN
fbDelete(xExecute:=FALSE);
iniWriter.sFileName := GVL.iniFileName;
iniWriter.paIniFileEntry := ADR (GVL.aIniFileEntry);
iniWriter.uiSizeIniFileEntry := GVL.iniMaxEntries;
iniWriter.psBuffer := ADR (GVL.iniBuffer);
iniWriter.udiBufferSize := GVL.iniBufferSize;
iniWriter.xExecute := TRUE;
State := 10;
END_IF
10:
iniWriter();
IF NOT iniWriter.xBusy THEN
IF iniWriter.xError THEN
//iniWriter.Close();
iniWriter.xExecute := FALSE;
//iniWriter.Close();
JMP Error;
END_IF
IF iniWriter.xDone THEN
State := 0;
xDone := TRUE;
//iniWriter.Close();
iniWriter.xExecute := FALSE;
//iniWriter.Close();
ND_IF
END_IF
State := 0;
END_CASE
Die Funktion iniWriter.Close() erzeugt folgende Fehlermeldung:
Mitteilung vom Gerät:
"runtime received SIGABRT - system may be in an inconsistent state
**** We recommend a reboot of the controller now! ****"
Dabei ist es egal, an welcher Stelle im Programm (vor oder nach iniWriter.xExecute := FALSE) die Close-Funktion ausgeführt wird.
Wenn ich nun meine Speicher-Funktion so wie oben (ohne Close) ausführe, funktioniert das ganze genau einmal. Wenn ich die Funktion ein weiteres Mal ausführe, wird keine Datei mehr erstellt. Erst nach einem Reset der Steuerung funktioniert das ganze wieder genau einmal. Auch wenn beim Ausführen keine ini-Datei erstellt wird, ist iniWriter.xError = False und iniWriter.xDone = True. Ich vermute, dass es daran liegt, dass die CLose-Funktion nicht ausgeführt wird.
Vielleicht hat irgendjemand noch eine Idee, was ich noch ausprobieren könnte?