TIA Variablen wie Rezept laden?

RoHa1965

Level-2
Beiträge
26
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich habe vor kurzem an einem SPS-Programm gearbeitet in dem ein Programmierer folgendes realisiert hatte.
Die Variablen eines FB's wurden aus einer Liste ausgewählt und dann an diversen Eingängen des FB's verschaltet.
Hierzu war ein SCL-Code verwendet der mittelts "Vorauswahlnummer" diese Parameter entsprechend MOVEte. Sowas wie ein SELECT Befehl.
Leider finde ich dazu jetzt nichts mehr und würde etwas ähnliches gerne umsetzen.

Wozu?!?:
Eigentlich soll eine Rezeptdatei erstellt werden in der Anteile (als Dosierimpulse) an eine Schrittkette übergeben werden. (Mal sind es 3 Impulse von Komponente A+B, mal 2 Impulse A und 1 Impuls C usw. am Ende sind es insgesamt 10 mögliche Komponenten).
Sicher könnte ich dies mit der klassischen Rezeptverwaltung machen aber die Rezeptauswahl am HMI mit anschließendem übertragen an die SPS wäre zu komliziert. Dies muss von jedem Laien ohne Einweisung bedienbar sein. Zur Zeit läuft das ganze über eine Auswahlliste (jeweils eine Taste) und darüber wird dann ein jeweils eigenes Netzwerk gestartet. Hier habe ich einen Bibliotheksbaustein benutzt und den einfach immer wieder eingesetzt und mit festen Werten beschaltet. Das funktioniert zwar einwandfrei, ist aber ein echtes Datenmonster.
Da nun die Notwendigkeit besteht das ganze von TIA in Codesys zu übersetzen würde ich das gerne erheblich verschlanken und das wäre die perfekte Lösung. Falls jemand hierzu Infos hat ... gerne !

Gruß
RoHa
 
Zu was denn Infos?

Select als auch Move wird ja im Handbuch bestimmt erklärt. Wie viele verschiedene Rezepturen gibt es denn?
Du könntest im HMI mit Dropdown oder eben mit Tasten arbeiten, in denen die versch. Rezepturen vorgehalten werden aus einem Array der Rezepturen.

Viele Wege führen ans Ziel.. was am besten passend für euch ist, müsst ihr beurteilen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja wenn es so einfach wäre. Den MOVE Befehl brauche ich nicht nachsehen, der ist hinlänglich bekannt. Und einen SELECT Befehl gibt es ja leider nicht, dann wäre es ja einfach ;-).

Die Idee mit dem Dropdown Menü würde gehen aber da finde ich die Idee mit einzelnen Anwahltasten für den Endnutzer noch anwenderfreundlicher. Es handelt sich am Ende um ca. 40 Rezepturen die aus insgesamt bis zu 10 Komponenten bestehen können (oder weniger).
Zur Zeit läuft dazu einfach eine Schrittkette ab die jeweils einen festen Schritt (z.B. 1 x Komponente A) abarbeitet und dann weiterschaltet. So können Komponenten auch einmal doppelt dosiert werden (wenn benötigt) und falls ein Rezept halt nur 5 Zutaten hat dann gibt es ein Weiterschaltbit das an die Kette angehangen wird und diese blind weiterschaltet bis zum Ende.
Das funktioniert ja auch und ich würde es am liebsten so belassen.
Nur das ich diesen Baustein mit der Kette nicht 38 mal anlegen möchte sondern einmal und ihn dann mit den Eingangsvariablen aus der Auswahl beschalten möchte. Und genau das hat die Funktion auch gemacht die ich gesehen habe. Leider habe ich keinen Zugriff mehr auf das Programm und meine Suche danach war bisher erfolglos. Daher meine Frage ob jemand etwas dazu weiss.

Danke aber für deinen Tip
Gruß
RoHa
 
Array von 0..50 UDT_Rezeptur in einem Datenbaustein anlegen (DB_Rezepturen zB), dort alle deine Werte hinterlegen.. den Datenbaustein remanent einstellen

AusgabeRezept auch als UDT_Rezeptur anlegen

Taster auf der Hmi legt nur noch fest den aktuellen Zeiger fest, auf welches Fach im Array geschaut wird, das einmal an AusgabeRezeptur die aktuelle Rezeptur übergibt, wiederum am Graphen legst du als Input oder InOut (kein Plan ob du darin noch was aus der Schrittkette schreiben musst) die UDT_Rezeptur an und schon kann dein Graph die aktuell gewählte Rezeptur verwenden.

Natürlich ist noch zu verhindern das im laufenden Betrieb die Rezeptur geändert wird usw usw..

Evtl auch eine Möglichkeit die versch. Rezepturen zu bearbeiten mit Eingabefenstern etc, Werteübernahme auch nur wenn Taste Speichern gedrückt wird etc.. also das normale drumherum.
 
Hallo DCDCDC,

danke nochmals für deinen Tip. Die Struktur aus einem Array of "Komponenten"(UDT) hatte ich auch bereits so ins Auge gefasst.
Ich habe auch zwischenzeitlich die entsprechende SCL Anweisung dazu ermittelt. Dort wurde eine CASE Anweisung verwendet die dann die Zuweisungen steuert.
Eine Übergabe an Graph fällt in diesem Fall aus, da eine 1200 kein Graph kann - aber eine klassische Schrittkette erfüllt ja den gleichen Zweck. Besondere Abzweigungen gibt es in dieser Schrittkette nicht.
Die entsprechenden Verriegelungen (z.B. gegen erneute Tastenbetätigung vor Dosierzeitende) sind in der bisherigen Ablaufsteuerung bereits realisiert.

Gruß
RoHa
 
Zuviel Werbung?
-> Hier kostenlos registrieren
CASE brauchst du nicht unbedingt du kannst einfach anstatt die Zahl des Fachs einfach durch eine Variable ersetzen welche eine Zahl beinhaltet

also anstatt DB_Rezeptur.Rezeptur[2] kannst du DB_Rezeptur.Rezeptur[DB_Rezeptur.Zeiger] verwenden.

Wenn du nicht mehr als 255 Einträge brauchst, kannst du DB_Rezeptur.Zeiger zB als USInt anlegen.. die Variable zählt nur von 0..255
 
Zurück
Oben