Einen Subflow erstellen
Ein Subflow wird genauso bearbeitet wie ein Flow — dieselbe Fläche, derselbe Node-Selektor, dieselben Konzepte. Unterschiedlich ist, wie er beginnt, wie er endet und dass er immer im Auftrag eines Aufrufers läuft.
Einen Subflow anlegen
Subflows werden aus dem aufrufenden Flow angelegt, nicht aus einer eigenen Bibliothek:
- Fügen Sie im Haupt-Flow eine Subflow-Node ein.
- Legen Sie an dieser Node einen neuen Subflow an oder wählen Sie einen bestehenden aus.
- Öffnen Sie ihn mit dem Stift-Button hier im Subflow-Editor.
Einstiegspunkt
Ein Subflow beginnt mit seiner Subflow-Start-Node, die die Start-Node eines Flows ersetzt. Es gibt genau einen Einstiegspunkt, und er wird ausgelöst, sobald die aufrufende Subflow-Node erreicht wird.
Ausgänge
Jeder Subflow legt fest, wie viele Ausgänge er hat; das wird im oberen Bereich des Subflow-Editors eingestellt. Diese Zahl bestimmt, wie viele Ausgangsanschlüsse die Subflow-Node im aufrufenden Flow hat.
Innerhalb des Subflows entscheidet eine Subflow-Output-Node, an welchem dieser Ausgänge der Aufrufer fortsetzt. So meldet ein Subflow, was passiert ist, und nicht nur, dass er fertig ist:
- Ein Subflow „Teil aufnehmen" könnte Ausgang 1 für eine erfolgreiche Aufnahme und Ausgang 2 für einen leeren Behälter haben, sodass der aufrufende Flow verzweigen kann, ohne eine Variable auszuwerten.
- Ein Subflow mit einem einzigen Ausgang ist der häufige Fall und braucht überhaupt keine Subflow-Output-Node.
Endet ein Subflow, ohne eine Subflow-Output-Node zu erreichen, wird standardmäßig Ausgang 1 ausgelöst.
Der Aufrufer wartet
Die Subflow-Node löst ihren Ausgang erst aus, wenn der Subflow beendet ist. Aus Sicht des aufrufenden Flows ist ein Subflow ein einzelner, blockierender Schritt — und genau das macht ihn als einzelnen Block lesbar.
Keine Nebenläufigkeit im Inneren
Ein Flow kann Zweige parallel ausführen. Ein Subflow kann das nicht: Innerhalb eines Subflows gibt es keine Nebenläufigkeit, und Zweige laufen nicht gleichzeitig.
Wenn Sie parallele Ausführung brauchen, muss sie im Haupt-Flow liegen. Behalten Sie die parallele Struktur außen und rufen Sie aus jedem Zweig Subflows auf, statt im Inneren aufzufächern.
Daten hinein und heraus geben
Ein Subflow hat keine Parameterliste. Daten überschreiten die Grenze über Variablen, die global für den Roboter gelten und daher sowohl dem Aufrufer als auch dem Subflow sichtbar sind.
Die Konsequenz sollte bewusst gehandhabt werden: Ein Subflow, der von mehreren Stellen aus verwendet wird, schreibt jedes Mal in dieselben Variablen. Zwei Muster halten das beherrschbar:
- Feste Namensplätze vereinbaren. Geben Sie dem Subflow eigene Ein- und Ausgabevariablen —
pickSubflow_targetPose,pickSubflow_result— und lassen Sie den Aufrufer die Eingaben unmittelbar vor der Subflow-Node setzen. - Mit Tags versehen. Fassen Sie die Variablen des Subflows unter einem gemeinsamen Tag zusammen, damit offensichtlich ist, welche Variablen zu welchem Subflow gehören.
Weil Variablen global sind, schreiben bei einem Subflow, der aus zwei Zweigen einer parallelen Struktur im Haupt-Flow aufgerufen wird, beide Aufrufer in dieselben Variablen. Serialisieren Sie entweder die Aufrufe oder geben Sie jedem Zweig einen eigenen Variablensatz.