Rezeptverwaltung programmieren

SchmiererKai

Level-1
Beiträge
22
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,


ich bin gerade dabei für eine Codesyssteuerung eine Rezeptverwaltung zu implementieren. Die Verwaltung soll später in verschiedene Maschinen eingesetzt werden. Die Maschinen sind vom Grundaufbau her gleich, unterscheiden sich jedoch in Anzahlt und Art verschiedener Stationen.


Die Rezeptverwaltung soll auf der Codesys Steuerung betrieben werden und die Rezepte möglichst lokal und vor allem permanent speichern.


Das Aufbauprinzip besteht aus einem Baustein (Verwaltung), und für jede weitere mögliche Station einen weiteren Baustein(Station 1...x).
Die Visualation kann Parameter direkt in de Stationen einsehen und anpassen. Gespeichert werden die Variablen über den Rezepverwaltungsbaustein. Jede Station hat eine eigene Variablen Struktur die unterschiedlich ist. In folgendem Bild habe ich die Gründsätzlichen beziehungen einmal aufgemalt. Programmiert wird mit Codesys 3.x mit allem was dazu gehört. Ich weis das es mit den Verweisen von den Stationen auf den Hauptbaustein nicht so einfach ist mit Strukturen aber da überlege ich mir noch etwas. Mein Problem ist wie speichere ich am besten die Daten Permanent. In einem Array, Datenbank lokal(wenn das möglich ist), XML File, usw...

AufbauRezeptverwaltung.jpg
 
Hallo Kai,

zuerst mal ein paar Fragen:
1. Auf welchem(n) System(en) wird die Visu laufen?
2. Sollen die Rezepte zwischen Maschinen austauschbar sein?
3. Wie sollen Rezepte gesichert/wiederhergestellt werden?

Ich habe diese Fragen damals mit "Rezepte als Datei" beantwortet, zumal bei mir hinzukam, dass unsere Rezepte plattformunabhängig (B&R, Siemens) verwendbar sein sollten. Und wegen des Einsatzes von Panels (ob B&R oder Siemens) schied eine (lokale) Datenbank ebenfalls aus.

Realisiert habe ich die Anforderungen folgendermaßen:
1. Die Rezeptparameter einer Station bilden eine Unterstruktur des Gesamtrezeptes.
2. Datei "<Rezeptname" erzeugen, Dateikopf (Dateityp, Versionsnummer, Maschinentyp etc.) schreiben.
2. Schleife über die Rezeptstruktur, von jedem Element wird der Variablenname ermittelt und in der Form "<VarName> = <Wert>" als String/Zeile in die Datei geschrieben.

Das Einlesen der Rezeptdatei geschieht zeilenweise, danach splitten in Variablenname und Wert und zuletzt Zuweisung an die entspreche Variable.


Gruß, Fred


PS: XML wäre dann interessant, wenn man Strukturen in einem Rutsch, sprich mit einem Befehl abspeichern/einlesen könnte. Ging/geht bei Siemens-Panels nicht, bei CodeSys bzw. ST weiß ich es nicht.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Fred,


Danke für deine promte Reaktion. Zuersteinmal beantworte ich dir deine Fragen.
1: Die Visu soll zuersteinmal auf einem Webpanel laufen aber austauschbar sein. Das bedeutet das eventuell später auch eine Visu von Intouch oder Zenon eingesetzt wird. Aus diesem Grund soll die ganze Datenspeicherung auf der SPS ablaufen.
2: Die Rezepte müssen nicht austauschbar sein. Die Standartparameter werden in der Station hinterlegt und werden dann immer wieder abgeändert.
3: Die Visu gibt über eine Boolsche Variable den jeweiligen Befehl zum speichern bzw. zum laden eines anderen Rezepts. Das Rezept soll dann vom Rezeptverwaltungsbaustein lokal in einer bisher unklarenn Form speichern.


Ich weis nicht welche Dateiformen bei der Verwendung von Codesys am einfachsten bzw. sichersten. Die Daten können sich auf
Codesys SPS'n beschränken sollen.


Es ist ein guter Anfang die ganzen Dateien in einen String zu speichern. Wie lese ich einzelne Zeilen aus bzw speichere einzelne Zeilen?
Wie hast du das System mit deinen Rezeptstruktur aufgebaut. Kannst du das ein wenig näher erläutern mit Unterstruktur usw.


Ich danke dir vielmals.


Kai Schmierer
 
Hallo Kai,

