Wenn man z.Bsp. keine Rezepturverwaltung in der HMI (Fremd-HMI oder man will keine Siemens-Alpha-Buggy-Version nutzen) machen kann, jedes "eigenverwaltete" Rezept in einem eigenen DB ablegen will (wegen der Ordnung, Sicherung oder Größe der Daten).
Entweder ich greife nun indirekt jeweils in den benötigten Rezept-DB oder ich kopiere den Inhalt des Rezept-DB in einen "Aktiv"-DB.
Wie mach ich das am einfachsten im TIA? Aber bitte nicht mit Case-Anweisung und komplett ausprogrammieren, wir sind nicht in der Softwaresteinzeit!
Bitte auch kein Array, gerade die Rezeptvariablen sollen vernünftige Namen bekommen, wir machen ja nun alles schick symbolisch. ;-)
Genau das habe ich gerade realisiert bzw. befindet sich gerade im Softwaretest. Eine Produktionssteuerung auf der SPS mit den Modulen.
Material: Stammdatenverwaltung, Lagerortverwaltung und Materiallose.
Produktion: Waagenverwaltung, Rezepte, Equipmentparameter und Auftragsplanung
BDE: Dosierbericht, Materialbuchung Tracking und Tracing für Batch Units ist in Arbeit
All das basiert auf UDT's Arrays und SCL. Wenn ich alles in UDT's lege habe ich auch eine einwandfrei Symbolik.
z.B. UDT Material
im DB
Material[1]
Name WString[32]
MKZ WString[32]
ID Dint
... ...
Diesen UDT kann ich überall aufrufen und nutzen, in den Stammdaten, im Rezept usw. Der Array Index gibt mir immer die Position an, ob nun in der Materialverwaltung, im Rezept oder im Dosierbericht.
Auch die Eigenschaft UDT's in UDT's aufzurufen erleichtert die Sache um ein vielfaches.
Alle DB's die ich brauche haben immer einen UDT der als einzelner Datentyp aufgerufen wird und den Editierbereich darstellt. Die Datenhaltung erfolgt dann in einem Array von diesem Datentyp.
Die vollsymbolische Programmierung macht das ganze auch sehr Einfach, da es im ganzen Programm eigentlich nur zwei Anweisungen dieser Art gibt wenn ich Daten bewegen muss.
IF X
THEN Stammdaten.Edit := Stammdaten.Material[1] ; die Visu liest Daten aus dem DB aus
END_IF;
oder
IF y
THEN Stammdaten.Material[1] := Stammdaten.Edit ; die Visu triggert das schreiben von Editierdaten in den DB
END_IF;
Ich habe selber viel mit Pointern gearbeitet und vermisse diese kein Stück im TIA Portal, mit der 1500er und optimierten Bausteinen.
Das ich alle Rezepte in einem DB halte, sehe ich auch als großen Vorteil es macht das Programm viel übersichtlicher, da ich nicht 100 DB's für Rezepte habe, 100 DB's für Materialien usw.