Skip to main content

Entwerfen und Entwickeln

Wenn Sie im Klassendiagramm grafisch programmieren, führen Ihre Änderungen bei den Objekten in der Ansicht POUs und Geräte automatisch zu Anpassungen. Neue Objekte werden in ihrer Grundstruktur eingefügt, bestehende Objekte werden geändert. Beispielsweise können Sie über das Klassendiagramm in Programmierbausteinen Deklarationen einfügen.

So können Sie in einem Klassendiagramm die Architektur ihrer Applikation entwerfen und erhalten synchron die dazu passenden Programmierbausteine. Danach ergänzen Sie die Implementierungen in den Programmierbausteinen.

Im Folgenden sehen Sie die einzelnen Schritte zum Erstellen eines Klassendiagramms für eine Applikation.

1. Projekt erstellen

  1. Öffnen Sie CODESYS.

  2. Wählen Sie den Befehl Datei → Neues Projekt.

  3. Bestimmen Sie einen Namen und einen Ort und wählen Sie als Vorlage Standardprojekt.

    Der Dialog Standardprojekt öffnet sich.

  4. Wählen Sie in PLC_PRG in als Implementierungssprache ST.

    Das Projekt wird erstellt.

  5. Selektieren sie den Knoten Applikation und wählen Sie den Befehl Objekt hinzufügen → UML Klassendiagramm.

    Der Dialog UML Klassendiagramm hinzufügen erscheint.

  6. Geben Sie als Objektname CD_Simple ein.

  7. Aktivieren Sie die Option Projektstruktur in aktives Klassendiagramm importieren.

  8. Wählen sie Hinzufügen.

    _uml_img_cd_simple.png
  9. Speichern Sie das Projekt unter dem Namen SimpleMachine.project.

2. Schnittstellen identifizieren

Schnittstellen bestimmen öffentlich sichtbare Methoden und Eigenschaften, um damit Klassen zu realisieren.

  1. Öffnen Sie den Editor des Klassendiagramms CD_Simple.

  2. Selektieren Sie in der Ansicht Werkzeuge eine Schnittstelle.

  3. Ziehen Sie die Schnittstelle in den Editor.

    Der Dialog Schnittstelle hinzufügen öffnet sich.

  4. Geben Sie als Namen IBaseMachine ein. Schließen Sie den Dialog mit Hinzufügen.

  5. Selektieren Sie in der Ansicht Werkzeuge eine Methode.

  6. Ziehen Sie die Methode auf die Schnittstelle

    Der Dialog Schnittstellenmethode hinzufügen öffnet sich.

  7. Geben Sie als Namen DoIt ein.

  8. Geben Sie als Rückgabetyp BOOL ein. Schließen Sie den Dialog mit Hinzufügen.

  9. Selektieren Sie in der Ansicht Werkzeuge eine Eigenschaft.

  10. Ziehen Sie die Eigenschaft auf die Schnittstelle

    Der Dialog Schnittstelleneigenschaft hinzufügen öffnet sich.

  11. Geben Sie als Namen StateNumber ein.

  12. Geben Sie als Rückgabetyp INT ein. Schließen Sie den Dialog mit Hinzufügen.

    _uml_img_cd_simple_imachine.png

Tipp

Weitere Informationen zu Schnittstellen finden Sie unter Objekt Schnittstelle und Objekt Schnittstelleneigenschaft

3. Klassen identifizieren und Schnittstelle realisieren

Verschiedene Klassen, die dieselbe Schnittstelle realisieren, enthalten die gleichen Methoden und Eigenschaften. Wenn später die Schnittstelle geändert oder ergänzt wird, wirkt sich das auf alle realisierenden Klassen aus.

  1. Öffnen Sie den Editor des Klassendiagramms CD_Simple.

  2. Selektieren Sie in der Ansicht Werkzeuge eine Klasse.

  3. Ziehen Sie die Klasse in den Editor.

    Der Dialog POU hinzufügen öffnet sich.

  4. Geben Sie als Namen FB_Machine ein.

  5. Aktivieren Sie die Option Funktionsbaustein.

  6. Wählen Sie als Implementierungssprache UML - Zustandsdiagramm (Statechart SC) ein. Schließen Sie den Dialog mit Hinzufügen.

    Im Klassendiagramm wird die Klasse FB_Machine hinzugefügt.

  7. Selektieren Sie die Klasse.

    Über der Klasse erscheinen Befehlssymbole.

  8. Wählen Sie das Befehlssymbol _uml_icon_realization.png Realisierung (IMPLEMENTS) und klicken Sie auf die Schnittstelle IMachine.

    Der Dialog Implementierungssprache auswählen erscheint.

  9. Wählen Sie Strukturierter Text (ST).

    Die Klasse FB_Machine erbt die Eigenschaften und Methoden der Schnittstelle und realisiert damit die Schnittstelle IMachine.

    _uml_img_cd_simple_fbmachine.png

4. Generalisieren

