Klasse

Eine Klasse ist eine logische Einheit, in der Daten und Operationen gekapselt werden. Sie stellt außerdem einen Variablentyp dar, der instanziiert werden kann. Eine Klasse kann eine Methode FB_Init haben, die bei der Initialisierung einer Instanz aufgerufen wird.

Eine Klasse kann über folgende Beziehungstypen verfügen:

Klasse 1:

Eine Klasse wird durch ein dreigeteiltes Rechteck dargestellt:

Es folgt fettgedruckt der Klassenname.

Nach der ersten Trennlinie werden alle Attribute angezeigt. Jedes sichtbare Attribut hat eine Kennung. Wenn in geschweiften Klammern {input} angefügt ist, handelt es sich um eine Variable vom Typ VAR_INPUT, bei {output} handelt es sich um eine Variable vom Typ VAR_OUTPUT. Eine Eigenschaft hat die Kennung {property}. Eine interne (nicht sichtbare) Variable vom Typ VAR hat keine Kennung:

<Attributname> : <Datentyp> {'{input}' | '{output}' | '{property}'}

Nach der zweiten Trennlinie folgen alle Operationen der Klasse, d.h. ihre Methoden oder Aktionen. Zuerst kommt jeweils der Name der Operation mit abschließender runder Klammer. Anschließend kennzeichnet {action} eine Aktion:

<Aktionsname>() {action}

Handelt es sich um eine Methode, wird in den runden Klammern ggf. auf eine Variablenübergabe hingewiesen. Falls für eine Methode ein Rückgabetyp deklariert ist, folgt dieser in der rechten Spalte. Methoden besitzen im Gegensatz zu Aktionen ({action}) keine abschließende Kennung:

<Methodenname>(…) : <Rückgabetyp>

Eigenschaften

„Eigenschaft“

Beschreibung

„Bezeichner“

Name der Klasse

Beispiel: FB_EventLogger

Benutzereingaben bei einer Klasse

Die folgenden Benutzereingaben sind unter der Bedingung verfügbar, dass „Zeiger“ in der Toolbox aktiviert ist (Default).

Benutzereingabe im Klassendiagramm

Reaktion im Klassendiagramm

Beschreibung

Wählen Sie das Werkzeug „Klasse (POU)“:

Klasse 2:

Klicken Sie in einen freien Bereich des Diagramms. Der Dialog „POU hinzufügen“ öffnet. Geben Sie für das neue Objekt einen Namen ein, passen Sie die Einstellungen an und beenden Sie den Dialog mit „Hinzufügen“.

Eine Klasse wird erstellt.

Das Objekt existiert im Diagramm und im Projekt. Die Ansicht im Projektbaum wird automatisch aktualisiert.

Selektieren Sie eine Klasse.

Klasse 3:

Die Klasse hat expandierte Attribut- und Operationslisten, die mit Klasse 4: gekennzeichnet sind.

Links oberhalb der Klasse sind nun Befehlssymbole sichtbar, um Beziehungselemente einzufügen.

Tipp: Wenn die Klasse über Beziehungen verfügt, die zur Zeit nicht im Klassendiagramm dargestellt werden (fehlende Rechteckelemente), dann erscheint in der Ansicht „Werkzeuge“ eine Liste „Eingehende Querverweise“ und/oder „Ausgehende Querverweise“. Darunter sind die fehlenden Rechteckelemente aufgelistet, welche Sie per Drag’n’Drop ins Klassendiagramm ziehen können, um sie dort darzustellen.

Klicken Sie auf Klasse 5:.

Die Klasse wird im Diagramm entfernt, sodass sie nicht mehr dargestellt wird.

Verwenden Sie das flache Entfernen einer Klasse, wenn sie nur in der Klassendiagrammsicht entfernt werden soll. Das Objekt existiert nach wie vor und ist im Projektbaum sichtbar.

Tipp: Die Klasse wird in der Ansicht „Werkzeuge“ unter „Eingehende Querverweise“ und/oder „Ausgehende Querverweise“ angezeigt, wenn ein Rechteckelement im Klassendiagramm selektiert ist, das eine Beziehung zu dem entfernten Element hat.

Klicken Sie auf Klasse 6:.

Die Klasse wird im Diagramm und im Projekt entfernt.

Das Objekt erscheint nicht mehr als Objekt im Klassendiagramm oder im Projektbaum. Es existiert nicht mehr.

Klicken Sie auf Klasse 7: und dann in einen freien Bereich des Diagramms. Der Dialog „POU hinzufügen “ öffnet. Geben Sie für das neue Objekt einen Namen ein, passen Sie die Einstellungen an und beenden Sie den Dialog mit „Hinzufügen“.

Ein Kompositionspfeil weist ausgehend von der bestehenden Klasse auf die neue Klasse.

Die bestehende Klasse enthält eine Instanz auf die neue Klasse. Zum Beispiel:

fbNew : FB_New;

Klicken Sie auf Klasse 8: und dann auf eine bestehende Klasse.

Ein Kompositionspfeil weist ausgehend von der ersten Klasse auf die zweite Klasse.

Die erste Klasse enthält eine Instanz auf die zweite Klasse. Zum Beispiel:

