# TC3: Projekt mit UML (Enterprise Architect) planen



## oliver.tonn (16 Januar 2021)

Hallo,
ich habe bei fast allen bisherigen Projekten die ich seit 2008 für verschiedene Kunden durchführte meist auf Zuruf programmiert. Bei den meisten Kunden kamen recht gut programmierte und dokumentierte Frameworks zum Einsatz auf die ich zunächst mehrere Tage geschult wurde, außerdem gab es zusätzlich Programmierrichtlinien. Realisiert habe ich dann meist kleinere Module einer Anlage, z.B. eine Einpresseinheit bei einer Montageanlage. Was mir sehr gut gefiel und meinen Fähigkeiten entsprach, natürlich gab es auch mal die eine oder andere Herausforderung, was ich auch gut fand und mit jedem Projekt lernte man ja auch was neues kennen. Die Programmierung erfolgte meist ohne großartige vorherige Planung, dennoch aber nicht planlos.
Nun habe ich das verrückte Gerücht gehört, dass man Projekte auch schon vorher planen kann und obwohl es total irre klingt, wollte ich es mal probieren.
OK, Spaß beiseite, ich habe bis heute nie ein Anlagenprogramm komplett bei 0 begonnen und habe leider überhaupt keine Ahnung, wie ich bei sowas vorgehen muss und eine Software anhand eines Pflichtenheftes und eventuell Plänen der Anlage plane und erstelle. Aus diesem Grunde lehne ich auch bisher Anfragen ab, bei denen eine, ich nenn es mal, White-Paper Entwicklung erfolgen soll. Eine Ausnahme gab es als ich vor 2008 schon eine Wiele als Angestellter und teilweise als freier Mitarbeiter für eine Firma tätig war die Anlagen für die Glasinnengravur gebaut hat. Die vorhandene Software sollte durch eine "komplett" neue ersetzt werden und so saßen der Chefentwickler, eine Studentin und ich zusammen und haben mit UML ein Sequenzdiagramm und vermutlich auch noch weitere Diagramm erstellt. Leider ist davon nicht wirklich was bei mir hängengeblieben und ich habe da glaube ich auch eher als Stichwortgeber fungiert. Nur mal ein Beispiel was passiert ist als ich alleine ein Projekt begonnen habe. Beim ersten Projekt 2008 habe ich eine SPS (Für AC500) und eine PC Software ohne sie vorher zu planen erstellt, wobei der PC via Netzwerk mit der SPS kommuniziert. Da es eine neue Software wurde, habe ich PC seitig entschieden, dass ich dafür auch eine neue Sprache nehme von der ich keine Ahnung habe (C und C++ kannte ich, aber auch mehr schlecht als recht), nämlich C#. Im Laufe der Erstellung habe ich die Software glaube ich mindestens 3-4 vom grundlegenden Konzept her komplett umgeschmissen, was mir bei passender Planung wohl, zumindest teilweise, erspart geblieben wäre. Ein weiteres Defizit das ich habe ist, dass ich meist nicht in der Lage bin den Zeitaufwand richtig einzuschätzen und sowas versuche immer zu vermeiden, aber das nur am Rande. Wenn ich Gespräche mit potentiellen Auftraggebern führe erwähne ich auch immer, dass ich nicht bei 0 anfange und immer ein Gerüst vorhanden sein muss. Das aktuelle Projekt hat jetzt allerdings auch gezeigt, dass ich meine Aussagen noch präzisieren muss und weitere Voraussetzungen hinzufügen muss, denn auch wenn ich mich seit November halbwegs halte muss ich doch das Fazit ziehen, dass ich für das Projekt nicht der richtige war. Das ist, so traurig es klingt, das erste Projekt, wo ich froh über das Ende bin, allerdings glaube ich geht es dem Auftraggeber auch nicht viel anders.
Doch jetzt endlich zu meiner eigentlichen Frage. Beim nächsten Projekt soll ich die Angestellten bei der Erstellung eines TC3 Projektes (Ja, es geht bei 0 los, aber in dem Fall sollte das passen und ich bin ja nicht alleine) unterstützen, mit dem in Verbindung mit dem TC3 EtherCAT Simulator (TE1111) I/Os simuliert werden sollen und so die Reaktion der Anlagensoftware überprüft werden soll, z.B. wenn die Karte für einen Temperaturfühler einen Fehler meldet oder eine Rückmeldung eines Ventils plötzlich ein "falsches" Signal liefert. Ausnahmsweise habe ich mir hierzu schon einige Gedanken gemacht. Beim Temperaturfühler z.B. würde ich über einen Eingang eine Rampe mit bestimmten Parametern auslösen wollen oder über ein BYTE Fehler auswählen die dann über ein BOOL aktiviert werden. Das Ganze möchte ich nun vorab mit Enterprise Architect etwas planen. Warum ausgerechnet damit? Nun, beim aktuellen Projekt wird die Software eingesetzt, weswegen ich eine Lizenz besitze  und ich muss bei dem aktuellen Kunden damit Diagramme erstellen ohne wirklich zu wissen was ich da eigentlich tue und welche Elemente/Objekte ich für was nehmen muss und wie ich diese verknüpfe. Nachdem ich jetzt einen Teil des Kompendiums gelesen habe muss ich aber zu dem Schluss kommen, dass der aktuelle Auftraggeber auch nicht 100% weiß was er tut, denn einiges was gemacht wurde ist nicht regelkonform.
Lange Rede kurzer (Un)sinn, wer kann mir hier weiterhelfen, z.B. mit Beispielen wie man einen FB in Enterprise Architect definiert, eine Instanz davon anlegt, oder z.B. eine Funktion definiert und diese nutzt, weil davon gibt es ja keine Instanzen. Aber auch wie Ihr sonst so vorgehen würdet, also z.B. den Ablauf in einem USE-Case oder Sequenz Diagramm anlegen. Über Beispiele und Dokus würde ich mich sehr freuen.


