Bericht aus der Entwicklung: Stenokodieren

Asperg, 1. Juli 2009

Die Fähigkeit Abläufe zu programmieren, um flexibel auf die gestellten Aufgaben zu reagieren, war ein herausragendes Ziel bei der Entwicklung von Bator, dem Programmgerüst für SCADA-Applikationen.

Anforderungen an die Programmierung:

  • Programmieren vor Ort (Werkstattprogrammierung)
  • leicht erlernbar, auch für Gelegenheitsprogrammierer
  • Ablaufkonstrukte mit Schleifen und Verzweigungen
  • Unterprogramme anlegen und aufrufen
  • numerische und boolesche Variablen anlegen
  • Berechnungen in den vier Grundrechenarten
  • numerische Variablen vergleichen
  • boolesche Variablen logisch verknüpfen
  • objektorientiertes Kodieren
  • auch Anweisungen, die auf Ereignisse warten
  • einmal geschriebene Namen wiederverwenden ---> wenig Schreibaufwand
  • Anweisungen (Methoden) per Kontextmenüs und Toolbuttons bereitstellen
  • kodierte Anweisungen können auch Parameter enthalten, die das Verhalten beeinflussen
  • offen für externe Programm-Entwicklung ---> Ex- und Import des Stenokodes als XML-Datei

Anweisung kodieren

Bei einem transparentem System mit einer visualisierten Ausrüstung kann das Programm mit geringem Schreibaufwand erstellt und verständlich dokumentiert werden.

Die Sensoren und Aktoren stellen zusammen mit Merkern und Registern die Variablen in diesem Programm dar. Die Operationen werden aus kontextsensitiven Menüs ausgewählt.

Die Bezeichnung der Variablen wird in den Kontextmenüs verwendet. Wenn die Variable treffend bezeichnet wurde, dann hilft dies dem Benutzer beim Kodieren und das Programm wird mit diesen Informationen kommentiert.

Im Programmfenster „Stenokode“ erscheint danach die Anweisung „1 ---> Prüfung“ und dazu der Kommentar „setze Prüfung auf 1“, der aus dem Kontextmenü stammt.

Auch das Symbol zu dieser Operation wird der Anweisung mitgegeben. Der Text für die Anweisung selbst, wird fest vorgegeben, damit der Effekt der Wiedererkennung gewahrt bleibt.

Bei Bedarf kann der Kommentar im Fenster „Programm-Details“ noch ausführlicher gestaltet werden. Der Schreibaufwand beschränkt sich auf die Bezeichnung der Variablen und auf einen ausführlichen Kommentar für diese Anweisung.

Der geänderte Kommentar wird in das Programm-Fenster übernommen.

Kontextsensitive Menüs

Für die Prüfung der Sanftanlauf-Elektronik von Elektromotoren wird ein schematisiertes Prozessabbild als Hintergrund gewählt. Alle benötigten Sensoren und Aktoren wurden darauf angeordnet.

 

 

Elemente des Gradienten-Detektors

Die meisten Anweisungen für ein Prüfprogramm werden den Kontextmenüs entnommen. Die Auswahl des ersten Befehls (einschalten der LED „Prüfung läuft“) wurde bereits im vorherigen Kapitel beschrieben.

Alle anderen Sensoren und Aktoren gehören zum Gradienten-Detektor und bieten im Kontextmenü den Befehl „aktiviere Gradienten-Detektor“ an, der als nächster Befehl kodiert wird.

Der Gradienten-Detektor schaltet den Sanftanlauf ein. Über den Weggeber des Motors erfasst er die Position über der Zeit und ermittelt daraus die gesuchten Werte.

Als Nächstes können alle Werte, die für die Qualität relevant sind, protokolliert werden. Mit einem Rechts-Klick wird das Kontextmenü aufgerufen und der Befehl „protokolliere <Name der Variablen>“ gewählt.

Die Einträge im letzten Abschnitt des Kontextmenüs erzeugen keine Befehle für das Programm, sie dienen der Manipulation der visualisierbaren Objekte.

Der Gradientendetektor schaltet den Motor ab, sobald alle Messwerte erfasst wurden. Die Zeit bis zum Stillstand des Motors kann mit der Anweisung „warte Zeit ab“ überbrückt werden.

Anweisungen wie diese, sowie für die Schleifenbildung, Verzweigungen, Barcode usw. können dem Kontextmenü des Fensters „Programm“, dem Menü „kodieren“ entnommen oder mit einem Klick auf einen Knopf aus der Werkzeugleiste gewählt werden.

Das Programm als Stenokode

Zuletzt wird die LED „Prüfung läuft“ ebenfalls ausgeschaltet. Das Prüfprogramm, das mit diesen Aktionen kodiert wurde, wird nun im Fenster „Stenokode“ als Baumstruktur mit Einrückungen aufgelistet.

