Detailed Python sequence
```mermaid
sequenceDiagram
participant ts as TimingSystem
participant py as Python
participant pb as PowerBrick
activate py
Note over py: .setup_sync()
prepare code snipplets
py -)+ pb: sftp / ssh
Note over pb: sftp triggerSync
run triggerSync
pb --)- py: done
Note over py: .setup_coord_trf()
py -)+ pb: download code
Note over pb: setup coordinate transformation
pb --)- py: done
Note over py: .setup_motion()
py -)+ pb: generate code
download code
Note over pb: setup motion program
pb --)- py: done
Note over py: .setup_gather()
py -)+ pb: download code
Note over pb: set addresses to gather
Gather.Enable=1
pb --)- py: done
Note over py: .homing()
py -)+ pb: download code
Note over pb: runs homing PLC [if needed]
enable plc 1
pb --) py: done
Note over py: wait(Motor[1].HomeComplete)
deactivate py
pb ->>- py: HomeComplete
activate py
Note over py: .run()
py -)+ pb: .run()
Note over pb: runs motion program 2 in coordSystem 1
&1br2
pb --) py: done
Note over py: .wait_armed()
wait(Q[0]==-2) # wait until motors are at first position
deactivate py
Note over pb: move to first point
DesTimeBase=0 (wait motion)
Q[0]=-2 (motion armed)
pb ->>- py: Q[0]=-2 done
activate py
Note over py: .trigger() #send a start trigger (if needed) after given time
Note over pb: wait for the start trigger
alt simulated trigger
Note over py:Q[10]=1
py-)+pb: start trigger
Note over pb: DesTimeBase=Sys.ServoPeriod
else real trigger
ts-)pb: start trigger
triggerSync:DesTimeBase=Sys.ServoPeriod
end
Note over pb: pvt10abs
move to all points
Note over py: while .progress()
wait(Gather.Enable==0)
deactivate py
loop 10 ms
Note over pb: move to next point
end
Note over pb: Gather.Enable=0
pb ->>- py: Gather.Enable=0
activate py
Note over py: .gather_upload()
deactivate py
```
more detailed sequence trial 1
```mermaid
sequenceDiagram
participant py as Python
participant pb as PowerBrick
Note over py: .setup_sync()
create participant ts as TriggerSync
py -)+ ts: .setup_sync()
create participant tsync as triggersync_func()
ts -) tsync: start thread
create participant tsim as trig_sim_func()
ts -) tsim: ? if sync_mode&2 then start thread
deactivate ts
Note over py: .setup_coord_trf()
shapepath.py
py -)+ pb: download code
pb --)- py: done
Note over py: .setup_motion()
shapepath.py
py -)+ pb: generate code
download code
pb --)- py: done
Note over py: .setup_gather()
Note over py, pb: calls set_address(*address)
that sets also Gather.Enable=1.
py -)+ pb: download code
Note over pb: Gather.Enable=1
pb --)- py: done
Note over py: .homing()
py -)+ pb: download code
pb --) py: done
Note over pb: runs homing PLC if needed
enable plc 1
Note over py: wait(Motor[1].HomeComplete)
pb ->>- py: HomeComplete
Note over py: .run()
py -)+ pb: .run()
pb --)- py: done
Note over pb: runs motion program 2 in coordSystem 1
&1br2
move to first point
DesTimeBase=0 (wait motion)
Note over tsync: wait(Q[0]==-3)
pb -)+ tsync: Q[0]=-3
Note over py: MXMotion.py:.wait_armed()
wait(Q[0]==-2)
tsync -)+ py: Q[0]=-2
Note over py: MXMotion.py:.trigger()
if sync_mode&1 then Q[10]=1
deactivate py
tsync -)+ pb: DesTimeBase=ServoPerion
loop aaa
tsync ->> tsync:adjust DesTimeBase
while Gather.Enable!=0
end
activate tsim
loop bbb
tsim ->> tsim:simulate start and frame triggers
end
deactivate tsim
Note over pb: pvt10abs
move to all points
Note over pb: Gather.Enable=0
Note over py: while .progress()
wait(Gather.Enable==0)
pb -)+ py: Gather.Enable=0
pb -)- tsync: Gather.Enable=0
Note over py: shapepath.py:.gather_upload()
Note over ts: wait threds finished
activate ts
deactivate tsync
destroy tsync
tsync -x ts: thread finished
destroy tsim
tsim -x ts: thread finished
deactivate ts
deactivate py
box rgba(196,196,224,.3) TriggerSync executable
participant ts
participant tsim
participant tsync
end
```
more detailed sequence simulated trigger and speed adjustment
```mermaid
sequenceDiagram
participant py as Python
participant pb as PowerBrick
participant ts as TimingSystem
activate py
Note over py: .setup_sync()
prepare code snipplets
py -)+ pb: sftp / ssh
Note over pb: sftp triggerSync
run triggerSync
pb --)- py: done
Note over py: .setup_sync()
create participant tgss as TriggerSync
py -)+ tgss: .setup_sync()
create participant tsync as triggersync_func()
tgss ->> tsync: start thread
opt if sync_mode&2
create participant tsim as trig_sim_func()
tgss ->>- tsim: start thread
end
# deactivate tgss
Note over py: .setup_coord_trf()
py -)+ pb: download code
Note over pb: setup coordinate transformation
pb --)- py: done
Note over py: .setup_motion()
py -)+ pb: generate code
download code
Note over pb: setup motion program
pb --)- py: done
Note over py: .setup_gather()
py -)+ pb: download code
Note over pb: set addresses to gather
Gather.Enable=1
pb --)- py: done
Note over py: .homing()
py -)+ pb: download code
Note over pb: runs homing PLC [if needed]
enable plc 1
pb --) py: done
Note over py: wait(Motor[1].HomeComplete)
deactivate py
pb -)- py: HomeComplete
activate py
Note over py: .run()
py -)+ pb: .run()
Note over pb: runs motion program 2 in coordSystem 1
&1br2
pb --) py: done
Note over py: .wait_armed()
wait(Q[0]==-2) # wait until motors are at first position
deactivate py
Note over pb: move to first point
DesTimeBase=0 (wait motion)
Q[0]=-3 (motion program waiting at start position)
pb -) tsync: Q[0]=-3 (motion program waiting at start position)
pb -)- py: Q[0]=-2 done
activate py
Note over py: .trigger() #send a start trigger (if needed) after given time
Note over pb: wait for the start trigger
Note over py:Q[10]=1
py-)+pb: start trigger
Note over pb: DesTimeBase=Sys.ServoPeriod
Note over pb: pvt10abs
move to all points
Note over py: while .progress()
wait(Gather.Enable==0)
deactivate py
loop 10 ms
Note over pb: move to next point
end
#activate tsync
#activate tsim
tgss->>tsync: Wait for tsync to Finish
tgss->>tsim: Wait for tsim to Finish
Note over pb: Gather.Enable=0
pb -) py: Gather.Enable=0
pb -) tsync: Gather.Enable=0
pb -)- tsim: Gather.Enable=0
destroy tsync
tsync-->>tgss: exit triggersync_func() thread
destroy tsim
tsim-->>tgss: exit triggersync_func() thread
destroy tgss
tsync-->tgss: Exit Main Thread
activate py
Note over py: .gather_upload()
deactivate py
```