documentation triggerSync with mermaid
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
triggerSync
|
||||
===========
|
||||
|
||||
|
||||
|
||||
```
|
||||
samples: root@:/opt/ppmac#
|
||||
/tmp/triggerSync 40 11 trigger all 40 ms, simulated start, use real frame triggers, verbose
|
||||
@@ -8,37 +11,27 @@ samples: root@:/opt/ppmac#
|
||||
/tmp/triggerSync 40 7 trigger all 40 ms, simulated start and frame triggers, with sync, minimal verbose
|
||||
|
||||
|
||||
For real triggers, deltatau is using flags from the EVR-card:
|
||||
|
||||
//Simulated triggers uses Q variables
|
||||
#define SIMFLAG0 (pshm->Coord[1].Q[10])
|
||||
#define SIMFLAG1 (pshm->Coord[1].Q[11])
|
||||
|
||||
//Power PMAC Software Reference Manual.pdf Gate3[i].Chan[j].Status -> page 919 UserFlag
|
||||
//real triggers, uses inputsfrom the EVR-card
|
||||
// s.a. Power PMAC Software Reference Manual.pdf Gate3[i].Chan[j].Status -> page 919 UserFlag
|
||||
#define FLAG0 (gate3_1->Chan[0].Status&0x800)
|
||||
#define FLAG1 (gate3_1->Chan[1].Status&0x800)
|
||||
|
||||
|
||||
work of triggerSync program:
|
||||
- wait for [SIM]FLAG0 (arm trigger)
|
||||
- once armed, each [SIM]FLAG1 trigger is a frame trigger.
|
||||
|
||||
SIMFLAG[0|1] are vairables Coord[1].Q[10] and Coord[1].Q[11]
|
||||
|
||||
the EVR flags are set in;
|
||||
caqtdm -attach -macro SYS=SAR-EXPMX,DEVICE=EVR0,FF=PCIe G_EVR_main.ui
|
||||
|
||||
FLAG0 == Gate3[1].Chan[0].UserFlag == FrontUnivOut4 -> Pulser0 -> (active Low, 5000us delay 0us) Map: 214
|
||||
FLAG1 == Gate3[1].Chan[1].UserFlag == FrontUnivOut5 -> Pulser1 -> (active Low, 5000us delay 750us) Map: 40
|
||||
|
||||
Pulser 0: event 214 is 'ESC multipurpose event. In this case used as: start motion'
|
||||
Pulser 1: maps event 40 = 'ESA_detector 100 Hz' >>> should be 77='ESC detector'
|
||||
|
||||
event 214 is set with the CTA. For tests one can set manually
|
||||
caput SAR-EXPMX-EVR0:FrontUnivOut4-Src-Scale-SP 9 # Force High(0) -> arm event, before start motion
|
||||
caput SAR-EXPMX-EVR0:FrontUnivOut4-Src-Scale-SP 8 # Force Low(1) -> trigger motion
|
||||
caput SAR-EXPMX-EVR0:FrontUnivOut4-Src-Pulse-SP 0 # set back to Pulser 0 -> reset for CTA usage
|
||||
|
||||
This are values how they should be:
|
||||
Here values as they were set (??.10.24):
|
||||
caget SAR-EXPMX-EVR0:FrontUnivOut4-Src-Pulse-RB SAR-EXPMX-EVR0:FrontUnivOut5-Src-Pulse-RB \
|
||||
SAR-EXPMX-EVR0:Pul0-Polarity-Sel SAR-EXPMX-EVR0:Pul0-Delay-RB SAR-EXPMX-EVR0:Pul0-Width-RB \
|
||||
SAR-EXPMX-EVR0:Pul1-Polarity-Sel SAR-EXPMX-EVR0:Pul1-Delay-RB SAR-EXPMX-EVR0:Pul1-Width-RB \
|
||||
@@ -108,3 +101,4 @@ caput SAR-EXPMX-EVR0:FrontUnivOut4-Src-Pulse-SP 0
|
||||
|
||||
Gather.Enable=0 # end triggerSync
|
||||
```
|
||||
|
||||
|
||||
231
src/triggerSync/UnusedSeqDiag.md
Normal file
231
src/triggerSync/UnusedSeqDiag.md
Normal file
@@ -0,0 +1,231 @@
|
||||
|
||||
Detailed Python sequence
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant ts as TimingSystem
|
||||
participant py as Python
|
||||
participant pb as PowerBrick
|
||||
|
||||
activate py
|
||||
Note over py: .setup_sync()<br/>prepare code snipplets
|
||||
py -)+ pb: sftp / ssh
|
||||
Note over pb: sftp triggerSync<br/>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<br/>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<br/>Gather.Enable=1
|
||||
pb --)- py: done
|
||||
Note over py: .homing()
|
||||
py -)+ pb: download code
|
||||
Note over pb: runs homing PLC [if needed]<br/>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<br/>&1br2
|
||||
pb --) py: done
|
||||
Note over py: .wait_armed()<br/>wait(Q[0]==-2) # wait until motors are at first position
|
||||
deactivate py
|
||||
Note over pb: move to first point<br/>DesTimeBase=0 (wait motion)<br/>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<br/>triggerSync:DesTimeBase=Sys.ServoPeriod
|
||||
end
|
||||
Note over pb: pvt10abs<br/>move to all points
|
||||
Note over py: while .progress()<br/>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()<br/>shapepath.py
|
||||
py -)+ pb: download code
|
||||
pb --)- py: done
|
||||
Note over py: .setup_motion()<br/>shapepath.py
|
||||
py -)+ pb: generate code<br/>download code
|
||||
pb --)- py: done
|
||||
Note over py: .setup_gather()
|
||||
Note over py, pb: calls set_address(*address)<br/>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<br/>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<br/>&1br2<br/>move to first point<br/>DesTimeBase=0 (wait motion)
|
||||
Note over tsync: wait(Q[0]==-3)
|
||||
pb -)+ tsync: Q[0]=-3
|
||||
Note over py: MXMotion.py:.wait_armed()<br/>wait(Q[0]==-2)
|
||||
tsync -)+ py: Q[0]=-2
|
||||
Note over py: MXMotion.py:.trigger()<br/>if sync_mode&1 then Q[10]=1
|
||||
deactivate py
|
||||
|
||||
tsync -)+ pb: DesTimeBase=ServoPerion
|
||||
loop aaa
|
||||
tsync ->> tsync:adjust DesTimeBase<br/>while Gather.Enable!=0
|
||||
end
|
||||
activate tsim
|
||||
loop bbb
|
||||
tsim ->> tsim:simulate start and frame triggers
|
||||
end
|
||||
deactivate tsim
|
||||
|
||||
Note over pb: pvt10abs<br/>move to all points
|
||||
Note over pb: Gather.Enable=0
|
||||
Note over py: while .progress()<br/>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()<br/>prepare code snipplets
|
||||
py -)+ pb: sftp / ssh
|
||||
Note over pb: sftp triggerSync<br/>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<br/>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<br/>Gather.Enable=1
|
||||
pb --)- py: done
|
||||
Note over py: .homing()
|
||||
py -)+ pb: download code
|
||||
Note over pb: runs homing PLC [if needed]<br/>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<br/>&1br2
|
||||
pb --) py: done
|
||||
Note over py: .wait_armed()<br/>wait(Q[0]==-2) # wait until motors are at first position
|
||||
deactivate py
|
||||
Note over pb: move to first point<br/>DesTimeBase=0 (wait motion)<br/>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<br/>move to all points
|
||||
Note over py: while .progress()<br/>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
|
||||
|
||||
```
|
||||
Reference in New Issue
Block a user