Bug in RecipeManCommands

PAHO

Level-2
Beiträge
33
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Servus zusammen,

kann es sein, dass sich bei größeren Rezepturen (weit über 5000 Variablen) RecipeManCommands "verschluckt"?
Gleich mal vorweg: ich verwende keine Visu - die Rezepte brauche ich zum speichern aktueller Betriebs- und Einstellparameter, welche ich auf einer Linux SL MC verwende.

Konkretes Beispiel (climatePrg.txtrecipe):
Code:
CLIMATE_PRG.tempController01.Perioden_Heizung[0].PeriodName:="Tag"
...
...
...
CLIMATE_PRG.tempController01.Perioden_Heizung[1].PeriodName:="Nacht"
...
...
...
CLIMATE_PRG.tempController01.Perioden_Heizung[2].PeriodName:="Aufstehen"
...
...
...

Zu Programmstart initialisiere ich all meine Instanzen, obiges Beispiel eben im CLIMATE_PRG den tempController01 (dieser ist ein FB aus meiner Library).
Danach lese ich all meine Rezeptdateien, wobei jedes PRG eine eigene Rezeptur-Datei verwendet:

Code:
dwRes[i]:=rmc.LoadFromAndWriteRecipe(
    RecipeDefinitionName:=recipes[i],
    RecipeName:=sRecipeName,
    FileName:=recipes[i]
);

dwRes liefert bei allen Rezepten ERR_OK. Variablen werden auch in die laufende Applikation geschrieben, allerdings nicht so wie ich mir das vorstelle.
Beim obigen Beispiel steht dann beim Array-Index 2 (CLIMATE_PRG.tempController01.Perioden_Heizung[2].PeriodName) der Wert vom Index 1 (Nacht). Array-Index 3 passt dann wieder und Array Index 4 hat dann z.B. den Wert vom Index 3.
Lade ich genau diese Datei direkt in die Rezeptur im Codesys Rezepturmanager und wähle "Rezeptur schreiben", werden alle Werte wie es sein soll geschrieben. Nur der Weg per RMC zeigt hier Probleme.

Ist das ein Bug bei längeren Listen, oder ein Fehler bei mir? Alle Rezept-Relevanten Aufrufe laufen in einem eigenen Task, jetzt gerade freilaufend. Hatte auch schon fixe Zyklen verwendet, aber das macht keinen Unterschied.

LG

PS: hier noch die Info, dass ich nicht die übliche Dateibezeichnung (recipename.dateiname.txtrecipe) verwende. Ich speichere jetzt mal alle 120 Sekunden alle Rezepte mit ReadAndSaveRecipeAs und die passen 100% zu den aktuellen Einstellungen. Somit stellt das Speichern kein Problem dar.
Am Bild unten sieht man die Aktuelle Spalte, welche tatsächlich die Datei "current" vom Dateisystem gelesen hat, aber eben mit anderen Werten. Im Rezept runtime und current sind die richtigen Werte hinterlegt, und so stehen sie auch in den Rezeptdateien.

dali_recipe.JPG
 
Zuletzt bearbeitet:
Kurzes Update: wenn ich komplett die Finger von RecipeManCommands lasse und die Einstellungen am Screenshot verwende, funktioniert es. Ich verliere aber komplett die Möglichkeit, manuell einzugreifen. Sinn dahinter ist es eigentlich, laufend alle Werte zu sichern sowie beim Kommando "Herunterfahren" des USV-Moduls gezielt nochmal alles zu sichern und sauber herunterzufahren.

Screenshot:
dali_recipe2.JPG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nachdem die Rezepturverwaltung für meinen Anwendungsfall nicht unbedingt sein muss, habe ich meine Applikation um den Persistence Manager erweitert und die Rezepturverwaltung deaktiviert. Der Persistence Manager funktioniert genauso wie er soll, sehr stabil und recht einfach.

Jetzt habe ich Programmteile aktualisiert und es sind neue Variablen dazu gekommen, daher ist die Reihenfolge der Einträge in der Datei unterschiedlich. Im SPS-Log wird mir kein Fehler angezeigt - alle Variablen geladen. Es sind allerdings überall die Default-Werte bei allen Instanzen hinterlegt und nicht die Werte aus der Variablendatei.

Ist es so, dass wenn sich das Programm im Bezug auf den Persistence-Manager ändert, die Variablendatei unbrauchbar wird?
 
Ich checke das nochmal. Meine Vorgehensweise war wie folgt:

- aktuelle Persistence Variablendatei per FTP auf meinen lokalen Rechner heruntergeladen
- neue Bootapplikation mit mehreren Persistence Variablen mit Codesys übertragen
- Variablendatei wieder per FTP hochgeladen
- Reset warm und dann start der Applikation

Keine Variable wurde aus der Datei in das Programm geschrieben, überall die Initialwerte. Wenn ich nun eine Variable ändere, schreibt Codesys natürlich die komplette Persistence Datei neu und es sind selbst in der Datei die Initalwerte (habe schreiben bei jeder Änderung ausgewählt im PersistenceManager).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denke du hast 2. Möglichkeiten
1. SPS stoppen - File austauschen SPS starten
2. den Persistkanal könnte man auch über IEC code stoppen - File austauschen - Kanal wieder aktivieren

Es hängt halt im Prinzip davon ab wie die Persistenz variablen konfiguriert sind ( zyklisch, bei Änderung usw) - double Buffering usw.
d.h ich denke dadurch sollte man das File nicht einfach on the fly austauschen.
 
Zurück
Oben