← Masterclass-Übersicht

Session 4 — Kontrollfluss

Loop Block, Step Group, If/Else-Verzweigungen, System-Variablen

~75 minHier beginnt „komplex"

Ziel: Ein Protokoll, das sich wiederholt und verzweigt — der Schritt vom linearen Ablauf zum programmierten Workflow. Übungsprotokoll: MC-04 Plate Fill Loop mit der Struktur Load Tips → Loop(3×)[Aspirate → Dispense] → Unload Tips → If/Else.

1Die Client-Interaktionen

Unterhalb der Hardware-Aktionen bietet die Palette die Client Interactions — Logikbausteine, die nicht auf dem Gerät, sondern im Ablauf selbst wirken: Prompt Global Parameter, Assign Date/Value, Math & Formula, Save/Load Variable State, User Notification — und die drei Struktur-Blöcke Loop Block, Step Group und If / Else Condition.

Palette mit Client Interactions
Die Logik-Bausteine in der Aktionspalette, direkt neben den Hardware-Aktionen.

2Loop Block einfügen

Der Loop Block wiederholt die enthaltenen Schritte. Frisch eingefügt ist er leer — der erste Schritt kommt per Drag & Drop auf die Fläche „Drop steps here", danach funktionieren die „+"-Einfügepunkte auch innerhalb des Blocks.

Leerer Loop Block in der Sequenz
Leerer Loop („New LOOP") an Position 02 — der lila Rahmen markiert den Block-Umfang.

3Iterationen festlegen

Ein Klick auf den Loop-Titel öffnet den Block-Editor: Entweder eine feste Iterationszahl — oder „Link variable…": Dann treibt eine Plate-Array-Variable den Loop, und die Iterationszahl folgt der Länge der Plattenliste. Für jede benannte Schleife stellt das System automatisch SYS_LOOP_INDEX_<NAME> bereit; verschachtelte Loops sind erlaubt.

Loop mit Schritten und Iterationseinstellung
Loop konfiguriert: 3 Iterationen, innen Aspirate → Dispense (Schritte 3 und 4, eingerückt im Block).

4If / Else — Verzweigen zur Laufzeit

Der If / Else Condition-Block wertet zur Laufzeit eine Bedingung aus: links eine Protokoll-Variable, ein System-Token (Cycle Index, Cycle Total, Timestamp, Loop Index…) oder ein freier Ausdruck; als Operator = ≠ contains > <; rechts ein Wert oder wieder eine Variable. Die Zweige IF TRUE und ELSE füllst du wie den Loop per Drag bzw. „+".

If/Else-Editor mit Bedingung
Bedingung: IF PlateCount > 3 — Badge „IF PlateCount" am Block. Die Tipp-Zeile erinnert: Jedes Feld akzeptiert {{var}}, {{SYS_*}} und Mathe-Ausdrücke.

5Die Struktur im Überblick

Gesamte Sequenz mit Loop und Condition
MC-04 komplett: 9 Schritte, davon ein Loop-Block mit zwei Kindern und eine Verzweigung. Der Step Group-Block (hier nicht im Bild) funktioniert identisch, ist aber rein organisatorisch — keine Wiederholung, nur Ordnung.

6Loops im Lauf beobachten

Im Sim-Lauf zählt der Var Inspector die Schritte über alle Iterationen („Step 4/9"), und der Trace vermerkt pro Eintrag #seq · step · iter i/total. Abgeschlossene Iterationen erkennst du am Fortschritt entlang der Loop-Schiene.

Sim-Lauf mit Loop
Lauf mit Loop: Schritt „Dispense" der aktuellen Iteration ist aktiv; der Var Inspector zeigt PlateCount = 4.
Für Fortgeschrittene
Struktur-Blöcke lassen sich protokollübergreifend kopieren: „Copy group — paste into another protocol" legt den Block in eine Zwischenablage; in einem anderen Protokoll erscheint dann „Paste <Name> (n)". Zusammen mit Counter-Indexed Arrays ({{MyArr[{{i}}]}}) entstehen so echte Bibliotheks-Bausteine.

Übungen

  1. Verschachteln: Setze einen zweiten Loop in den ersten und beobachte die beiden SYS_LOOP_INDEX_*-Werte im Var Inspector.
  2. Verzweigung füllen: Lege eine User Notification in den ELSE-Zweig und ändere PlateCount, bis sie im Sim auslöst.
  3. Aufräumen mit Gruppen: Fasse Load/Unload in eine Step Group „Tip-Handling" — gleiche Optik, keine Funktionsänderung.