Allen-Bradley-Rezeptverwaltung mit UDT-Arrays und einer HMI-Bearbeitungsoberfläche
Lernen Sie, eine HMI-basierte Rezeptbearbeitung für AB Logix 5000 mit UDT-Arrays und COP-Anweisungen zur dauerhaften Parameterspeicherung zu erstellen.
Die Rezeptverwaltung auf Logix-Plattformen funktioniert am besten, wenn die HMI niemals direkt in das historische Array schreibt. Ein robustes Muster verwendet drei Tags: Recipe_Storage als UDT-Array mit der Länge 50, Recipe_Display als einzelne UDT-Instanz für die Bedieneranzeige und Recipe_Index als DINT, der festlegt, welches gespeicherte Rezept in die Anzeigestruktur gespiegelt wird. COP-Anweisungen verschieben Daten bei einer Indexänderung sowie erneut beim Speichern, sodass der Bediener stets einen Zwischenpuffer bearbeitet, während das Archiv über Spannungsaus- und -einschaltungen hinweg konsistent bleibt.
Logix-Tagmonitor mit Recipe_Storage[50], Recipe_Display und Recipe_Index für die HMI-gebundene Rezeptbearbeitung.
Definieren Sie den UDT einmal mit jedem vom Prozess benötigten Sollwert – Temperaturen, Timer, Geschwindigkeiten, Produktcodes und Verriegelungsmasken – und instanziieren Sie Recipe_Storage anschließend als diesen UDT[50]. Recipe_Display muss denselben UDT-Typ besitzen und darf nicht aus lose verbundenen atomaren Tags bestehen. Homogene Datentypen halten die Berechnung der COP-Länge einfach und verhindern stille Kürzungen, wenn später weitere Member hinzugefügt werden.
Indexbegrenzung und Ladepfad
Begrenzen Sie Recipe_Index vor jeder Ausführung einer COP-Anweisung auf den inklusiven Bereich von 0 bis 49. Ein nicht begrenzter Index aus einem numerischen Eingabeobjekt kann je nach Behandlung der Array-Grenzen im Projekt einen COP-Fehler auslösen oder undefinierten Speicher auslesen. Bei einer steigenden Änderung von Recipe_Index oder beim Drücken einer expliziten Ladetaste wird Recipe_Storage[Recipe_Index] in Recipe_Display kopiert. Die HMI wird ausschließlich an die Member von Recipe_Display gebunden. Diese eine Regel beseitigt Race Conditions, bei denen zwei Bildschirme in unterschiedliche Array-Elemente schreiben, während ein Bediener noch Werte anpasst.
// Pseudocode-Struktur
if Recipe_Index < 0 then Recipe_Index := 0;
if Recipe_Index > 49 then Recipe_Index := 49;
if IndexChanged or LoadPressed then
COP(Recipe_Storage[Recipe_Index], Recipe_Display, 1);
if SavePressed then
COP(Recipe_Display, Recipe_Storage[Recipe_Index], 1);
HMI-Rezeptbildschirm, der ausschließlich an Recipe_Display gebunden ist; die Aktionen Laden/Speichern lösen COP-Routinen in der Steuerung aus.
Speicherpfad, Datenerhalt und Verhalten beim Download
Beim Speichern wird Recipe_Display zurück in Recipe_Storage[Recipe_Index] kopiert. Da Recipe_Storage in den Steuerungs-Tags liegt, bleiben die Werte über einen Spannungsausfall hinweg erhalten, wenn das Projekt für die normale Tag-Speicherung konfiguriert ist. Die Daten bleiben auch bei einem Download erhalten, wenn Sie sich dafür entscheiden, die Tag-Werte beizubehalten. Betrachten Sie dieses Kontrollkästchen als Bestandteil der Rezept-SOP und nicht als optionale Komfortfunktion. Bediener sollten wissen, dass das Herunterladen eines Projekts mit aktivierter Option „Tags neu initialisieren“ sorgfältig abgestimmte Rezepte löscht, sofern keine Offline-Sicherung vorhanden ist.
CSV-Import-Workflows sollten kritisch betrachtet werden. Viele HMI- oder Excel-zu-Tag-Programme erstellen zwar die Tag-Namen, aktualisieren aber Member-Werte innerhalb verschachtelter UDTs nicht zuverlässig, insbesondere wenn die Spaltenüberschriften von den UDT-Member-Namen abweichen. Bevorzugen Sie eine ausdrückliche Importroutine, die jedes Feld validiert, oder laden Sie nach umfangreichen Änderungen einen bekannten, fehlerfreien L5X-/Tag-Export erneut. Gehen Sie nicht davon aus, dass ein grünes Banner „Import abgeschlossen“ bedeutet, dass Recipe_Storage[n].Setpoint nun dem Tabellenwert entspricht.
| Tag | Typ | HMI-Bindung? | Zweck |
|---|---|---|---|
| Recipe_Storage | UDT[50] | Nein | Rezeptarchiv im nichtflüchtigen Speicher |
| Recipe_Display | UDT | Nur ja | Bearbeitungspuffer für den Bediener |
| Recipe_Index | DINT | Ja (Auswahl) | Aktiver Speicherplatz 0–49 |
Richtlinien für die HMI-Oberfläche
- Stellen Sie Laden und Speichern als separate, tastende Bits bereit, die in der Steuerung verarbeitet werden, und nicht als direkte Array-Schreibzugriffe vom Bedienpanel.
- Zeigen Sie den begrenzten Index sowie ein schreibgeschütztes Feld „Gespeicherter Name“ an, das aus dem Display-UDT kopiert wird, damit Bediener prüfen können, welcher Speicherplatz aktiv ist.
- Sperren Sie das Speichern, während sich die Maschine im Zyklus befindet, wenn Rezept-Member während einer Charge Bewegungs- oder Temperatur-Sollwerte beeinflussen.
- Protokollieren Sie Speicherereignisse mit Bediener-ID und Index, um die Rückverfolgbarkeit in regulierten Produktionslinien sicherzustellen.
Indexgrenzen und erhaltene Downloads validieren
Testen Sie, indem Sie Speicherplatz 0 laden, einen eindeutigen Testwert in Recipe_Display bearbeiten, speichern, den Index auf 1 ändern, anschließend zu 0 zurückkehren und erneut laden. Der Testwert darf nur dann wieder erscheinen, wenn der Speichervorgang ausgeführt wurde. Schalten Sie die Steuerung aus und wieder ein und prüfen Sie, ob Recipe_Storage den Testwert weiterhin enthält. Versuchen Sie, über die HMI einen Index außerhalb des zulässigen Bereichs einzugeben, und überprüfen Sie die Begrenzung. Testen Sie einen CSV-Import auf einem Ersatzsystem und vergleichen Sie die Member einzeln mit der Datei, bevor Sie diesem Weg in der Produktion vertrauen.
Vermeiden Sie die Bindung des Panels an Recipe_Storage[Recipe_Index].Member. Eine indirekte HMI-Adressierung in Arrays ist schwieriger zu prüfen und begünstigt Schreibvorgänge in den falschen Speicherplatz, wenn das Index-Tag und der Bildschirm mit unterschiedlichen Aktualisierungsraten arbeiten. Das Display-UDT-Muster lässt sich problemlos erweitern, wenn Sie den UDT später vergrößern, Sicherheitsstufen hinzufügen oder dasselbe Rezeptmodell auf mehrere PLC- und PAC-System-Zellen übertragen, die einen gemeinsamen Bediener-Workflow nutzen.
Über den Autor
Mark Townsend | Leitender Automatisierungsingenieur – Allen-Bradley-Systeme
Mark Townsend ist ein leitender Automatisierungsingenieur mit mehr als 18 Jahren Erfahrung auf Allen-Bradley-Plattformen, darunter ControlLogix, CompactLogix und das ältere SLC-500. Zu seiner täglichen Arbeit gehören RSLogix-/Studio-5000-Logik sowie die Inbetriebnahme von FactoryTalk-View-HMIs in veralteten und gemischten Anlagenbeständen.