fbExistent : FB_Existent;

Klicken Sie auf Klasse 9: und anschließend in einen freien Bereich des Diagramms. Der Dialog „POU hinzufügen“ öffnet. Geben Sie einen Namen für das neue Objekt ein, passen Sie die Einstellungen an und beenden Sie dann den Dialog mit „Hinzufügen“.

Ein Assoziationspfeil weist ausgehend von der ersten Klasse auf die neue Klasse.

Eine neue Klasse FB_New wird erzeugt. Die bestehende Klasse kennt nun die neue Klasse und enthält eine Assoziation auf die neue Klasse. Zum Beispiel:

pNew : POINTER TO FB_New .

Klicken Sie auf Klasse 10: und anschließend auf eine bestehende Klasse.

Ein Assoziationspfeil weist ausgehend von der ersten Klasse auf die zweite Klasse.

Die erste Klasse kennt die zweite Klasse. Sie enthält nun eine neue Variable vom Typ. Zum Beispiel:

pExistent : POINTER TO FB_Existent;

Klicken Sie auf Klasse 11: und anschließend in einen freien Bereich des Diagramms. Der Dialog „POU hinzufügen“ öffnet. Geben Sie einen Namen ein, passen Sie die Einstellungen an und beenden Sie den Dialog mit „Hinzufügen“.

Eine Generalisierung weist von der bestehenden Klasse zur neuen Klasse. Die bestehende Klasse erbt von der neuen.

Die bestehende Klasse enthält die Deklaration. Zum Beispiel:

FUNCTION_BLOCK FB_Sub EXTENDS FB_New

Klicken Sie auf Klasse 12: und anschließend auf eine bestehende Klasse.

Eine Generalisierung weist von der ersten Klasse zur zweiten Klasse.

Die erste Klasse enthält die Deklaration. Zum Beispiel:

FUNCTION_BLOCK FB_Sub EXTENDS FB_Existent

Klicken Sie auf Klasse 13: und anschließend in einen freien Bereich des Diagramms. Der Dialog „Schnittstelle hinzufügen“ öffnet. Geben Sie einen Schnittstellennamen ein, passen Sie die Einstellungen an und beenden Sie den Dialog mit „Hinzufügen“.

Ein Realisierungspfeil weist von der Klasse zur neuen Schnittstelle.

Die Klasse implementiert die neue Schnittstelle. Im Deklarationsteil der Klasse steht. Zum Beispiel:

FUNCTION_BLOCK FB_Sample IMPLEMENTS I_SampleNew

Klicken Sie auf Klasse 14: und anschließend auf eine Schnittstelle.

Ein Realisierungspfeil weist von der Klasse zur Schnittstelle.

Die Klasse implementiert nun die Schnittstelle. Im Deklarationsteil der Klasse steht. Zum Beispiel:

FUNCTION_BLOCK FB_Sample IMPLEMENTS I_SampleExistent

Klicken Sie auf Klasse 15:.

Klasse 16:

Die Attribut- bzw. Operationsliste minimiert sich.

Klicken Sie auf Klasse 17:.

 

Die Attribut- bzw. Operationsliste expandiert.

Klicken Sie auf den Klassennamen. Ist er selektiert, dann ein weiteres Mal auf ihn klicken.

Nach dem ersten Klick ist der Name blau umrandet. Nach dem zweiten Klick öffnet der Zeileneditor.

Die Änderung wird im Projekt synchron und automatisch übernommen. D.h., der Objektname im Projektbaum und im Deklarationsteil der POU wird sofort angepasst.

Klicken Sie zwei Mal auf einen Attribut- oder Operationsnamen. Ändern Sie dann den Namen im Zeileneditor.

Nach dem ersten Klick ist der Name blau umrandet. Nach dem zweiten Klick öffnet der Zeileneditor.

Die Änderung wird im Projekt synchron und automatisch übernommen.

Doppelklicken Sie das Klassenelement.

Der zugehörige Objekteditor öffnet sich und Deklaration und Implementation werden angezeigt.

Sie können die Deklaration bzw. die Implementierung ändern. Nach Schließen des Objekts kehren Sie zum Klassendiagramm zurück. Die Änderungen werden automatisch ins Klassendiagramm übernommen.

Klasse 18:

Beachten Sie, dass die Voreinstellungen im Dialog „POU hinzufügen“ oder „Schnittstelle hinzufügen“ von der letzten Anwendung dieses Dialogs stammen.

Beispiele

Klasse 19:

PROGRAM Test
VAR
    fbSample    : FB_Sample;
    aSample     : ARRAY[1..10] OF FB_Sample;
END_VAR

 

Klasse 20:

PROGRAM Test
VAR
    pSample    : POINTER TO FB_Sample;
    aSample    : ARRAY[1..10] OF POINTER TO FB_Sample;
END_VAR

 

Klasse 21:

FUNCTION_BLOCK FB_Sub EXTENDS FB_Base

 

Klasse 22:

INTERFACE I_Cylinder EXTENDS I_Base
FUNCTION_BLOCK FB_Cylinder IMPLEMENTS I_Cylinder