----------



## JSEngineering (16 Januar 2021)

Hallo Oliver,

zum konkreten Problem kann ich Dir nicht helfen, da ich damit noch nicht gearbeitet habe. Aber Du fragst ja auch nach generellem Vorgehen:

Ich für mich persönlich scheibe gerne alles in echten Worten nieder. Wo Worte nicht ausreichen, male ich Grafiken (z.B. mit yEd). Denn selbst wenn ich das jetzt schön in abstrakten Sprachen oder Diagrammen regelkonform notieren könnte: Am Ende muß mein Kunde drauf gucken und das abnicken. In der Regel wird der nix davon verstehen. Also: Klare Worte, klare Grafiken und beide Seiten verstehen sich.

Dann fange ich an, das Vorhaben runterzubrechen: Welche Module benötige ich, wie könnten die Aufgaben in kleine Teile runtergebrochen werden, welche Aufgaben wiederholen sich oder sind ähnlich, so daß man die kapseln kann.
Wenn man das ausformuliert, merkt man häufig schon, was wozu gehört, was mit wem interagiert.
Dann lege ich Schnittstellen fest, für jedes Modul, das ich identifiziert habe.

Sind alle Module mit Schnittstellen definiert, kann man die relativ leicht verschalten.

Beim Programmieren fange ich dann genau so an: Modul für Modul laut Definition herunterprogrammieren und einzeln austesten.
Dann verschalten und die Logik rein bringen.

So baut sich von innen her das Programm auf. Am Ende funktioniert es dann (meistens) so, wie man sich das gedacht hat. Und dann fängt die eigentliche Arbeit an: Der Kunde merkt, was er doch gerne hätte, obwohl er das nicht definiert hat 

Vielleicht hilft Dir das ja zum Anfangen weiter 

Schönes Wochenende!
      Jens


----------



## R_Grabichler (25 Januar 2021)

