A dynamic sequence is a reusable template whose {variable} placeholders automatically resolve to prefixed variables for each machine instance (for example, cyl_1_extend, cyl_2_extend).
Dynamic sequences eliminate duplicate .seq files when a machine contains identical sub-assemblies such as pneumatic cylinders, grippers, conveyors, or processing stations:
| Concept | Role | Example |
|---|---|---|
Dynamic Sequence (.seq) |
Reusable sequence template with {variable} placeholders |
Cylinder ({extend}, {is_extended}) |
Instance (main.machine) |
Concrete copy assigned a unique prefix and options | clamp, pusher, lift |
| Resolved Variables | Instance-prefixed PLC variables generated automatically | clamp_extend, pusher_extend, lift_extend |
| Global Variables | Variables without {} shared across all instances |
g_Safety_OK, g_Auto_Mode |
Convert any existing sequence into a dynamic sequence in two clicks:
.seq file in the Sequence Editor..seq file in the Explorer and select Make Sequence Dynamic).{variable} braces and registers a default instance in main.machine.{} and Global VariablesInside a dynamic sequence, you can mix instance-specific {variable} placeholders with global machine variables:
{}) button in the floating toolbar:
{} ({extend}, {cmd}): Resolved per instance (<instance_name>_extend, <instance_name>_cmd).{} (emergency_stop, system_ready): Shared globally across the entire machine.main.machine and select the Instances tab.c1_stopper, c2_stopper, asm_press).ON / OFF) or custom parameters..seq file in the Sequence Editor.clamp, pusher, lift).cylinder.seq and right-click the canvas -> Make file dynamic.{extend}, {retract}, {is_extended}, and {is_retracted} in your steps and transitions.main.machine -> Instances and add instances clamp, pusher, and lift.from automation_machine import Machine
class ProductionLine(Machine):
def setup(self):
self.add_instance("Cylinder", "clamp", bistable=False)
self.add_instance("Cylinder", "pusher", bistable=True)
self.add_instance("Cylinder", "lift", bistable=True)
ProductionLine()
{} variables resolve at compile time