zu 3.: Ich meinte damit eigentlich so etwas wie eine Datensicherung, falls die lokal gespeicherten Dateien korrumpiert/zerstört worden sind.

Zur Rezeptstruktur:
Eine Rezeptdatei sieht bei uns z.B. so aus:
Code:
[File]
Type = WPRCP
Version = 1

[Machine]
Type = Angel

[Recipe]
name = Light roll 66g
lastUpdate = 2015-03-13 11:14:37  (Administrator)

[Data]
description = Brown dough 66g
noOfRows = 4
rowPerformance = 2400
totalPerformance = 9600
takeoverStation[0].centering_durationAdjust = 0
takeoverStation[0].centering_on = true
takeoverStation[0].centering_startPosAdjust = -10
takeoverStation[0].flaps_durationAdjust = 15
takeoverStation[0].flaps_on = true
takeoverStation[0].flaps_startPosAdjust = -17
takeoverStation[0].flouring_durationAdjust = 0
takeoverStation[0].flouring_mode = 10
...
longmouldStation[0].blower_on = false
longmouldStation[0].firmingAndCentering_durationAdjust = 2
longmouldStation[0].firmingAndCentering_mode = 20
longmouldStation[0].firmingAndCentering_startPosAdjust = 7
...
Die Punkte "..." sind einfach nur Füllzeichen, pro Station/Modul haben wir eigentlich bis zu 100 Parameter.
Wie du siehst wird 'einfach' ein Key/Value-Paar pro Zeile in die Datei geschrieben. Der Key ist dabei der interne Variablenname, vor dem Schreiben/nach dem Einlesen einer Rezeptdatei wird dann der Name der Hauptstruktur (hier "recipe") abgeschnitten/hinzugefügt.


Gruß, Fred
 
Hallo Fred.


Achso. Ja die Daten werden dann ggbf auf eine SD-Karte, USB Stick etc. gesichert. Je nach Anwendung kann dann für jede Speicherart eine erbende Klasse implementiert werden.


Okay jetzt verstehe ich das ganze. Finde ich eine sehr gute Lösung und auch variabel anwendbar. Ich denke jetzt bin ich einige Schritte weiter gekommen.


Kennt sich jetzt noch jemand mit Codesys Speicherarten aus. Retain und Persistand sollen ja nicht ganz so sicher sein und daher würde ich gerne die Daten in Dateien ablegen. Wie erstelle ich mit Codesys eine Dateistruktur dieser Art(letzter Post). Und voallem wie wandle ich das ganze wieder in meine Variablen bzw Struktur zurück?
Ich danke dir für deine Hilfe Fred.


Mit freundlichen Grüßen
Kai Schmierer
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kai,

ich bin ob deiner letzten Frage jetzt etwas verwirrt:
1. Wie du Strukturen bzw. eigene Datentypen anlegst weißt du aber schon??
2. Das einzige, was ich für die oben gezeigte Datei gemacht habe, ist das Iterieren über die Struktur "recipe" und die Ermittlung der Element- bzw. Variablennamen mittels Schleife und der ST-Funktion "pvInfo" (oder so ähnlich) sowie die Bildung von Key/Value-Paaren mit dem zugehörigen Variablenwert. Jedes Paar schreibe ich dann mit Hilfe der entsprechenden ST-Funktion als eine Zeile in die zuvor erzeugte Rezeptdatei.
3. Beim Einlesen legst du keine neue Struktur an, sondern du besetzt ja jedes bestehende Element 'nur' mit einem neuen Wert. Also kannst auch hier eine Schleife über die Struktur laufen lassen und die Werte zuweisen. Ich habe jetzt die Funktionsnamen nicht parat, diese sollten aber nicht schwer zu finden sein.


Gruß, Fred
 
Hallo Fred.


1. Ja ich kenne mich mit Strukturen sehr gut aus.
2. Auch das schreiben bzw verwalten sollte ich ohne Probleme hinbekommen.
3. So wie du sagst ist mein einziges Problem wirklich noch die Funktionen wie ich Dateien lade, speichere, verändere, einzelne Zeilen schreibe und vorallem einzelne Zeilen auslesen. Da müsste sich doch jemand finden der das mit Codesys schon gemacht hat und mir eventuell Tipps gben kann. Bisher habe ich direkt nicht gefunen mit dem ich einzelene Zeilen auslesen kann.
Ich danke dir das du mich schon soweit gebracht hast und entschuldige mich für die Verwirrung.


Mit freundlichen Grüßen
Kai Schmierer
 
Zurück
Oben