Richtige Anwendung der Flow-Chart-Bausteine
1 Einführung
Mit der Flow-Chart Bibliothek lässt sich eine Ablaufprogrammierung realisieren, d.h. der Steuerfluss von Programmen kann in Form von Flowcharts manipuliert werden.
Damit lassen sich neue Programmkonzepte umsetzen. Mehrere quasi parallele Abläufe können nun in einer Task ablaufen. Desweiteren lassen sich Abläufe durch spezielle Parameter steuern und können somit unterbrochen oder neu gestartet werden.
Die Bibliothek bietet Bausteine an, mit denen der Anwender einen beliebigen Ablauf programmieren kann. Dieser Ablauf wird durch die Signallinien vom Datentyp FLOWCTRL gesteuert. Jeder Ablauf beginnt mit einem START-Baustein. Wenn keine reine Endlosschleife entstehen soll, besitzt der Ablauf auch einen END-Baustein. Dazwischen können Verzweigungen über den IF-Baustein und Schleifen durch entsprechende Verschaltung der Signallinien umgesetzt werden. Über den YIELD-Baustein wird der Programmfluss freiwillig kurzzeitig abgegeben, damit andere Abläufe und Tasks überhaupt die Chance haben ebenfalls ausgeführt zu werden.
Wenn man nur den Steuerfluss betrachtet, zeigt die folgende Abbildung ein kleines Beispiel eines gültigen Ablaufes mit allen zur Verfügung stehenden Bausteinen.
2 Grundlagen
Ein Flowchart-Programm wird selten zum reinen Selbstzweck entworfen, sondern soll andere Operationen steuern. Diese werden über die normalen Funktionsbausteine realisiert. Dabei ist zu beachten, dass die Kombination von Steuer- und Datenfluss innerhalb einer Ebene eines Programms bzw. eines Makros nicht zulässig ist. Innerhalb eines Ablaufs müssen Datenflussfunktionalitäten (also Operationen mit normalen Funktionsbausteinen) in Makro-Bausteine ohne Steuerfluss gekapselt werden. Wenn dies nicht beachtet wird, wird beim Download des Programms ins Zielsystem eine Fehlermeldung ausgegeben. Ein solches Makro wird erzeugt, indem ein Ein- und ein Ausgang vom Datentyp FLOWCTRL eingefügt werden. Zusätzlich muss jeweils die Option "Aufruf von Datenfluß-Abschnitten" ausgewählt werden. Diese Signale werden dann innerhalb des Makros nicht weiter verschaltet. Solche Makros können dann in den Steuerfluss eingebunden werden.
Natürlich ist es auch möglich, Steuerfluss-Bausteine innerhalb von Makros zu verwenden. Dann dürfen aber keine normalen Funktions-Bausteine mehr darin vorhanden sein. Diese müssen dann in weitere Untermakros gekapselt werden.
Weiterhin ist zu berücksichtigen, dass alle Operationen zwischen zwei YIELD-Bausteinen (bzw. zwischen START und YIELD oder YIELD und END) komplett in einem Schritt und ohne Unterbrechung innerhalb desselben Zyklus abgearbeitet werden. Durch unbedachte Anwendung dieser Art der Programmierung kann es leicht zu unerwünschten Nebenwirkungen bis hin zum Blockieren des gesamten Systems kommen.
3 Anwendungsbeispiel
Anhand des nachfolgenden Beispiels soll das Zusammenspiel und die Verwendung der einzelnen Bausteine dargestellt werden. Das Beispielprogramm besitzt einen Zähler, der einfach erhöht wird, bis er einen bestimmten Wert erreicht hat (hier 10000). Danach endet das Programm. Die funktionale Verarbeitung ist in das Makro COUNT eingebettet, da Daten- und Steuerfluss nicht gemischt werden dürfen. Der Visualisierungsbaustein besitzt keine Zielsystemfunktionalität und kann deshalb direkt in derselben Programmebene verwendet werden wie die Flow-Chart-Bausteine.
Nach dem Start des Programms wird das COUNT Makro ausgeführt. Solange der binäre Ausgang am Makro HIGH ist, wird es immer wieder aufgerufen. Sobald ein LOW Signal auf den IF-Baustein gegeben wird, ist das Programm zu Ende.
Das Makro COUNT ist ein typischen Makro, welches in den Steuerfluss eingebettet ist, aber selber keine Steuerfluss-Funktionen besitzt. Es hat den Ein- und Ausgang vom Datentyp FLOWCTRL, bei denen die Option "Aufruf von Datenfluß-Abschnitten" ausgewählt wurde.
Als funktionale Operationen wurde hier ein Additions-Baustein genutzt, der einen Wert immer um eins erhöht. Dieser Wert wird zur Visualisierung nach außen gegeben. Solange dieser Wert kleiner als 10000 ist, liefert der Vergleicher-Baustein ein HIGH-Signal.
4 Fehler
Falls ein Rücksprung ohne Unterbrechung (YIELD-Baustein) programmiert wird, kann dies zu einer Endlosschleife führen, die das gesamte System verklemmt. In dem vorliegenden Beispiel existiert eine Bedingung, die das Programm zu einem definierten Ende führt. Eine echte Endlosschleife würde damit verhindert werden. Trotzdem ergibt das ein Problem, da ohne die Unterbrechung das gesamte Programm innerhalb eines einzigen Programmzyklus komplett bis zu seinem Ende abgearbeitet wird. Bei einer entsprechend großen Anzahl von Rücksprüngen führt auch dies praktisch zu einer Verklemmung des Systems.
Aus diesem Grunde existiert ein Schutzmechanismus, der zwar eine gewisse Anzahl von nicht unterbrochenen Rücksprüngen erlaubt, danach aber eine Verklemmung anzeigt und den Ablauf anhält. Dies wird dadurch gekennzeichnet, dass der START-Baustein rot dargestellt wird.