Bei der Generalisierung erbt eine Klasse die Eigenschaften und Methoden von einer anderen Klasse.

  1. Öffnen Sie den Editor des Klassendiagramms CD_Simple.

  2. Selektieren Sie in der Ansicht Werkzeuge eine Klasse.

  3. Ziehen Sie eine Klasse in den Editor.

    Der Dialog POU hinzufügen öffnet sich.

  4. Geben Sie als Namen FB_Machine_A ein.

  5. Aktivieren Sie die Option Erweitert und geben Sie im Eingabefeld daneben FB_Machine an.

    Der Funktionsbaustein FB_Machine wird erweitert und ist deshalb eine Generalisierung von FB_Machine_A.

  6. Wählen Sie als Implementierungssprache UML - Zustandsdiagramm (Statechart SC). Schließen Sie den Dialog mit Hinzufügen.

    Im Klassendiagramm ist die Klasse FBMachine_A angelegt. Zwischen den Klassen FB_Machine und FB_Machine_A ist eine Generalisierung. FB_Machine_A erbt von FB_Machine deren Eigenschaften und Methoden.

  7. Wählen Sie in der Ansicht Werkzeuge das Element Variablendeklaration und ziehen Sie es auf die Klasse FB_Machine_A.

    Der Dialog Variable deklarieren öffnet sich.

  8. Geben Sie bei Name iCounter und bei Datentyp INT ein. Schließen Sie den Dialog mit OK.

    Die Klasse FB_Machine_A hat nun außer den geerbten Eigenschaften und Methoden eigene Variablen.

  9. Selektieren Sie in der Klasse FBMachine_A die Methode DoIt() und drücken Sie Entf.

    Die Methode wird im Diagramm entfernt, ebenso wie das Objekt in der Ansicht Geräte. Der erbende Funktionsbaustein FBMachine_A benötigt für die Methode keine spezielle eigene Implementierung, sondern ruft bei Bedarf die Methode DoIt des Basisfunktionsbausteins FBMachine auf.

    Anmerkung

    Verwenden Sie bei Aufrufen von Methoden, die einem Basisfunktionsbaustein zugeordnet und geerbt sind, den Pointer SUPER.

    _uml_img_cd_simple_fbmachine_a.png

Tipp

Weitere Informationen finden Sie unter Erweitern eines Funktionsbausteins und Pointer SUPER.

5. Instanziieren

  1. Öffnen Sie den Editor des Klassendiagramms CD_Simple.

  2. Selektieren Sie das Programm PLC_PRG.

    Über dem Programm erscheinen Befehlssymbole.

  3. Wählen Sie das Befehlssymbol _uml_icon_composition.png Komposition (VAR) und klicken Sie auf die Klasse FB_Machine_A.

    Der Dialog Variablendeklaration erscheint.

  4. Geben Sie als Namen fb_A ein.

    Das Objekt fb_A der Klasse FBMachine_A ist instanziiert. Nun wird während der Laufzeit die Instanz der Klasse in seiner konkreten Ausprägung erzeugt.

    _uml_img_cd_simple_plc_prg.png

Das Klassendiagramm stellt alle Objekte dar, die für die Generierung des Applikationscode relevant sind. Vor allem aber visualisiert das Klassendiagramm die Beziehungen unter den Objekten: Wer realisiert wen? Wer erbt von wem? Wer instanziiert was? Diese Information ist sonst in der Deklaration verborgen und beispielsweise in der Ansicht Geräte nicht ersichtlich.

6. Implementieren

  1. Öffnen Sie den Funktionsbaustein FBMachine.

  2. Deklarieren Sie die Funktionsbausteinvariablen.

    FUNCTION_BLOCK FBMachine IMPLEMENTS IBaseMachine
    VAR
        iState: INT;
        iMachine : INT;
    END_VAR
  3. Implementieren Sie den Funktionsbaustein.

    iState := iState + 1; // Dummy for control ID
  4. Implementieren Sie dessen Methode DoIt.

    METHOD PUBLIC DoIt : BOOL
    iMachine := iMachine + 1; // Dummy
  5. Implementieren Sie die Get-Methode der Eigenschaft StateNumber von FBMachine.

    StateNumber := iState;
  6. Implementieren Sie die Set-Methode der Eigenschaft StateNumber von FBMachine.

    iState := StateNumber;
  7. Öffnen Sie den Funktionsbaustein FBMachine_A.

  8. Deklarieren Sie die Funktionsbausteinvariablen.

    FUNCTION_BLOCK FBMachine IMPLEMENTS IBaseMachine
    VAR
     iCounter: INT;
    END_VAR
  9. Implementieren Sie den Funktionsbaustein.

    iCounter := iCounter + 1;
  10. Implementieren Sie die Get-Methode der Eigenschaft StateNumber von FBMachine_A.

    StateNumber := iCounter;
  11. Implementieren Sie die Set-Methode der Eigenschaft StateNumber von FBMachine_A.

    iCounter := StateNumber;
  12. Wählen Sie den Befehl Erstellen → Code erzeugen.

    Die Applikation wird fehlerfrei kompiliert.

    _uml_img_cd_simple_objects.png
  13. Laden und starten Sie die Applikation.

    Sie können die Funktionsbaustein-Instanz fb_A monitoren.

    _uml_img_cd_simple_monitoring.png