Dieses Prüfprogramm bildet zusammen mit der registrierten Ausrüstung das Dokument (*.bator) für Batch Monitor. Beide Teile dieses Dokuments können jeweils für sich als XML-Datei (*.xml) ex- und importiert werden.

Das Programm wird später in der Betriebsart „Agieren“ abgearbeitet. Es muss hierfür nicht compiliert werden. Es ist nicht mal ein Interpreter notwendig. Bei diesen Anweisungen handelt es sich um einen autarken Code, der sich selbst interpretiert.

Die Art der Programmierung hat viel mit einer Skriptsprache gemein. Bei der Entwicklung von Applikationen für Prüfautomaten, Sondermaschinen usw. hat diese Art von Skript den Vorteil flexibel an neue Anforderungen angepasst zu werden. Anweisungen können geändert werden, entfallen oder neu hinzukommen ohne die Ausführungseinheit zu überarbeiten.

Neue Anweisungen zu kreieren gestaltet sich dabei für den Applikationsprogrammierer relativ einfach, da die grundlegende Funktionalität von einer Basisklasse vererbt wird. In Anbetracht des geringen Schreib- und Zeitaufwandes beim Programmieren, nennen wir dieses Verfahren Stenokodieren und die Sequenz aus diesen autarken Anweisungen: Stenokode.

Digitale Sensoren

Schalter, Tasten, Lichtschranken usw. geben ein binäres Signal ab: Ein oder Aus. Die Flanke, die sich bei einem Signalwechsel ergibt, kann als Ereignis ausgewertet werden. Wenn der Befehl „warte auf steigende Flanke“ im Programm steht, dann wird mit der Ausführung so lange gewartet, bis dieses Ereignis eintritt.

Der Status eines digitalen Signals kann mit zuvor angelegten Merkern verknüpft oder als Bedingung für Programmschleifen oder Verzweigungen genutzt werden. Er kann auch in das Protokoll aufgenommen werden.

Analoge Sensoren

Analoge Sensoren liefern den aktuellen Wert in der Maßeinheit der gegebenen Dimension. Dieser Wert kann protokolliert, für eine Berechnung oder einen Vergleich herangezogen werden.

Beim Protokollieren eines Analogsensor wird ausge­wertet, ob der aktuelle Wert toleriert wird. Die Toleranz für jeden Analogsensor wird in den Ausrüstungs-Details definiert. Wenn mit dem selben Sensor mehrfach unter abweichenden Bedingungen gemessen wird, dann kann die Toleranz für jede Messung individuell angepasst werden (s. Stenokode-Details dieser Anweisung).

Mehrfachauswertung analoger Sensoren

Wenn ein Analogsensor mehrfach ausgewertet wird, kann jeder Messung eine individuelle Toleranz zugeordnet werden.

Im Fenster der Stenokode-Details kann für die Anweisung „notiere <Name der Variablen>“ neben dem Text für Protokoll-Eintrag und Kommentar auch der minimal und maximal tolerierte Wert eingegeben werden.

Analoge Aktoren

Analoge Aktoren geben einen numerischen Wert in der Maßeinheit der gegebenen Dimension an die angeschlossene Ausrüstung aus. Dies kann ein berechneter oder ein konstanter Wert sein. In den Stenokode-Details zu dieser Anweisung können konstante Werte definiert werden.

Ausgegebene Werte lassen sich zurück lesen und protokollieren. Daraus kann bei nachfolgenden Messungen auf Bedingungen geschlossen werden.

Numerische Achsen

Numerische Achsen lassen sich auf dem verfügbaren Weg positionieren. Mit der Anweisung „referenziere z-Achse“ kann das Messsystem synchronisiert werden.

Wenn für die x-/y-Achse ein maßstabsgetreues Anlagenabbild existiert, dann lassen sich die Achsen auch mit Hilfe einer Positionsmarke programmieren.

Koordinaten eichen

Über Eichmarken, deren Abstand bekannt ist, kann der Maßstab ermittelt und über die Nullmarke synchronisiert werden. In diesem Beispiel die Position 0 und 125mm.

Die Eichmarken bestehen aus einem weißen Kreuz auf einem schwarzen Kreis. Die Positionsmarke hat vier schwarze Markierungen auf einem halb transparentem Kreis aus je zwei hellen und dunklen Segmenten.

Zum Eichen wird die Positionsmarke von der Achse gelöst, damit man sie frei verschieben kann.

Mit der Maus wird die Positionsmarke nahe an die Eichmarke geschoben. Mit den Pfeiltasten der Tastatur lässt sich die Positionsmarke dann pixelgenau über die Eichmarke legen.

