CompoundBlock Element: Unterschied zwischen den Versionen
Cg (Diskussion | Beiträge) |
Matilk (Diskussion | Beiträge) (→Editoren: translated) |
||
(34 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Einführung == |
== Einführung == |
||
Ein zusammengesetzter Aktionsblock beschreibt das Verhalten einer Aktion graphisch als |
Ein zusammengesetzter Aktionsblock (englisch "''Compound Action''") beschreibt das Verhalten einer [[Block_Element|Aktion]] graphisch als Aktivitätsdiagramm. Diese Diagramme sind vergleichbar mit den [[#Relation_zu_UML_Aktivit.C3.A4tsdiagrammen|Datenflussdiagrammen]] wie in UML2.0 definiert. Sie haben außerdem viele Eigenschaften gemein mit [[#Relation_zu_Petrinetzen|Petrinetzen]]. Das Diagramm besteht aus Unteraktionen, welche als [[DiagramElements-Step|''Schritte'']] bezeichnet werden. |
||
Die Ausführung wird durch eine Kombination von Daten- und Kontrollflüssen gesteuert, die durch Verbindungen zwischen den Schritten übertragen werden: |
|||
* Als Datenfluss wird die Übergabe von Werten (Resultate, Messwerte, Objekte, Dokumente etc.) von einem Schritt zum nächsten bezeichnet. Ein Datenfluss läuft über Verbindungen vom [[DiagramElements-Pin#Output_Pin|Ausgangspin]] (Pin = "Stecker/Sockel") eines Schritts zum [[DiagramElements-Pin#Input_Pin|Eingangspin]] eines anderen. |
|||
* Kontrollflüsse sind Informationen zum Endestatus eines Schrittes, die verwendet werden können, um die Aktion eines nächsten Schritts zu starten. Sie laufen über Verbindungen vom [[DiagramElements-Pin#Enable_Output_Pin|Trigger-Ausgang]] eines Schrittes zum [[DiagramElements-Pin#Enable_Input_Pin|Trigger-Eingang]] eines anderen. |
|||
Beide können die Ausführung eines Folgeschritts auslösen. |
|||
== Diagrammelemente == |
== Diagrammelemente == |
||
Als "''Diagrammelemente''" werden die Bestandteile eines Aktivitätsdiagramms bezeichnet. Sie definieren das Verhalten des [[Compound Block|Zusammengesetzten Aktionsblocks]] |
Als "''Diagrammelemente''" werden die Bestandteile eines Aktivitätsdiagramms bezeichnet. Sie definieren das Verhalten des [[Compound Block|Zusammengesetzten Aktionsblocks]] und werden im [[Compound Network Editor|Netzwerkeditor]] bearbeitet. |
||
== Einführendes Beispiel eines Aktivitätsdiagramms == |
== Einführendes Beispiel eines Aktivitätsdiagramms == |
||
Zeile 11: | Zeile 16: | ||
[[Bild:diagram-elements.jpg|760px|Ein Aktivitätsdiagramm]] |
[[Bild:diagram-elements.jpg|760px|Ein Aktivitätsdiagramm]] |
||
Das Diagramm beschreibt den Test einer |
Das Diagramm beschreibt den Test einer E-Mail-Übertragung. Zuerst erzeugt der Schritt "Create Unique ID" eine sog. UUID und stellt diese an seinem Ausgangspin zur Verfügung. Diese UUID wird später gebraucht, um den korrekten Empfang der E-Mail zu verifizieren. Die UUID wird vom Schritt "Send E-Mail [SMTP]" empfangen, welcher eine E-Mail mittels dem SMTP Protokoll verschickt, und die UUID als Subject verwendet. Als nächstes sorgt der "Time [Delay]" Schritt für eine Verzögerung von 5 Sekunden (in denen die E-Mail übermittelt wird). Am Ende prüft der Schritt "Check for incoming Mail" ob eine E-Mail mit dem angegebenen Subject angekommen ist, wozu obige UUID gebraucht wird. |
||
Der Test wird einen Fehler melden, falls eine solche |
Der Test wird einen Fehler melden, falls eine solche E-Mail nicht gefunden wird. |
||
Beachten Sie bitte, |
Beachten Sie bitte, dass die graphische Darstellung des Diagramms im Grunde der UML-Notation entspricht. Allerdings werden um die Lesbarkeit zu erhöhen, und um wichtige Aspekte der Ausführung hervorzuheben einige Element etwas anders bzw. zusätzlich annotiert dargestellt. Insbesondere werden die Stereotypen der Pins durch unterschiedliche Pin-Darstellungen hervorgehoben, anstatt durch textuelle "<<stereotype>>"-labels, wie in UML. |
||
<!-- |
<!--Originaltext: Die Definition des Aktivitätsdiagramms entspricht weitgehend der UML-Notation. Einzelne, für die Ausführung wichtige Eigenschaften werden allerdings graphisch hervorgehoben, wodurch sich das Bild im Detail von der UML-Notation leicht unterscheidet. Zum Beispiel werden die Trigger- und Puffer Eigenschaften der Pins durch verschiedene graphische Symbole angezeigt - zu diesen gibt es in der UML-Notation kein Gegenstück, da die UML-Notation derlei semantische Details unbeachtet bzw. durch Benutzerspezifische, nicht standardisierte Stereotypdefinitionen offen lässt (Stand UML2.0).--> |
||
=== [[DiagramElements-Step|Schritt]] (7) === |
=== [[DiagramElements-Step|Schritt]] (7) === |
||
Als "''Schritt'" wird eine Aktion (Aktionsbaustein) bezeichnet, welcher in ein Diagramm |
Als "''Schritt''" wird eine Aktion (Aktionsbaustein) bezeichnet, welcher in ein Diagramm platziert wurde. Diese Aktion kann ihrerseits entweder ein sog. [[Elementary Block|Elementablock]] sein (wie z.B. "Create Unique ID"), welche ihre Aktion durch eine textuellen Programmcode definiert, oder wieder ein [[Compound Block|zusammengesetzter Block]] (wie z.B. "Check Incoming Mail"), welcher durch ein eigenes Aktivitätsdiagramm definiert wurde. Für das Diagrammnetzwerk in welches der Aktionsblock platziert wurde ist kein Unterschied im Verhalten sichtbar: ein Diagramm, welches einen Aktionsblock beinhaltet (d.h. einen Schritt enthält) sieht kein unterschiedliches Verhalten in Abhängigkeit der effektiven Realisierung seiner Schritte. Tatsächlich gibt es auch keine Unterschiede in der graphischen Darstellung, so dass es auch für den Entwickler eines zusammengesetzten Blocks keinen Unterschied macht (er muss nicht wissen, wie die Interna einer Aktion aufgebaut sind). Alle Schritte werden gleichermaßen durch die Verfügbarkeit von Eingangsdaten gestartet, führen ihre Bearbeitung durch, und liefern ihre Resultate an den Ausgangspins. Details zum Verhalten von Schritten sind in einem [[DiagramElements-Step | separaten Document]] nachzulesen. |
||
=== Autostart (1) === |
=== Autostart (1) === |
||
Ein Schritt mit der Autostart Option wird automatisch gestartet, sobald das umgebende Netzwerk ausgeführt wird. Schritte ohne Autostart-Option werden lediglich ausgeführt, sobald Daten an den Eingangspins des Schrittes erscheinen. Autostart wird insbesondere für Schritte benötigt, welche keine Eingangspins haben, oder welche nicht durch einen Kontrollfluss gestartet werden. Auch Schritte, deren Eingang lediglich konstante Parameter darstellen müssen so gestartet werden. Im obigen Diagramm trifft dies für den linken "Create Unique ID" Schritt zu. |
|||
A step with autostart option will be triggered automatically, whenever the containing activity diagram network is executed. Without the autostart option, steps are only started when input data arrives at the step's input pin(s). Autostart is required for steps which have no input and are not triggered by a control flow connection. In the above diagram, this is the case for the leftmost "Create Unique ID" step. |
|||
Im Diagrammeditor werden Schritte mit Autostart mit einem speziellen Icon am linken oberen Rand dargestellt; falls Sie die Standard-UML-Notation bevorzugen, können Sie auch einen START-Block aus der Bibliothek verwenden und dessen Trigger-Ausgangspin mit dem zuerst auszuführenden Schritt verbinden. |
|||
The diagram editor renders auto started blocks with a special icon at its top-left corner; if you prefer the standard UML notation, you can place a separate START block and connect its trigger pins. |
|||
=== [[DiagramElements-Pin|Pin]] (3, 6, 9) === |
=== [[DiagramElements-Pin|Pin]] (3, 6, 9) === |
||
[[DiagramElements-Pin|Pins]] |
[[DiagramElements-Pin|Pins]] dienen zur Weitergabe von Daten und Triggerinformationen zwischen Schritten. Diese Pins können entweder [[DiagramElements-Pin#Output Pin|Ausgangespins]] (3) sein, um Daten zu senden, oder [[DiagramElements-Pin#Input Pin|Eingangspins]] (9), um Daten zu empfangen. Weitere Pins dienen dazu besondere Situationen wie z.B. [[DiagramElements-Pin#Exception Output Pin|Ausnahmebehandlung]] zu melden. Im obigen Diagramm, ist der Exception-Ausgang des "Check Incoming Mail" Schritts mit dem Trigger-Eingang des "FAIL" Schrittes verbunden. |
||
Kontrollflusspins (Trigger und Status) sind vertikal angeordnet, wohingegen Datenflüsse als horizontal Pins dargestellt werden. |
|||
Control-flow pins (trigger and status) are vertical pins, whereas data-flow pins are oriented horizontally. |
|||
Eingangspins sind immer oben oder links, Ausgangspins immer unten oder rechts angeordnet. |
|||
Input pins are always located at the top or left, whereas output pins are always found at the right or bottom. |
|||
Pins werden entsprechend ihrem Verhalten leicht unterschiedlich dargestellt; insbesondere auf das Puffer- und Triggerverhalten wird durch ausgefüllt vs. nicht gefüllt hingewiesen, da diese wichtig sind für die Ausführung. Pins werden in einem [[DiagramElements-Pin | separaten Dokument]] detailliert beschrieben. |
|||
Pins are rendered according to their behavior during execution; especially buffered vs. unbuffered behavior are drawn differently (filled vs. unfilled) to highlight this important fact. Pins are described in detail in a [[DiagramElements-Pin | separate document]]. |
|||
=== [[DiagramElements-Connection| |
=== [[DiagramElements-Connection|Verbindung]] (4,8) === |
||
Verbindungen dienen zum Weiterleiten von Daten oder Kontrollinformationen zu einem oder mehreren Eingangspins (eines oder mehrerer Folgeschritte). |
|||
Connections are used to interconnect steps to pass data or control information from an output pin to one or more input pins. |
|||
Im Sinne von UML sind alle Verbindungen in expecco immer "Objektverbindungen". |
|||
In the UML sense, all connections are object connections. |
|||
==== |
==== Datenflussverbindung (4) ==== |
||
Diese befördern Daten (-Objekte) von einem Ausgangspin zu einem Eingangspins eines Folgeschritts. Im obigen Beispiel sendet der erste Schritt die erzeugte UUID an zwei weitere Schritte. |
|||
These connections deliver data from a step's output pin to another step's input pin. In the example, the first step sends the generated UUID to two other steps. |
|||
Datenflusspins sind immer links und rechts angeordnet (horizontale Pins). |
|||
Data flow pins are always located at the left and right of a step (horizontal pins). |
|||
==== |
==== Kontrollflussverbindung (8) ==== |
||
Diese dienen dazu, die Ausführung unabhängig von Daten (aber abhängig von der Ausführung eines Schrittes) zu kontrollieren. Im Beispiel werden die Schritte rechts im Bild sequentiell ausgeführt, wozu der Triggerausgang eines Schrittes mit dem Triggereingang eines Folgeschrittes verbunden wurde. |
|||
These connections are used to control the execution order in an activity diagram. In the example the steps on the right are executed sequential. |
|||
Kontrollflusspins sind immer oben und unten angeordnet (vertikale Pins). |
|||
Control flow pins are always located at the top and bottom of a step (vertical pins). |
|||
=== [[DiagramElements-Freeze Value|Freeze Value]] (6) === |
=== [[DiagramElements-Freeze Value|Freeze Value (Vorbelegungswert)]] (6) === |
||
Eingangswerte eines Pins können mit einem statischen Wert vorbelegt werden (Konstante). |
|||
The data which is read by a pin can be frozen to a static value (constant). In the example the message text, the e-mail address, the waiting time and also the failure message are frozen. |
|||
Im Beispiel sind der Text der E-Mail, die E-Mail-Adresse, die Wartezeit und auch die Fehlermeldung auf diese Weise "eingefroren". |
|||
A frozen pin should typically be configured to be non-triggering, non-consuming (so called "parameter pin"). For details on triggering and consumation of values, please read [[DiagramElements-Pin#Input Pin|input pin behavior]]. |
|||
Ein vorbelegter Pin sollte typischerweise als nicht-triggernd und nicht-konsumierend (sogenannter "''Parameterpin''") konfiguriert werden, wofür es einen besonderen Menüeintrag gibt (außerdem werden beim "''Einfrieren''" die Pins vom Editor automatisch als solche umdefiniert). Details zum Triggerverhalten und zum Konsumieren von Eingangswerten finden sie im Dokument: [[DiagramElements-Pin#Input Pin|"''Verhalten von Eingangspins''"]]. |
|||
=== [[DiagramElements-Freeze Value| |
=== [[DiagramElements-Freeze Value|Vorbelegung aus Umgebungsvariablen]] (5) === |
||
Eingangswerte eines Pins können ebenfalls aus einer Variable gelesen werden. Diese Variablen werden in einer sogenannten "''Variablenumgebung''" bereit gestellt, welche im umgebenden zusammengesetzten Bausteinen oder der [[TestSuite Element|Testsuite]] definiert werden. Im obigen Beispiel werden der Name des E-Mail-Kontos sowie der E-Mail-Serverhost aus solchen Variablen gelesen (und entsprechende Einträge in der Variablenumgebung der Testsuite vorausgesetzt). Wie auch reguläre Vorbelegungen sollte der Pin als nicht-triggernd und nicht-konsumierend definiert werden (i.e. "''Parameterpin''"). Lesen Sie dazu ebenfalls das Kapitel [[DiagramElements-Pin#Input Pin|"''Verhalten von Eingangspins''"]]. |
|||
The data for a pin can also read from a variable. These can be defined in the environment of the compound block or the [[Testsuite Element|testsuite]]. In the example, the user name and the server are fetched from such variables. A frozen pin should typically be configured to be non-triggering, non-consuming (so called "parameter pin"). For details on triggering and consumation of values, please read [[DiagramElements-Pin#Input Pin|input pin behavior]]. |
|||
=== [[DiagramElements-Annotation|Annotation]] (2) === |
=== [[DiagramElements-Annotation|Annotation]] (2) === |
||
Annotationen dienen dazu, Kommentare oder Zusatzinformationen für Entwickler oder Tester im Diagramm mit abzulegen. Möglich sind sowohl textuelle Annotation, als auch importierte Grafiken (Bilder im GIF-, JPEG- oder PNG-Format). Sie können auch dazu genutzt werden, um wichtige Teile des Diagramms farblich hervorzuheben, indem Sie eine leere Textannotation mit einer Hintergrundfarbe unter Teile ihres Diagramms legen. |
|||
In order to comment a diagram, or to place additional notes for developers and testers, annotations can be used. Annotations can be either text fields or imported graphics (gif, jpg or png images). You can highlight important parts of the diagram by using an empty text annotation with a non-white background color. |
|||
=== [[DiagramElements-Probe| |
=== [[DiagramElements-Probe|Messfühler]] === |
||
Messfühler (im obigen Diagramm nicht gezeigt) dienen dazu Pin-Werte aufzuzeichnen und/oder zu validieren. Messfühler bieten einen komfortablen und lesbaren Mechanismus um Werte auf ihre Gültigkeit zu prüfen. |
|||
Probes (not shown in the above diagram) allow for pin-values to be recorded and/or checked for being valid. Probes provide an easy to use and concise mechanism for value checking. Probes are not supported by pre 2.1 expecco versions. |
|||
== |
== Semantik == |
||
⚫ | |||
A Petri Net [http://en.wikipedia.org/wiki/Petri_net| ->Wikipedia] is a network consisting of places (with possible action processing) and transitions. In a classical petri net, anonymous tokens travel along connections and transitions control the firing (triggering) of following action steps depending on the arrival of tokens at their input side, and passing tokens to their output side. Expecco has combined the transition and place functionality into a single step item, in order to make the graphical representation more dense (and also for its similarity with UML-2 activity diagrams and other flow based diagrams). However, semantically, they behave the same, and any diagram could be rewritten by using separate items (collecting inputs and passing a tuple of tokens on to the place). |
|||
Expeccos Aktivitätsdiagramme ähneln stark den Funktionblöcken der IEC1131-3 FBD Sprache (siehe ua. [https://en.wikipedia.org/wiki/Function_block_diagram Wikipedia]). |
|||
Sowohl die grafische Darstellung als auch das Ausführungsverhalten sind vergleichbar. Ingenieure mit einem SPS Hintergrund werden keine Probleme haben, Expeccos Aktionsdefinitionen und zusammengesetzte Aktionen zu verstehen. |
|||
=== Relation zu Petrinetzen === |
|||
Ein Petri-Netz [https://de.wikipedia.org/wiki/Petri-Netz (siehe Wikipedia)] ist ein Netzwerk, das aus Knoten (''Stellen'' oder auch ''Plätze'' genannt, mit möglicher Aktionsbehandlung) und Übergängen besteht. In klassischen Petri-Netzen bewegen sich anonyme Tokens entlang von Verbindungen. Übergänge kontrollieren das Auslösen (Triggern) der folgenden Aktionsschritte abhängig von der Ankunft von Tokens auf der Eingangsseite, und geben Tokens an die Ausgangsseite weiter. |
|||
Expecco kombiniert die Übergangs- und Stellenfunktionalität in einem einzelnen Schrittelement um die grafische Representation dichter zu machen (und auch um eine Ähnlichkeit mit UML-2-Aktivitätsdiagrammen und anderen flussbasierten Diagrammen zu bekommen). Semantisch verhalten sie sich jedoch gleich und jedes Diagramm könnte mit separaten Elementen umgeschrieben werden (durch sammeln der Eingaben und Weitergabe eines Tupels mit Tokens an die Stelle). |
|||
[[Datei:Beispiel.png]] |
[[Datei:Beispiel.png]] |
||
Ein expecco-Schritt mit mehreren Eingabepins entspricht einem Petri-Netz-Übergang mit mehreren Eingaben gefolgt von einer Petri-Netz-Aktion. Wie bei einem Übergang in einem Petri-Netz kann die Eingangsseite eines Schrittes so konfiguriert werden, dass entweder irgendein Eingabewert oder alle Eingabewerte vorliegen müssen. In expecco wird das als "''Aktivierungsbedingung''" des Schritts bezeichnet und ist genauer in der [[DiagramElements-Step|Dokumentation zum Schritt]] beschrieben. |
|||
"'' |
"''Höhere Petri-Netze''" sind Petri-Netze, die andere Petri-Netze als Stellen enthalten, was in expecco genau den zusammengesetzten Aktionen entspricht.<br> |
||
"'' |
"''Farbige Petri-Netze''" sind Petri-Netze, bei denen keine einfachen anonymen Tokens weitergereicht werden, sondern Datenobjekte (oder Referenzen darauf, wie in expecco). |
||
Deshalb sind expecco-Diagramme in Standard-Petri-Netz-Notation "''Höhere farbige Petri-Netze''". |
|||
Thus, in standard Petri Net notation, expecco's diagrams are therefore "''higher ordered colored Petri Nets''". |
|||
== Relation zu UML Aktivitätsdiagrammen == |
=== Relation zu UML Aktivitätsdiagrammen === |
||
--- to be written |
|||
Zusammengesetzte Aktionen in expecco sind isomorph zu UML-Aktivitätsdiagrammen mit einer bestimmten vordefinierten Sammlung an Stereotypen für Verbindungen, Pins und Aktionsschritte. Diese Stereotypen sind in expecco fest einprogrammiert und definieren die Semantik des Auslösens von Aktionen, der Ausführungsreihenfolge von Datenverbindungen und der optionalen parallelen Ausführung von Schritten. Die grafische Representation ist leicht anders; die leicht umständlichen <<Stereotyp>>-Vermerke werden durch verschiedene Pin-Darstellungen (gefüllt/leer usw.) ersetzt. Außerdem sind alle Verbindungen in expecco Objekt-Verbindungen und alle Pins erhalten und erzeugen Objekte als Werte. |
|||
⚫ | |||
Activity diagrams can be seen as a superset of flow chart diagrams. Flow charts can be translated into an activity diagram in which only control flow connections are used. Vice versa: an activity diagram which uses only control flow connections and uses no parallelism can be translated back into a flow chart diagram. |
|||
=== Relation zu Flussdiagrammen === |
|||
The if-then-else conditional branches of a traditional flow chart diagram correspond to the 2-way if action blocks of the expecco standard library. Loops are implemented by connecting a trigger output pin to a previous step's trigger input pin. |
|||
Aktivitätsdiagramme können als Obermenge von Flussdiagrammen betrachtet werden. Dazu werden die Aktionen lediglich über Kontrollflussverbindungen (Trigger-in/Trigger-out) verbunden (Daten werden hierbei über Variablen ausgetauscht). |
|||
Die Wenn-Dann bedingte Verzeigung eines Flussdiagramms entspricht einem 2-Wege-If Aktionsblock (aus der Standardbibliothek). Schleifen werden durch Verbindungen der Trigger-out mit einem Trigger-in eines vorhergehenden Schrittes definiert. |
|||
== Editoren == |
== Editoren == |
||
Das Aktivitätsdiagramm, das das Verhalten eines zusammengesetzten Bausteins definiert, kann im [[CompoundBlock Editor-CompoundWorksheet Editor|''Netzwerkeditor'']] – auch "''Diagrammeditor''" oder "''Netzwerkdiagrammeditor''" genannt – bearbeitet werden. Dieser Editor zeigt die "Innenansicht" des Bausteins. Die Schnittstelle eines zusammengesetzten Bausteins (d.h. Anzahl und Art der Pins) kann hingegen als "Außenansicht" angesehen werden und wird im [[Scheme Editor|''Schema Editor'']] gezeigt und definiert. |
|||
The activity diagram which defines the behavior of a compound block |
|||
is edited in the [[CompoundBlock Editor-CompoundWorksheet Editor/en|''network editor'']], also called "''diagram editor''" or "''network diagram editor''". |
|||
== Siehe auch == |
|||
This editor presents the "internal view" of the block. |
|||
[[Tree Elements | Tree Elements]] |
|||
In contrast, the interface of an compound block (e.g. number and type of pins) can be regarded as its "external view" and is presented and defined in the [[Scheme Editor/en|''schema editor'']]. |
|||
[[Block Element]], [[DiagramElements-Step/en|Schritt]], [[DiagramElements-Connection|Verbindung]], |
|||
[[ElementaryBlock_Element|Elementaraktion]], |
|||
Zurück zur [[Online Documentation#Tree Elements|Online Documentation]]. |
|||
[[Category: Tree Elements]] |
[[Category: Tree Elements]] |
Aktuelle Version vom 17. Juli 2024, 12:33 Uhr
Inhaltsverzeichnis
Einführung[Bearbeiten]
Ein zusammengesetzter Aktionsblock (englisch "Compound Action") beschreibt das Verhalten einer Aktion graphisch als Aktivitätsdiagramm. Diese Diagramme sind vergleichbar mit den Datenflussdiagrammen wie in UML2.0 definiert. Sie haben außerdem viele Eigenschaften gemein mit Petrinetzen. Das Diagramm besteht aus Unteraktionen, welche als Schritte bezeichnet werden.
Die Ausführung wird durch eine Kombination von Daten- und Kontrollflüssen gesteuert, die durch Verbindungen zwischen den Schritten übertragen werden:
- Als Datenfluss wird die Übergabe von Werten (Resultate, Messwerte, Objekte, Dokumente etc.) von einem Schritt zum nächsten bezeichnet. Ein Datenfluss läuft über Verbindungen vom Ausgangspin (Pin = "Stecker/Sockel") eines Schritts zum Eingangspin eines anderen.
- Kontrollflüsse sind Informationen zum Endestatus eines Schrittes, die verwendet werden können, um die Aktion eines nächsten Schritts zu starten. Sie laufen über Verbindungen vom Trigger-Ausgang eines Schrittes zum Trigger-Eingang eines anderen.
Beide können die Ausführung eines Folgeschritts auslösen.
Diagrammelemente[Bearbeiten]
Als "Diagrammelemente" werden die Bestandteile eines Aktivitätsdiagramms bezeichnet. Sie definieren das Verhalten des Zusammengesetzten Aktionsblocks und werden im Netzwerkeditor bearbeitet.
Einführendes Beispiel eines Aktivitätsdiagramms[Bearbeiten]
Das folgende Beispiel erläutert die Hauptkomponenten eines Aktivitätsdiagramms:
Das Diagramm beschreibt den Test einer E-Mail-Übertragung. Zuerst erzeugt der Schritt "Create Unique ID" eine sog. UUID und stellt diese an seinem Ausgangspin zur Verfügung. Diese UUID wird später gebraucht, um den korrekten Empfang der E-Mail zu verifizieren. Die UUID wird vom Schritt "Send E-Mail [SMTP]" empfangen, welcher eine E-Mail mittels dem SMTP Protokoll verschickt, und die UUID als Subject verwendet. Als nächstes sorgt der "Time [Delay]" Schritt für eine Verzögerung von 5 Sekunden (in denen die E-Mail übermittelt wird). Am Ende prüft der Schritt "Check for incoming Mail" ob eine E-Mail mit dem angegebenen Subject angekommen ist, wozu obige UUID gebraucht wird. Der Test wird einen Fehler melden, falls eine solche E-Mail nicht gefunden wird.
Beachten Sie bitte, dass die graphische Darstellung des Diagramms im Grunde der UML-Notation entspricht. Allerdings werden um die Lesbarkeit zu erhöhen, und um wichtige Aspekte der Ausführung hervorzuheben einige Element etwas anders bzw. zusätzlich annotiert dargestellt. Insbesondere werden die Stereotypen der Pins durch unterschiedliche Pin-Darstellungen hervorgehoben, anstatt durch textuelle "<<stereotype>>"-labels, wie in UML.
Schritt (7)[Bearbeiten]
Als "Schritt" wird eine Aktion (Aktionsbaustein) bezeichnet, welcher in ein Diagramm platziert wurde. Diese Aktion kann ihrerseits entweder ein sog. Elementablock sein (wie z.B. "Create Unique ID"), welche ihre Aktion durch eine textuellen Programmcode definiert, oder wieder ein zusammengesetzter Block (wie z.B. "Check Incoming Mail"), welcher durch ein eigenes Aktivitätsdiagramm definiert wurde. Für das Diagrammnetzwerk in welches der Aktionsblock platziert wurde ist kein Unterschied im Verhalten sichtbar: ein Diagramm, welches einen Aktionsblock beinhaltet (d.h. einen Schritt enthält) sieht kein unterschiedliches Verhalten in Abhängigkeit der effektiven Realisierung seiner Schritte. Tatsächlich gibt es auch keine Unterschiede in der graphischen Darstellung, so dass es auch für den Entwickler eines zusammengesetzten Blocks keinen Unterschied macht (er muss nicht wissen, wie die Interna einer Aktion aufgebaut sind). Alle Schritte werden gleichermaßen durch die Verfügbarkeit von Eingangsdaten gestartet, führen ihre Bearbeitung durch, und liefern ihre Resultate an den Ausgangspins. Details zum Verhalten von Schritten sind in einem separaten Document nachzulesen.
Autostart (1)[Bearbeiten]
Ein Schritt mit der Autostart Option wird automatisch gestartet, sobald das umgebende Netzwerk ausgeführt wird. Schritte ohne Autostart-Option werden lediglich ausgeführt, sobald Daten an den Eingangspins des Schrittes erscheinen. Autostart wird insbesondere für Schritte benötigt, welche keine Eingangspins haben, oder welche nicht durch einen Kontrollfluss gestartet werden. Auch Schritte, deren Eingang lediglich konstante Parameter darstellen müssen so gestartet werden. Im obigen Diagramm trifft dies für den linken "Create Unique ID" Schritt zu.
Im Diagrammeditor werden Schritte mit Autostart mit einem speziellen Icon am linken oberen Rand dargestellt; falls Sie die Standard-UML-Notation bevorzugen, können Sie auch einen START-Block aus der Bibliothek verwenden und dessen Trigger-Ausgangspin mit dem zuerst auszuführenden Schritt verbinden.
Pin (3, 6, 9)[Bearbeiten]
Pins dienen zur Weitergabe von Daten und Triggerinformationen zwischen Schritten. Diese Pins können entweder Ausgangespins (3) sein, um Daten zu senden, oder Eingangspins (9), um Daten zu empfangen. Weitere Pins dienen dazu besondere Situationen wie z.B. Ausnahmebehandlung zu melden. Im obigen Diagramm, ist der Exception-Ausgang des "Check Incoming Mail" Schritts mit dem Trigger-Eingang des "FAIL" Schrittes verbunden. Kontrollflusspins (Trigger und Status) sind vertikal angeordnet, wohingegen Datenflüsse als horizontal Pins dargestellt werden. Eingangspins sind immer oben oder links, Ausgangspins immer unten oder rechts angeordnet. Pins werden entsprechend ihrem Verhalten leicht unterschiedlich dargestellt; insbesondere auf das Puffer- und Triggerverhalten wird durch ausgefüllt vs. nicht gefüllt hingewiesen, da diese wichtig sind für die Ausführung. Pins werden in einem separaten Dokument detailliert beschrieben.
Verbindung (4,8)[Bearbeiten]
Verbindungen dienen zum Weiterleiten von Daten oder Kontrollinformationen zu einem oder mehreren Eingangspins (eines oder mehrerer Folgeschritte). Im Sinne von UML sind alle Verbindungen in expecco immer "Objektverbindungen".
Datenflussverbindung (4)[Bearbeiten]
Diese befördern Daten (-Objekte) von einem Ausgangspin zu einem Eingangspins eines Folgeschritts. Im obigen Beispiel sendet der erste Schritt die erzeugte UUID an zwei weitere Schritte. Datenflusspins sind immer links und rechts angeordnet (horizontale Pins).
Kontrollflussverbindung (8)[Bearbeiten]
Diese dienen dazu, die Ausführung unabhängig von Daten (aber abhängig von der Ausführung eines Schrittes) zu kontrollieren. Im Beispiel werden die Schritte rechts im Bild sequentiell ausgeführt, wozu der Triggerausgang eines Schrittes mit dem Triggereingang eines Folgeschrittes verbunden wurde. Kontrollflusspins sind immer oben und unten angeordnet (vertikale Pins).
Freeze Value (Vorbelegungswert) (6)[Bearbeiten]
Eingangswerte eines Pins können mit einem statischen Wert vorbelegt werden (Konstante). Im Beispiel sind der Text der E-Mail, die E-Mail-Adresse, die Wartezeit und auch die Fehlermeldung auf diese Weise "eingefroren". Ein vorbelegter Pin sollte typischerweise als nicht-triggernd und nicht-konsumierend (sogenannter "Parameterpin") konfiguriert werden, wofür es einen besonderen Menüeintrag gibt (außerdem werden beim "Einfrieren" die Pins vom Editor automatisch als solche umdefiniert). Details zum Triggerverhalten und zum Konsumieren von Eingangswerten finden sie im Dokument: "Verhalten von Eingangspins".
Vorbelegung aus Umgebungsvariablen (5)[Bearbeiten]
Eingangswerte eines Pins können ebenfalls aus einer Variable gelesen werden. Diese Variablen werden in einer sogenannten "Variablenumgebung" bereit gestellt, welche im umgebenden zusammengesetzten Bausteinen oder der Testsuite definiert werden. Im obigen Beispiel werden der Name des E-Mail-Kontos sowie der E-Mail-Serverhost aus solchen Variablen gelesen (und entsprechende Einträge in der Variablenumgebung der Testsuite vorausgesetzt). Wie auch reguläre Vorbelegungen sollte der Pin als nicht-triggernd und nicht-konsumierend definiert werden (i.e. "Parameterpin"). Lesen Sie dazu ebenfalls das Kapitel "Verhalten von Eingangspins".
Annotation (2)[Bearbeiten]
Annotationen dienen dazu, Kommentare oder Zusatzinformationen für Entwickler oder Tester im Diagramm mit abzulegen. Möglich sind sowohl textuelle Annotation, als auch importierte Grafiken (Bilder im GIF-, JPEG- oder PNG-Format). Sie können auch dazu genutzt werden, um wichtige Teile des Diagramms farblich hervorzuheben, indem Sie eine leere Textannotation mit einer Hintergrundfarbe unter Teile ihres Diagramms legen.
Messfühler[Bearbeiten]
Messfühler (im obigen Diagramm nicht gezeigt) dienen dazu Pin-Werte aufzuzeichnen und/oder zu validieren. Messfühler bieten einen komfortablen und lesbaren Mechanismus um Werte auf ihre Gültigkeit zu prüfen.
Semantik[Bearbeiten]
Relation zu IEC1131[Bearbeiten]
Expeccos Aktivitätsdiagramme ähneln stark den Funktionblöcken der IEC1131-3 FBD Sprache (siehe ua. Wikipedia). Sowohl die grafische Darstellung als auch das Ausführungsverhalten sind vergleichbar. Ingenieure mit einem SPS Hintergrund werden keine Probleme haben, Expeccos Aktionsdefinitionen und zusammengesetzte Aktionen zu verstehen.
Relation zu Petrinetzen[Bearbeiten]
Ein Petri-Netz (siehe Wikipedia) ist ein Netzwerk, das aus Knoten (Stellen oder auch Plätze genannt, mit möglicher Aktionsbehandlung) und Übergängen besteht. In klassischen Petri-Netzen bewegen sich anonyme Tokens entlang von Verbindungen. Übergänge kontrollieren das Auslösen (Triggern) der folgenden Aktionsschritte abhängig von der Ankunft von Tokens auf der Eingangsseite, und geben Tokens an die Ausgangsseite weiter.
Expecco kombiniert die Übergangs- und Stellenfunktionalität in einem einzelnen Schrittelement um die grafische Representation dichter zu machen (und auch um eine Ähnlichkeit mit UML-2-Aktivitätsdiagrammen und anderen flussbasierten Diagrammen zu bekommen). Semantisch verhalten sie sich jedoch gleich und jedes Diagramm könnte mit separaten Elementen umgeschrieben werden (durch sammeln der Eingaben und Weitergabe eines Tupels mit Tokens an die Stelle).
Ein expecco-Schritt mit mehreren Eingabepins entspricht einem Petri-Netz-Übergang mit mehreren Eingaben gefolgt von einer Petri-Netz-Aktion. Wie bei einem Übergang in einem Petri-Netz kann die Eingangsseite eines Schrittes so konfiguriert werden, dass entweder irgendein Eingabewert oder alle Eingabewerte vorliegen müssen. In expecco wird das als "Aktivierungsbedingung" des Schritts bezeichnet und ist genauer in der Dokumentation zum Schritt beschrieben.
"Höhere Petri-Netze" sind Petri-Netze, die andere Petri-Netze als Stellen enthalten, was in expecco genau den zusammengesetzten Aktionen entspricht.
"Farbige Petri-Netze" sind Petri-Netze, bei denen keine einfachen anonymen Tokens weitergereicht werden, sondern Datenobjekte (oder Referenzen darauf, wie in expecco).
Deshalb sind expecco-Diagramme in Standard-Petri-Netz-Notation "Höhere farbige Petri-Netze".
Relation zu UML Aktivitätsdiagrammen[Bearbeiten]
Zusammengesetzte Aktionen in expecco sind isomorph zu UML-Aktivitätsdiagrammen mit einer bestimmten vordefinierten Sammlung an Stereotypen für Verbindungen, Pins und Aktionsschritte. Diese Stereotypen sind in expecco fest einprogrammiert und definieren die Semantik des Auslösens von Aktionen, der Ausführungsreihenfolge von Datenverbindungen und der optionalen parallelen Ausführung von Schritten. Die grafische Representation ist leicht anders; die leicht umständlichen <<Stereotyp>>-Vermerke werden durch verschiedene Pin-Darstellungen (gefüllt/leer usw.) ersetzt. Außerdem sind alle Verbindungen in expecco Objekt-Verbindungen und alle Pins erhalten und erzeugen Objekte als Werte.
Relation zu Flussdiagrammen[Bearbeiten]
Aktivitätsdiagramme können als Obermenge von Flussdiagrammen betrachtet werden. Dazu werden die Aktionen lediglich über Kontrollflussverbindungen (Trigger-in/Trigger-out) verbunden (Daten werden hierbei über Variablen ausgetauscht).
Die Wenn-Dann bedingte Verzeigung eines Flussdiagramms entspricht einem 2-Wege-If Aktionsblock (aus der Standardbibliothek). Schleifen werden durch Verbindungen der Trigger-out mit einem Trigger-in eines vorhergehenden Schrittes definiert.
Editoren[Bearbeiten]
Das Aktivitätsdiagramm, das das Verhalten eines zusammengesetzten Bausteins definiert, kann im Netzwerkeditor – auch "Diagrammeditor" oder "Netzwerkdiagrammeditor" genannt – bearbeitet werden. Dieser Editor zeigt die "Innenansicht" des Bausteins. Die Schnittstelle eines zusammengesetzten Bausteins (d.h. Anzahl und Art der Pins) kann hingegen als "Außenansicht" angesehen werden und wird im Schema Editor gezeigt und definiert.
Siehe auch[Bearbeiten]
Block Element, Schritt, Verbindung, Elementaraktion,
Zurück zur Online Documentation.