Hallo,
ich finde die Thematik hochinteressant, da ich mehr oder weniger autodidaktisch diese Struktur selbst erst aufbaue.
Ich befinde mich auch am Anfang dieser Reise, beschreibe hier einfach kurz mein Vorgehen.

Für mich steht das Ziel im Vordergrund, wiederbenutzbare Kleinsteinheiten zu haben, welche zusammengefügt dann eben Zylinder, Sensoren und so weiter ergeben.
In TwinCat werden diese Einheiten dann mit der Lib TcUnit getestet.



Zur Visualisierung benutze ich Diagram.org, um mir eine Struktur sowie notwendige Abläufe zu überlegen.
Programmiert wird somit von den kleinen Einheiten, die gestestet sind zu größeren Baugruppen.
Als Beispiel kurz die fault-Funktion.
Diese wird z.B. in einen Zylinder per Komposition eingebaut.
Der Zyl kann dann intern drauf zugreifen bzw. ist die Funktion von aussen parametriebar.
Bei einem Fehler wird autmatisch ein Event generiert, welcher im Hmi angezeigt wird.
Dieses Fehlernachricht ist parametrierbar, die Quelle wird ausgegeben, und ist über ein Interface wieder rücksetzbar.

Die Logik wird dann in viele kleine, separate States ausgelagert.
Diese sind möglichst unabhängig und kapseln das Verhalten weitestgehend.
Dadurch besteht die Möglichkeit, die Reihenfolge zu ändern, oder weitere Steps einzufügen, ohne große Anpassungen zu machen.

In meinem ersten größeren, eigenen Projekt ist das noch eher Theorie, da im Nachhinein viele Änderungen bzw. Erweiterungen immer wieder Anpassungen erzwungen haben,
welche dann die Struktur etwas verwässert haben.
Daraus folgere ich für mich, dass ich mir noch mehr Gedanken im Vorfeld über die STruktur und die Verschaltung der Abläufe und Baugruppen machen werde,
damit einfach diese Änderungen besser und einfacher integriert werden können.
Dazu lese ich derzeit diverse Bücher über Design Pattern, um somit die Struktur zu verbessern.

Falls Feedback oder Fragen, gerne anschreiben,
ansonsten gutes Gelingen.

Gruß
Roman


----------



## Blockmove (26 Januar 2021)

Also Enterprise Architect ist schon in vielen Fällen mit Kanonen auf Spatzen geschossen.
Um mal Meister Röhrich zu zitieren "Tut das Not?"
Selbst bei Anlagen mit ca. 1000 E/As habe ich noch nie so ein System vermisst.
Mir ist bis heute noch nicht klar wo der angebliche riesen Vorteile dieser Systeme sein soll.
Ganz besonders wenn man den gesamten Lebenszyklus einer Anlage betrachtet.

Ich handhabe es so wie Jens.
Entwurf auf dem Papier und dann Microsoft Visio oder auch yEd.
Klassisches Top-Down und Buttom-Up Prinzip.


----------



## oliver.tonn (28 Januar 2021)

Hallo,
erstmal danke für Eure Antworten und entschuldigt bitte, dass ich erst heute reagieren, aber beim letzten Projekt ist es die letzten Tage zum Ende hin stressig geworde.
Zunächst zur Frage warum Enterprise Architect genommen werden soll. Ganz einfach weil ich eine Lizenz dafür habe. Beim letzten Projekt wurde dies sehr intensiv genutzt, allerdings, wie ich nach dem teilweisen Studium des EA Kompendiums feststellen musste nicht immer korrekt. Die Anschaffung von Visio wurde ja auch Geld kosten und ob ich das nun in EA zeichne oder in Visio macht nur in soweit einen Unterschied, dass es in EA mehr Möglichkeiten gibt und man neben dem reinen Zeichnen auch auf die richtige Erstellung des Modells ankommt.
Im Großen und Ganzen bin auch ich ein Freund geschriebener Anleitungen mit Bildern, welche ich auch gerne selber verfasse, aber UML hat durchaus auch seine Berechtigung. Den Ablauf und einzelne Bausteine einer PC-Software für eine Glasinnengravuranlage hatte ich mit zwei Anderen, wie erwähnt, schon in UML geplant, allerdings ist davon nichts mehr hängengeblieben.
Daher hätte ich gerne gewusst, wie mit EA oder in UML allgemein z.B. ein FB mit seinen Ein- und Ausgängen und Methoden erstellt wird und ob man alle FBs je nach Menge und/oder Funktionsbereich auf eine oder mehrere Diagramm-Seiten verteilt und dann auf einer anderen Seite Instanzen davon "erzeugt".