Die Einträge im Kontextmenü der Positionsmarke zu Synchronisieren der x-/y-Achse als auch in der z-Achse sind nur in der Betriebsart „Assoziieren“ aktiviert.

Nachdem die Positionsmarke auf die Eichmarke am Ende der Referenzstrecke gelegt wurde, kann der Befehl „Endpunkt Referenzstrecke setzen“ aus dem Kontextmenü aufgerufen werden.

Danach wird die Positionsmarke auf den Anfang der Referenzstrecke gesetzt. Wenn Anfang und Nullpunkt der Referenzstrecke zusammenfallen, dann können nacheinander die Befehle „Startpunkt Referenzstrecke setzen“ und „Nullpunkt setzen und skalieren“ aus dem Kontextmenü der Positionsmarke aufgerufen werden. Andernfalls muss die Positionsmarke noch auf den Nullpunkt gelegt werden.

Mit Positionsmarke programmieren

Bei diesem Prüfprogramm werden die Tasten des Prüflings in der x-/y-Achse angefahren und danach mittels der z-Achse gedrückt. Um die entsprechenden Fahrbefehle für die NC zu generieren muss man nur die Positionsmarke mit der Maus auf die Taste ziehen und danach die Anweisung aus dem Kontextmenü wählen.

Die Werte für die x-/y-Achse werden aus den Koordinaten des Anlagenabbildes entnommen. Danach wird die z-Achse programmiert. Hierzu wird entsprechende Eintrag aus dem Kontextmenü des Symbols für die z-Achse gewählt (wie oben beschrieben).

Berechnungen

Regelmäßige angeordnete Raster aus Zeilen und Reihen lassen sich durch die Berechnung der jeweiligen Position leichter und schneller programmieren. Häufig müssen Stellgrößen vor der Ausgabe, in Abhängigkeit von aktuellen Werten (Istwert), berechnet werden. Für logische Entscheidungen müssen unter Umständen zuvor abgefragte Zustände einfließen. Um solche Berechnungen zu ermöglichen, stellt Bator die benötigte Infrastruktur zu Verfügung.

 

Merker und Register für Zwischenergebnisse

Merker können den binären Status (0/1 bzw. false/true) speichern. Register können jeweils eine Zahl speichern. Man kann sie auch boolesche oder numerische Variable nennen.

Es können nahezu beliebig viele Variablen angelegt werden. Die Anzahl wird nur durch den verfügbaren Arbeitsspeicher (RAM) des verwendeten Rechners begrenzt. Die Merker erlauben eine Programmierung, ähnlich wie bei einer SPS.
Der Name, Status und Kommentar kann direkt in dieser Tabelle editiert werden.

Anweisungen für Merker kann in drei Kathegorien eingeteilt werden:

  • Tranferanweisungen (load/store)
  • logische (boolesche) Verknüpfungen (OR, AND, XOR)
  • Statusabfragen (true/false?)

Eine neu angelegte Variable erhält automatisch einen eindeutigen Namen. Der Name kann nachträglich geändert werden. Nach der Änderung wird geprüft, ob der Name eindeutig ist.

Wenn der Name schon existiert, wird er mittels Ziffern erweitert, um Eindeutigkeit zu erlangen. Der Wert der Variablen wird initialisiert und der Kommentar vorbesetzt.

Der Name, Wert und Kommentar kann direkt in der Tabelle editiert werden. Anweisungen für Register kann in drei Kathegorien eingeteilt werden: Tranferanweisungen, numerische und boolesche Berechnungen sowie Vergleiche.

 

Der Akkumulator

Der Operator wird im Kontextmenü als Anweisung angeboten.

Der Akkumulator zeigt das Ergebnis der letzten Berechnung an. Im Feld „Bool“ steht das Ergebnis der booleschen, im Feld „Real“ das der numerischen Operation. Numerische Größen werden normalerweise als Gleitpunktzahl verarbeitet.

Die vier Felder des Akkumulators sind nicht editierbar, besitzen aber jeweils ein Kontextmenü mit den verfügbaren Anweisungen.

Bei Berechnungen und Verknüpfungen stellt der Akkumulator jeweils einen Operanden dar. Der andere Operand kann ein Sensor, Aktor, Merker oder Register sein. Pro Operation wird maximal eine Adresse benötigt.

Um das Ergebnis einer Ganzzahl-Division aus Quotient und Rest darstellen zu können wird der Akkumulator durch die Felder „Rest“ und „Integer“ komplettiert.

 

 

Verfasst am 1.07.2009 von Anton Kling

 

Impressum | Disclaimer aktualisiert: 29.07.2009 (c) Alle Rechte vorbehalten Catix GmbH Asperg