Richtlinien und Kompatibilität

Bei der Entwicklung der Plastic Base Application wird grundsätzlich auf Rückwärtskompatibilität geachtet. Dafür werden Änderungen, die das Entfallen von alten Elementen bedeuten, nur hinzufügend gehandhabt. Das bedeutet, dass Elemente die umbenannt, verändert oder neu entworfen werden immer zusätzlich dem Projekt hinzugefügt werden und die alte Variante mit Kennzeichnung „Obsolete“ weiter im Projekt besteht. Allerdings können Updates, mit neuen Features und Elementen, in Konflikt mit der existierenden Endanwendung geraten. Hierfür empfiehlt es sich, den folgenden Richtlinien zur Gewährleistung der Kompatibilität folgen:

Präfixe

In der Plastic Base Application werden interne Variablen einer Klasse mit einem datentypabhängigen Präfix versehen. Dadurch kann zwischen Variablen und Eigenschaften unterschieden werden. Eine Auflistung der üblichen Präfixe findet sich in der TE1000 XAE PLC Dokumentation. Die folgenden Präfixe werden abweichend zu dieser Definition eingesetzt:

Typ

Präfix

Anstatt

Beschreibung

Declaration example(s)

INTERFACE

i

ip

Instanz einer sicher zugewiesenen Schnittstelle.
Sicher ist ein Interface für Cyclic() Methoden, wenn eine Überprüfung durch die Init() Methode stattfindet.

iCylinder: I_Cylinder;

INTERFACE

iq

I

Instanz einer optional zugewiesenen Schnittstelle.
Diese muss vor jedem Zugriff in einer Cyclic() Methode auf <> 0 geprüft werden.

iqOption: I_Option;

WORD

w

n

Instanz eines bitweise codierten Integers

wStatus: WORD;

GVL

- (kein)

GVL_

Globale Variablenliste als Deklarationsraum für globale Instanzen (z.B.:)

Carriage.
Temperature.
HmiCommunication.

Richtlinien und Kompatibilität 1: Verwendung einer Eigenschaft

Die Eigenschaften in einer objektorientierten PLC-Programmierung setzen sich aus einer Get- und einer Set-Methode zusammen. Prinzipiell bedeutet dies, dass jede Eigenschaft auch durch zwei Methoden programmiert werden könnte. Aus diesem Grund legt die Plastic Base Application ein paar Szenarien für die Auswahl des zu verwendenden Aktions-Objektes fest:

Szenario

Beispiel

Anmerkung

Zugriff auf einen Istzustand

fbObject.ActValue (Get)

Istwerte können nur gelesen werden

Zugriff auf einen Einstellwert

fbObject.Parameter (Get, Set)

Parameter können gelesen und (ggf. bedingt) geschrieben werden

Zugang zu einem Unterobjekt

fbObject.SubObject (Get)
fbObject.SubObject.Property

Unterobjekte werden über ein INTERFACE im Zugriff geregelt. Dabei muss garantiert sein, dass das zurückgegebene INTERFACE gesetzt ist (fbObject.SubObject <> 0).

Schnittstelle zum HMI

fbObjectHmi.Value (Get)
fbObjectHmi.Parameter (Get, Set)
fbObjectHmi.Cmd (Get, Set)

Eigenschaften bieten die Möglichkeit, Werte für die HMI bedarfsorientiert zu berechnen. Das vermeidet Werte-Kopiervorgänge speziell für die Verwendung im HMI.

Szenarien übergreifend sollten folgende Richtlinien berücksichtigt werden:

Richtlinien und Kompatibilität 2:

Abweichungen von den Richtlinien möglich

Aus Praktikabilität und/oder historischen Aspekten können abweichende Verwendungsszenarien in der Plastic Base Application auftreten. Folgende Fälle wurden beispielsweise zur Vereinfachung (Praktikabilität) gewählt:

  • FB_Motion.Motion und FB_Axis.Axis, welche Zugriff auf ggf. nicht gesetzte INTERFACEs zurückgeben können.
  • FB_Monitoring.Input und FB_Setpoint.Output, welche optionale IO-Elemente als Eigenschaft erwarten.

Richtlinien und Kompatibilität 3: Verwendung einer Methode

Im Gegensatz zu den Eigenschaften der Plastic Base Application werden Methoden grundlegend für das Auslösen aktiver Funktionen verwendet. Entsprechend kann auch für Methoden eine Liste an Szenarien zusammengestellt werden:

Szenario

Beispiel

Anmerkung

Ausführen eines Kommandos

fbObject.DoSomething(bCmd)

Durch das Übergeben eines bCmd-Flags kann ein Kommando aktiv ein- und ausgeschaltet werden.

Aufruf einer einmaligen Aktion

fbObject.Clear()
fbObject.Init()

Diese Art von Methode ist für einen ereignisbasierten (einmaligen) Aufruf ausgelegt.

Index-basierter Zugang zu einem Unterobjekt

fbObject.SubObjects(i)
fbObject.SubObjects(i).Property

Unterobjekte werden über ein INTERFACE im Zugriff geregelt. Dabei muss garantiert sein, dass das zurückgegebene INTERFACE gesetzt ist (fbObject.SubObjects(i) <> 0). Darüber hinaus kann durch die Verwendung einer Methode das Überschreiten der Index-Grenzen abgefangen werden.

Zyklische Abarbeitung

fbObject.Cyclic()

Zyklischer Programm-Code, dessen zyklischer Aufruf auch über ein INTERFACE durchgeführt werden kann.

Zyklische Teilroutinen

fbObject._SubRoutine()

Aufteilung des zyklischen Programmcodes auf einzelne Routinen. Diese Methoden sind durch den Zugriffsmodifizierer PROTECTED ausschließlich innerhalb der Klasse und erbender Klassen aufrufbar.

Hilfsfunktionen

fbObject._DetermSmth()

Klasseninterne Hilfsfunktionen vermeiden vielfaches Vorkommen von identischem Code. Hierzu dient eine mit dem Zugriffsmodifizierer PROTECTED versehene Methode, die ausschließlich innerhalb der Klasse und erbender Klassen aufrufbar ist.

Initialisieren einer Referenz

fbObject.SetRef(iObj)

Ermöglicht die Überprüfung einer erfolgreichen Referenz-Initialisierung.