@Jens: Danke für Deine Hinweise zu einer möglichen Vorgehensweise.


----------



## Hack (28 Januar 2021)

Hallo,

du programmierst doch teilweise mit TwinCAT. Da gibt es die Möglichkeit Die Programmstruktur direkt mit UML anzulegen. Es gibt aber auch die Möglichkeit, aus einem fertigen Projekt ein UML Klassendiagramm zu erstellen. Ich würde das einfach einmal für ein fertiges Projekt machen, dann siehst du wie dein Programm in UML aussieht. Ich denke, dass hilft dir dann auch beim umgekehrten Weg weiter.

Für das Klassendiagramm in TwinCAT brauchst du auch keine Lizenz. In deinem Fall würde ich den Vorteil sehen, dass du direkt schon die FBs, Methodetn etc. hättest.

Gruß


----------



## oliver.tonn (28 Januar 2021)

Hallo Hack,
vielen Dank für Deine Antwort.


Hack schrieb:


> du programmierst doch teilweise mit TwinCAT. Da gibt es die Möglichkeit Die Programmstruktur direkt mit UML anzulegen. Es gibt aber auch die Möglichkeit, aus einem fertigen Projekt ein UML Klassendiagramm zu erstellen. Ich würde das einfach einmal für ein fertiges Projekt machen, dann siehst du wie dein Programm in UML aussieht. Ich denke, dass hilft dir dann auch beim umgekehrten Weg weiter.
> 
> Für das Klassendiagramm in TwinCAT brauchst du auch keine Lizenz. In deinem Fall würde ich den Vorteil sehen, dass du direkt schon die FBs, Methodetn etc. hättest.


Das TC 3 UML mittlerweile unterstützt/beinhaltet wusste ich, allerdings bin ich davon ausgegangen, dass dort nichts ohne "echte" Lizenz läuft.


----------



## Hack (28 Januar 2021)

Eine Lizenz braucht nur das UML Statechart. Ich denke auf das kannst du verzichten .
Das wäre eine andere "Programmiersprache". Ich persönlich finde es kompliziert. Aber auch das wäre keine Entwicklungslizenz sondern eine Runtime Lizenz


----------



## oliver.tonn (1 Februar 2021)

So jetzt mal konkreter, da pro Beitrag nur 5 Bilder möglich sind in zwei Teilen.
Erstmal mein erster Entwurf für ein Ventil.
Zunächst die Projektstruktur:


Dann der FB:


Dann FB_Init:


Und MAIN:


----------



## oliver.tonn (1 Februar 2021)

Und das macht TC3 als UML daraus:


Was mir daran nicht gefällt ist, dass er den FB selber in das Klassendiagramm einfügt und keine Instanz, wenn ich diesen FB jetzt 20 mal benutzen würde hätte ich 20 Pfeile zu diesem FB.
In Enterprise Architect habe ich den FB so designt:


Wobei ich mir schon nicht sicher bin, ob ich zwei Instanzen von dem ENUM anhängen muss (eine für jede Nutzung) oder nur einen.
Hier die Definition des ENUM:


Und so sieht das Programm aus:


Hier stellt sich jetzt die Frage ob das so korrekt ist , oder ob z.B. die ENUMS als Instanz auch noch unter die FB Instanzen müssen und wie ich das alles verbinden soll.
Zur Auswahl stehen laut Kontextmenü die folgenden Verbindungen


Ich meine aber es gibt noch mehr.


----------

