-> sp.setup_sync(verbose=args.verbose&0x40,timeOfs=0.03,timeCor=0.0005) - cleanup code - add motion markers - add debug data - rework triggerSync - BUT nothing should change in Sync
1468 lines
36 KiB
Markdown
1468 lines
36 KiB
Markdown
Various motor documents
|
||
-----------------------
|
||
- /home/zamofing_t/Documents/doc-ext/SwissFEL/ESB-MX-Stage
|
||
|
||
Parker stage
|
||
------------
|
||
```
|
||
- encoder is incremental encoder
|
||
25mm or 50mm travel stage
|
||
Stall Current Continuous 0.8
|
||
Peak Current Amps RMS 2.4 (->sqrt(2)*2.4=3.39A_peak)
|
||
Resistance Ohms 8.8
|
||
Inductance mH 2.4
|
||
Max.BuxVoltage V 80
|
||
|
||
Continous Force 4N -> assume 1kg load -> acceleration=a=F/m=4m/s^2
|
||
Weight top stage: 250g=2.5N
|
||
```
|
||
|
||
|
||
Mecapion rot stage
|
||
------------------
|
||
```
|
||
http://www.lsmecapion.com/eng/
|
||
http://www.lsmecapion.com/eng/contents/sub01/sub02_03.php
|
||
http://www.a2v.fr/program/mdm-dc06d.htm
|
||
http://www.parkem.ch/medien/produkte/direktantriebstechnik/pdf/MDM_Rundtisch_katalog.pdf
|
||
http://www.goto.si/wp-content/uploads/2016/kat/L7%20Series%20catalog.pdf
|
||
http://farasys.ir/wp-content/uploads/2015/Direct%20Drive%20Rotary%20Motors.pdf
|
||
http://www.inmoco.co.uk/Upload/product/1037_DD_Series_Motors_79.pdf
|
||
|
||
- encoder is biss 20 bit
|
||
- Rated Current 1.46 Arms
|
||
- Max Current 4.38 Arms
|
||
- 32 pole (16 einraster per rev)
|
||
```
|
||
|
||
Testing ServoFrq.
|
||
-----------------
|
||
```
|
||
!common(PhaseFreq=20000,PhasePerServo=4) -> 25000points, 20um error leads the trajectory in x
|
||
!common(PhaseFreq=20000,PhasePerServo=2) -> 25000points, 6.6um error
|
||
!common(PhaseFreq=20000,PhasePerServo=1) -> 25000points, 6.1um error ossilates in y, x is quite good
|
||
|
||
-> the servo loop has to be optimized!
|
||
```
|
||
|
||
Testing linear,pvt,spline moves
|
||
-------------------------------
|
||
```
|
||
Tested with shapepath.py: THE BEST TRAJECTORY RESULT IST WITH PVT MOTION
|
||
```
|
||
|
||
|
||
Optimize/Test Parameters with Parker Stage
|
||
------------------------------------------
|
||
```
|
||
used ESB_MX/python/move_record.py to record and plot friction
|
||
used src/usrServo/usrcode.c to filter the following error of the stage
|
||
|
||
Check Simulink project at /home/zamofing_t/afs/ESB-MX
|
||
subl /home/zamofing_t/afs/ESB-MX/Readme.md
|
||
|
||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/cfg
|
||
gpasciiCommander --host SAR-CPPM-EXPMX1 -i
|
||
!mx-stage()
|
||
#1..3$
|
||
&1
|
||
#1..3j/
|
||
|
||
load program prg/testPerfGrid.prg
|
||
b2r
|
||
|
||
cd ~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/src/usrServo
|
||
make #will install the user servo loop
|
||
watch P3000 (average following error)
|
||
tweak servo parameters ->!motor_servo(mot=3,ctrl='ServoCtrl',Kp=20,Kvfb=220,Ki=0.02,Kvff=240,Kaff=1500,MaxInt=1000)
|
||
|
||
Same for motor 2 -> watcp P2000
|
||
Increase load will need an increase of gains to compensate following error
|
||
|
||
Motor[2].Servo.Kp=20
|
||
Motor[2].Servo.Kvfb=1000
|
||
Motor[2].Servo.Ki=0.07
|
||
Motor[2].Servo.Kvff=1000
|
||
Motor[2].Servo.Kaff=4000
|
||
|
||
|
||
Motor[3].Servo.Kp=20
|
||
Motor[3].Servo.Kvfb=220
|
||
Motor[3].Servo.Ki=0.02
|
||
Motor[3].Servo.Kvff=240
|
||
Motor[3].Servo.Kaff=1500
|
||
|
||
./shapepath.py --yx
|
||
average error x 0.313575 um, y 0.461707 um, 0.629583 um
|
||
|
||
./shapepath.py
|
||
average error x 0.371877 um, y 0.317152 um, 0.542073 um
|
||
```
|
||
|
||
Start motion on external signal
|
||
-------------------------------
|
||
```
|
||
open plc 1
|
||
Coord[1].DesTimeBase=0 // freezes timebase at boot
|
||
while(1)
|
||
{
|
||
if(PowerBrick[0].GpioData[0].0.1==1)
|
||
{
|
||
PowerBrick[0].GpioData[0].16.8=255
|
||
Coord[1].DesTimeBase=Sys.ServoPeriod
|
||
}
|
||
else
|
||
{
|
||
PowerBrick[0].GpioData[0].16.8=7
|
||
Coord[1].DesTimeBase=0
|
||
}
|
||
}
|
||
close
|
||
enable plc 1
|
||
-> run motion program. press gpio 0 to run at 100%
|
||
|
||
```
|
||
|
||
29.9.17 Testing in MX-LAB
|
||
-------------------------
|
||
```
|
||
Start the powerbrick. ioc is started automatically
|
||
zamofing_t@ganymede:~$ ssh x06mx-cons-1
|
||
|
||
caget SAR-ESB_MX:MOTOR_AX
|
||
cd /net/slsfs-crtl/export/sf/common/config/qt/
|
||
startDM -macro 'P=SAR-ESB_MX' ESB_MX_exp
|
||
press homing button
|
||
-> all axes can be moved.
|
||
|
||
(on thierrys laptop only)
|
||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python
|
||
./shapepath.py
|
||
will execute the custom motion. No problems with EPICS
|
||
|
||
(on other machines)
|
||
module is installed in:
|
||
ls /net/slsfs-crtl/export/sf/ioc/modules/ESB_MX/zamofing_t/R3.14.12/
|
||
PATH=/net/slsfs-crtl/export/sf/controls/bin/:$PATH
|
||
source /opt/gfa/python-2.7/2.3.0/bin/activate xblpython > /dev/null 2>&1
|
||
cd /net/slsfs-crtl/export/sf/ioc/modules/ESB_MX/zamofing_t/R3.14.12/
|
||
./shapepath.py
|
||
|
||
```
|
||
|
||
|
||
export EPICS_CA_ADDR_LIST="129.129.109.255"
|
||
export EPICS_CA_ADDR_LIST="129.129.126.255"
|
||
caQtDm -macro 'P=SAR-ESB_MX' ESB_MX_exp
|
||
|
||
HelicalScan
|
||
-----------
|
||
```
|
||
PPMAC=MOTTEST-CPPM-CRM0485
|
||
|
||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX
|
||
PBInspect --host $PPMAC --cfg PBInspect1.pbi
|
||
|
||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/cfg
|
||
gpasciiCommander --host $PPMAC sim_8_motors.cfg -i
|
||
|
||
ssh root@$PPMAC
|
||
sendgetsends -1
|
||
cpx send 1"SampleMessage\n"
|
||
|
||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python
|
||
./helicalscan.py
|
||
```
|
||
|
||
fwd/inv kinematic stuff
|
||
-----------------------
|
||
```
|
||
Coord[1].SegMoveTime=.05, will calculate all 0.05 sec the inverse kinematic.
|
||
default Coord[1].SegMoveTime=0, calculates inv kin. only at endpoints
|
||
|
||
&1p ->this will trigger:forward kinematic
|
||
cpx pmatch ->this will trigger:forward kinematic
|
||
|
||
cpx ;linear rel; X0Y0Z0B0 ->this will trigger: inverse
|
||
|
||
test_coord_trf() (w is in mdeg) -> Output:
|
||
input : cx:0.2 cz:0.3 w:5729.58 fy:0.4
|
||
fwd_trf: dx:-1.14768 dz:-19.0991 w:5729.58 fy:0.4
|
||
inv_trf: cx:0.2 cz:0.3 w:5729.58 fy:0.4
|
||
|
||
input : dx:0.2 dz:0.3 w:5729.58 fy:0.4
|
||
inv_trf: cx:1.54768 cz:19.6991 w:5729.58 fy:0.4
|
||
fwd_trf: dx:0.2 dz:0.3 w:5729.58 fy:0.4
|
||
|
||
#4j=0.2 //cx
|
||
#5j=0.3 //cz
|
||
#3j=5729.58 //w
|
||
#1j=0.4 //fy
|
||
&1p
|
||
forward kinematic 0.199997 0.300003 5729.58 0.399994
|
||
forward result -1.14769 -19.0991 5729.58 0.399994
|
||
|
||
cpx ;linear abs; X.2Y.4Z.3B5729.58
|
||
inverse kinematic 0.2 0.3 5729.58 0.4
|
||
inverse result 1.54579 19.7026 5729.58 0.4
|
||
|
||
|
||
input : cx:10 cz:20 w:171887 fy:40
|
||
fwd_trf: dx:28.9419 dz:-5.52304 w:171887 fy:40
|
||
inv_trf: cx:10 cz:20 w:171887 fy:40
|
||
#4j=10 //cx
|
||
#5j=20 //cz
|
||
#3j=171887 //w
|
||
#1j=40 //fy
|
||
&1p
|
||
forward kinematic 10 20 171887 40
|
||
forward result 28.942 -5.52296 171887 40
|
||
|
||
input : dx:10 dz:20 w:171887 fy:40
|
||
inv_trf: cx:-8.94193 cz:45.523 w:171887 fy:40
|
||
fwd_trf: dx:10 dz:20 w:171887 fy:40
|
||
|
||
cpx ;linear abs; X10 Z20 B171887 Y40
|
||
inverse kinematic 10 20 171887 40
|
||
inverse result -8.94198 45.523 171887 40
|
||
```
|
||
|
||
Motors final setup 20.12.17
|
||
---------------------------
|
||
```
|
||
SAR-CPPM-EXPMX1: biss:y timing:y
|
||
1: fy
|
||
2: fx
|
||
3: ry
|
||
4: cx
|
||
5: cz
|
||
6: interfero y
|
||
7: interfero x
|
||
|
||
labels:
|
||
MOT_FY EXPMX1.1 MOT_FX EXPMX1.2 MOT_ROT_Y EXPMX1.3 MOT_CX EXPMX1.4 MOT_CZ EXPMX1.5
|
||
ENC_FY EXPMX1.1 ENC_FX EXPMX1.2 ENC_ROT_Y EXPMX1.3 ENC_CX EXPMX1.4 ENC_CZ EXPMX1.5
|
||
IFR_FY EXPMX1.6 IFR_FX EXPMX1.7
|
||
|
||
SAR-CPPM-EXPMX2: biss:n timing:n
|
||
1: wedge1
|
||
2: wedge2
|
||
3: wedge3
|
||
4: wedge4
|
||
5: backlight
|
||
6: cryojet
|
||
|
||
SAR-CPPM-EXPMX3: biss:n timing:y
|
||
1: girder1
|
||
2: girder2
|
||
3: girder3
|
||
4: girder4
|
||
5: girder5
|
||
|
||
|
||
PPMAC=MOTTEST-CPPM-CRM0485
|
||
ssh root@$PPMAC
|
||
cd /ioc/SAR-CPPM-EXPMX1;iocsh startup.script
|
||
sendgetsends -1
|
||
|
||
|
||
ssh x06mx-cons-1
|
||
export CAQTDM_DISPLAY_PATH=/net/slsfs-crtl/export/sf/common/config/qt/:/net/slsfs-crtl/export/sf/controls/config/qt/
|
||
|
||
|
||
export EPICS_CA_ADDR_LIST="129.129.126.255"
|
||
caqtdm -macro "P=SAR-EXPMX" ESB_MX_exp.ui
|
||
|
||
```
|
||
|
||
TODO 5.1.18
|
||
-----------
|
||
```
|
||
Fwd/inv kinematic is not yet fully correct for PVT moves:
|
||
Inverse kinematic need to calculate velocities:
|
||
Now a simplified approach with no dependencies is implemented:
|
||
vqCX=vDX
|
||
vqCZ=vDZ
|
||
vqW=vW
|
||
vqFY=vY
|
||
|
||
To see the differences compare:
|
||
hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=1,cntHor=1,cntVert=5,wRng=(120000,120000),pt2pt_time=100)
|
||
hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=1,cntHor=1,cntVert=5,wRng=(120000,120000),pt2pt_time=100,smt=0)
|
||
|
||
hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=1,cntHor=1,cntVert=5,wRng=(0,360000))
|
||
hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=1,cntHor=1,cntVert=5,wRng=(0,360000),smt=0)
|
||
|
||
When using segmented mode (SegMoveTime>0) the velocities are not needed.
|
||
With SegMoveTime=0 these velocities are needed and will result in a non optimal trajectory (with the current buggy calculation).
|
||
```
|
||
|
||
|
||
Testing Helicalscan with real motors 8.1.18
|
||
-------------------------------------------
|
||
```
|
||
PPMAC=SAR-CPPM-EXPMX1
|
||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/cfg
|
||
gpasciiCommander --host $PPMAC -i
|
||
|
||
$$$***
|
||
!common()
|
||
!SAR-EXPMX1()
|
||
enable plc 1
|
||
|
||
export EPICS_CA_ADDR_LIST=$PPMAC
|
||
caQtDM -macro 'P=SAR-EXPMX' ESB_MX_exp
|
||
|
||
do homing (or call plc 1)
|
||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python
|
||
./helicalscan.py
|
||
```
|
||
|
||
|
||
Testing Wedge mover
|
||
-------------------
|
||
```
|
||
PPMAC=SAR-CPPM-EXPMX2
|
||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX
|
||
PBInspect --host $PPMAC --cfg PBInspect2.pbi
|
||
|
||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/cfg
|
||
gpasciiCommander --host $PPMAC -i
|
||
$$$***
|
||
!common()
|
||
!SAR-EXPMX2()
|
||
|
||
```
|
||
|
||
```
|
||
!!! WATCH OUT !!!
|
||
if the send buffer overruns, the programs will abort in an unexplainable way:
|
||
send 1"inv_res %f %f %f %f\\n",qCX,qCZ,qW,qFY
|
||
without reading it with sendgetsends -1
|
||
```
|
||
|
||
|
||
5 CAM mover
|
||
-----------
|
||
```
|
||
/home/zamofing_t/Documents/doc-ext/SwissFEL/Devices/5CAM
|
||
/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/5CAM_SYSTEM/
|
||
git@git.psi.ch:epics_ioc_modules/5CAM_SYSTEM.git
|
||
|
||
copied the coordTrf.py from /home/zamofing_t/Documents/doc-ext/SwissFEL/Devices/5CAM
|
||
to /cfg/MX3_coordTrf.py and modify it
|
||
|
||
PPMAC=MOTTEST-CPPM-CRM0485
|
||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX
|
||
PBInspect --host $PPMAC --cfg PBInspect3.pbi
|
||
|
||
PPMAC=MOTTEST-CPPM-CRM0485
|
||
ssh root@$PPMAC
|
||
sendgetsends -1
|
||
|
||
|
||
|
||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/cfg
|
||
gpasciiCommander --host $PPMAC -i
|
||
$$$***
|
||
!common()
|
||
!SAR-EXPMX3()
|
||
```
|
||
|
||
5 CAM mover commissioning EH60 27.3.18
|
||
--------------------------------------
|
||
```
|
||
PPMAC=SAROP11-CPPM-MOT6765
|
||
PPMAC=MOTTEST-CPPM-CRM0515
|
||
PBInspect --host $PPMAC
|
||
|
||
gpasciiCommander --host $PPMAC -i
|
||
$$$***
|
||
!common()
|
||
PowerBrick[0].GpioData[0].17=1
|
||
16 fail
|
||
17 ok
|
||
18 fail
|
||
19 ok
|
||
20 fail
|
||
21 fail on box
|
||
22 fail on box
|
||
23 fail on box
|
||
21 fail on box
|
||
|
||
Testing on motor 2
|
||
|
||
$$$***
|
||
!common()
|
||
!encoder_sim(enc=2,tbl=2,mot=2)
|
||
!motor(mot=2,dirCur=1000,JogSpeed=1024)
|
||
!encoder_ssi(enc=2,tbl=10,mot=10,numBits=18)
|
||
|
||
PowerBrick[0].GpioData[0].17=1
|
||
#2j:102400
|
||
PowerBrick[0].GpioData[0].17=0
|
||
#2k
|
||
|
||
#2j:10240000 == 360 deg = 262037.6288 inc = 360000mdeg
|
||
|
||
|
||
//the motor has 512*200*100 usteps per revolution (512 uystep/step, 200 steps/rev 1:100 gear)
|
||
//the ssi-encoder has 2**18=262144 steps per revolution
|
||
|
||
|
||
//motor_u_steps/inc_enc_step=39.0625
|
||
//the ssi-encoder has 2**18=262144 steps per revolution
|
||
|
||
//10240000 ustep == 262144 encCnt == 360deg=360000mdeg
|
||
//posSf = userUnits/encoder_steps=360000/262144=5625./4096.
|
||
//servoSf=motor_u_steps/userUnits 10240000/360000=256./9.
|
||
|
||
|
||
$$$***
|
||
!common()
|
||
!encoder_ssi(enc=2,numBits=18,posSf=5625./4096.)
|
||
!motor(mot=2,dirCur=1000,JogSpeed=40,servoSf=256./9.,HomeOffset=0)
|
||
PowerBrick[0].GpioData[0].17=1
|
||
#2j:360000
|
||
PowerBrick[0].GpioData[0].17=0
|
||
#2k
|
||
!cm_brake(mot=2,curOn=1000,cs=1,delay=200,gpio=17)
|
||
|
||
|
||
|
||
cpx r0=180000;call 20 //motor 2 180deg
|
||
cpx r0=0 ;call 20 //motor 2 0 deg
|
||
|
||
|
||
|
||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/cfg/
|
||
gpasciiCommander --host $PPMAC -i
|
||
$$$***
|
||
!common()
|
||
!SAR-EXPMX3()
|
||
cpx call 15 //current on, open breaks
|
||
#1..5j=180000
|
||
#1..5j=0
|
||
cpx call 16 //close breaks, current off
|
||
&1
|
||
cpx r0=180000;call 20 //motor 2 180deg
|
||
|
||
open prog 10
|
||
call15
|
||
abslinear
|
||
X(10) Y(0) U(0) V(0) W(0)
|
||
call16
|
||
close
|
||
b10r
|
||
|
||
open prog 11
|
||
call15
|
||
abslinear
|
||
jog1=0
|
||
jog2=0
|
||
jog3=0
|
||
jog4=0
|
||
jog5=0
|
||
call16
|
||
close
|
||
b11r
|
||
|
||
open prog 12
|
||
call15
|
||
abslinear
|
||
jog1=180000
|
||
jog2=180000
|
||
jog3=180000
|
||
jog4=180000
|
||
jog5=180000
|
||
call16
|
||
close
|
||
b12r
|
||
&1p
|
||
```
|
||
|
||
5 CAM coord trf EH60 27.3.18
|
||
----------------------------
|
||
```
|
||
PPMAC=MOTTEST-CPPM-CRM0515
|
||
ssh root@$PPMAC
|
||
sendgetsends -1
|
||
|
||
|
||
open prog 12
|
||
call15
|
||
abslinear
|
||
jog1=180000
|
||
jog2=180000
|
||
jog3=180000
|
||
jog4=180000
|
||
jog5=180000
|
||
call16
|
||
close
|
||
b12r
|
||
&1p
|
||
```
|
||
|
||
5 CAM coord trf EH60 27.3.18
|
||
----------------------------
|
||
```
|
||
PPMAC=MOTTEST-CPPM-CRM0515
|
||
ssh root@$PPMAC
|
||
sendgetsends -1
|
||
|
||
$$$***
|
||
!common()
|
||
!SAR-EXPMX3()
|
||
|
||
|
||
&1p -> execute forward kinematics
|
||
|
||
cpx call 15
|
||
#1..5j=0
|
||
cpx abslinear X(0)Y(0)U(0)V(0)W(0) ->executes inverse kinematic
|
||
cpx call 16
|
||
|
||
|
||
|
||
|
||
L6=2000/3000
|
||
L7=1000/1.41421356237
|
||
L11=L7*sin(L1*1.74532925199e-05)
|
||
L12=L7*sin(L2*1.74532925199e-05)
|
||
L13=L7*sin(L3*1.74532925199e-05)
|
||
L14=L7*sin(L4*1.74532925199e-05)
|
||
L15=L7*sin(L5*1.74532925199e-05)
|
||
|
||
|
||
$$$***
|
||
!common()
|
||
!SAR-EXPMX3()
|
||
&1
|
||
#1..5j/
|
||
#1..5hmz
|
||
|
||
open prog 1
|
||
//homez1..5
|
||
call 15
|
||
jog1..5=0
|
||
call 16
|
||
L0 = Sys.Time + 2
|
||
while (L0 > Sys.Time){}
|
||
call 15
|
||
jog1..5=180000
|
||
call 16
|
||
call 15
|
||
abslinear X(1000)Y(0)U(0)V(0)W(0)
|
||
dwell 100
|
||
abslinear X(0)Y(1000)U(0)V(0)W(0)
|
||
dwell 100
|
||
abslinear X(0)Y(0)U(0)V(0)W(0)
|
||
dwell 100
|
||
jog1..5=0
|
||
call 16
|
||
close
|
||
b1r
|
||
cpx call15;abslinear X(1000)Y(0)U(0)V(0)W(0);call16;
|
||
cpx call15;jog1..5=0;call16;
|
||
```
|
||
|
||
|
||
|
||
towards IOC 29.3.18
|
||
-------------------
|
||
```
|
||
PPMAC=MOTTEST-CPPM-CRM0515
|
||
ssh root@$PPMAC
|
||
cd /ioc/SAR-CPPM-EXPMX3
|
||
iocsh startup.script
|
||
dbl
|
||
|
||
export EPICS_CA_ADDR_LIST="129.129.126.255"
|
||
|
||
export EPICS_CA_ADDR_LIST=$PPMAC
|
||
caQtDM -macro 'P=SAR-EXPMX' ESB_MX_exp
|
||
caQtDM -macro 'P=SAR-EXPMX' ESB_MX_5cam
|
||
|
||
|
||
|
||
|
||
PPMAC=SAR-CPPM-EXPMX2
|
||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX
|
||
PBInspect --host $PPMAC --cfg PBInspect2.pbi
|
||
|
||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/cfg
|
||
gpasciiCommander --host $PPMAC -i
|
||
$$$***
|
||
!common()
|
||
!SAR-EXPMX3()
|
||
|
||
caput SAR-EXPMX3:ASYN.AOUT '&1;#1..5j/;cpx call 15'
|
||
caput SAR-EXPMX3:ASYN.AOUT '&1;cpx jog1..5=000;call 16'
|
||
caput SAR-EXPMX3:ASYN.AOUT '&1;#1..5j/;cpx call 15'
|
||
caput SAR-EXPMX3:ASYN.AOUT '&1;cpx jog1..5=10000;call 16'
|
||
caput SAR-EXPMX3:ASYN.AOUT cpx call 16
|
||
caput SAR-EXPMX3:ASYN.AOUT cpx call 15
|
||
caput SAR-EXPMX3:ASYN.debug cpx call 16
|
||
caput SAR-EXPMX3:ASYN.debug0 cpx call 16
|
||
|
||
see also:
|
||
|
||
/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_boot_sf/SARES20-CSSU-ESB1/SARES20-CSSU-ESB1_startup.script
|
||
/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_boot_sf/SARES20-CSSU-ESB1/SARES20-CSSU-ESB1_hexpodPI.subs
|
||
/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_boot_sf/SARES20-CSSU-ESB1/hpod.template
|
||
/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_boot_sf/SARES20-CSSU-ESB1/cfg/hpod.proto
|
||
|
||
caQtDM -macro "P=SAR-EXPMX:,R=asyn" asynRecord.ui
|
||
caQtDM -macro "P=SAR-EXPMX:,R=asyn" asynSerialPortSetup.ui
|
||
caQtDM -macro "P=SAR-EXPMX:,R=asyn" asynOctet.ui
|
||
caQtDM -macro "P=SAR-EXPMX:,R=debug0" asynOctet.ui
|
||
|
||
|
||
caput SAR-EXPMX:asyn.AOUT '&1;#1..5j/;cpx call 15'
|
||
caput SAR-EXPMX:asyn.AOUT '&1;#1..5j/;cpx call 16'
|
||
|
||
caput -S SAR-EXPMX:debug '&1;#1..5j/;cpx call 15;jog1..5=0; call 16'
|
||
caput -S SAR-EXPMX:debug '&1;#1..5j/;cpx call 15;jog1..5=10000; call 16'
|
||
|
||
|
||
caput -S SAR-EXPMX:debug '&1;#1..5j/;cpx call15;abslinear X(1000)Y(0)U(0)V(0)W(0);call16'
|
||
|
||
caput -S SAR-EXPMX:debug '&1;#1..5j/;cpx call15;abslinear X(1000)Y(0)U(0)V(0)W(0);call16'
|
||
caput -S SAR-EXPMX:debug '&1;#1..5j/;cpx call15;abslinear X(00)Y(0)U(0)V(0)W(0);call16'
|
||
caput -S SAR-EXPMX:debug '&1;#1..5j/;cpx call15;abslinear X(1000)Y(0)U(0)V(0)W(0);call16'
|
||
caput -S SAR-EXPMX:debug '&1;#1..5j/;cpx call15;abslinear X(00)Y(0)U(0)V(0)W(0);call16'
|
||
caput -S SAR-EXPMX:debug '&1;#1..5j/;cpx call15;abslinear X(1000)Y(0)U(0)V(0)W(0);call16'
|
||
|
||
|
||
SAR-EXPMX:MOT_GIR_W.SPMG
|
||
Plugin: epics3 : loaded & connected
|
||
=====================================
|
||
Description: Stop
|
||
TimeStamp: Apr 04, 2018 11:57:02.623574449
|
||
Type: DBF_ENUM
|
||
Count: 1
|
||
Value: 0
|
||
nbStates: 4
|
||
States:
|
||
0 Stop
|
||
1 Pause
|
||
2 Move
|
||
3 Go
|
||
```
|
||
|
||
|
||
Check some coord trf 4.4.18
|
||
---------------------------
|
||
```
|
||
$$$***
|
||
!common()
|
||
!SAR-EXPMX3() //with !MX3_setup_sim()
|
||
|
||
|
||
using trf:
|
||
!MX3_coordTrf(exc=5000,height=2000,width=500000,length=1000000,camSf=1.7453292519943296e-05)
|
||
|
||
open forward
|
||
// define(AA1='L1',AA2='L2',AA3='L3',AA4='L4',AA5='L5')
|
||
// define(r='L6',scl='L7')
|
||
// define(S1='L11',S2='L12',S3='L13',S4='L14',S5='L15')
|
||
// define(X='C6',Y='C7',U='C3',V='C4',W='C5')
|
||
L6=2000/500000
|
||
L7=5000/1.41421356237
|
||
L11=L7*sin(L1*1.74532925199e-05)
|
||
L12=L7*sin(L2*1.74532925199e-05)
|
||
L13=L7*sin(L3*1.74532925199e-05)
|
||
L14=L7*sin(L4*1.74532925199e-05)
|
||
L15=L7*sin(L5*1.74532925199e-05)
|
||
|
||
send 1"fwd_inp(%f) %f %f %f %f %f\n",D0,L1,L2,L3,L4,L5
|
||
send 1"fwd_inp(%f) %f %f %f %f %f\n",D0,L11,L12,L13,L14,L15
|
||
|
||
|
||
//C6=D^-1*S
|
||
C6=+.5*L11 -.5*L12 +(L6+.5)*L13 +(L6-.5)*L14 +(.5-L6)*1.41421356237*L15
|
||
C7=+.5*L11 +.5*L12 +.25*L13 +.25*L14 +.25*1.41421356237*L15
|
||
C3= -.5*L13 -.5*L14 +.5*1.41421356237*L15
|
||
C4=-.5*L11 +1.*L12 +1.5*L13 -.5*L14 -.5*1.41421356237*L15
|
||
C5=-.5*L11 -1.*L12 +.5*L13 +.5*L14 +.5*1.41421356237*L15
|
||
|
||
send 1"fwd_res %f %f %f %f %f\n",C6,C7,C3,C4,C5
|
||
|
||
D0=$000000f8; //C3=$8 C4=$10 C5=$20 C6=$40 C7=$80 hex(8+int('10',16)+int('20',16)+int('40',16)+int('80',16)) -> '0xf8'
|
||
close
|
||
|
||
open inverse
|
||
// define(AA1='L1',AA2='L2',AA3='L3',AA4='L4',AA5='L5')
|
||
// define(r='L6',scl='L7')
|
||
// define(S1='L11',S2='L12',S3='L13',S4='L14',S5='L15')
|
||
// define(X='C6',Y='C7',U='C3',V='C4',W='C5')
|
||
|
||
//if(D0>0)
|
||
// send 1"Velocity calculation NOT SUPPORTED\n"
|
||
|
||
send 1"inv_inp(%f) %f %f %f %f %f\n",D0,C6,C7,C3,C4,C5
|
||
|
||
L6=2000/500000
|
||
|
||
L11=+.5*C6 +.5*C7 +(0) *C3 -.5*C4 +.5*C5
|
||
L12=-.5*C6 +.5*C7 +(0) *C3 +.5*C4 +.5*C5
|
||
L13=+.5*C6 +.5*C7 -(.5) *C3 +.5*C4 -.5*C5
|
||
L14=-.5*C6 +.5*C7 -(.5) *C3 -.5*C4 -.5*C5
|
||
L15= .5*1.41421356237*C7 +.5*1.41421356237*C3 -.5*1.41421356237*C5
|
||
|
||
L7=1.41421356237/5000
|
||
L1=asin(L11*L7)/1.74532925199e-05
|
||
L2=asin(L12*L7)/1.74532925199e-05
|
||
L3=asin(L13*L7)/1.74532925199e-05
|
||
L4=asin(L14*L7)/1.74532925199e-05
|
||
L5=asin(L15*L7)/1.74532925199e-05
|
||
|
||
send 1"inv_res %f %f %f %f %f\n",L1,L2,L3,L4,L5
|
||
|
||
close
|
||
|
||
|
||
&1;cpx abs linear;jog1=0;jog2=0;jog3=0;jog4=0;jog5=0
|
||
&1;cpx abs linear;jog1=10000;jog2=20000;jog3=30000;jog4=40000;jog5=50000
|
||
|
||
&1;cpx abs linear;X(1365.89)Y(2879.23)U(-105.071)V(502.495)W(2419.1)
|
||
|
||
&1;cpx abs linear;X(-10.000000)Y(200.000000)U(3.00000)V(4.00000)W(5.00000)
|
||
|
||
|
||
&1;cpx abs linear;X(0.000000)Y(0.000000)U(0.00000)V(0.00000)W(0.00000)
|
||
&1;cpx abs linear;X(-10.000000)Y(200.000000)U(3.00000)V(4.00000)W(5.00000)
|
||
|
||
|
||
|
||
|
||
#1..5p
|
||
|
||
&1p
|
||
pmatch
|
||
|
||
fwd_inp(0) 0 0 0 0 0
|
||
fwd_inp(0) 0 0 0 0 0
|
||
fwd_res 0 0 0 0 0
|
||
inv_inp(0) 0 0 0 0 0
|
||
inv_res 0 0 0 0 0
|
||
|
||
fwd_inp(0) 10000 20000 30000 40000 50000
|
||
fwd_inp(0) 613.939 1209.22 1767.77 2272.6 2708.38
|
||
fwd_res 1365.89 2879.23 -105.071 502.495 2419.1
|
||
|
||
fwd_res 1365.89 2879.23 -105.071 502.495 2419.1
|
||
inv_inp(0) 1365.89 2879.23 -105.071 502.495 2419.1
|
||
inv_res 60621.7 38843.4 20130.6 -10620.2 4072.1
|
||
|
||
|
||
```
|
||
|
||
|
||
|
||
|
||
Checking Homeoffset init bug
|
||
----------------------------
|
||
```
|
||
//the motor has 512*200*100 usteps per revolution (512 uystep/step, 200 steps/rev 1:100 gear)
|
||
//the ssi-encoder has 2**18=262144 steps per revolution
|
||
//posSf = userUnits/encoder_steps
|
||
//servoSf=motor_u_steps/userUnits
|
||
|
||
512*200*100/262144
|
||
|
||
|
||
cpx PowerBrick[1].GpioData[0].16.5=$1f;motor[1].idCmd=1000;jog1=-1000;PowerBrick[1].GpioData[0].16.5=$0;motor[1].idCmd=0
|
||
!encoder_ssi(enc=1,numBits=18,posSf=5625./4096.)
|
||
|
||
cpx PowerBrick[1].GpioData[0].16.5=$1f;motor[1].idCmd=1000;jog1=361000;PowerBrick[1].GpioData[0].16.5=$0;motor[1].idCmd=0
|
||
!encoder_ssi(enc=1,numBits=18,posSf=5625./4096.)
|
||
|
||
cpx PowerBrick[1].GpioData[0].16.5=$1f;motor[1].idCmd=1000;jog1=1000;PowerBrick[1].GpioData[0].16.5=$0;motor[1].idCmd=0
|
||
!encoder_ssi(enc=1,numBits=18,posSf=5625./4096.)
|
||
|
||
cpx PowerBrick[1].GpioData[0].16.5=$1f;motor[1].idCmd=1000;jog1=0;PowerBrick[1].GpioData[0].16.5=$0;motor[1].idCmd=0
|
||
!encoder_ssi(enc=1,numBits=18,posSf=5625./4096.)
|
||
|
||
|
||
|
||
$$$***
|
||
!common()
|
||
!encoder_ssi(enc=1,numBits=18,posSf=5625./4096.)
|
||
!motor(mot=1,dirCur=1000,JogSpeed=40,servoSf=256./9.,InPosBand=0,FatalFeLimit=1000,HomeOffset=0.)
|
||
#1hmz
|
||
|
||
$$$***
|
||
!common()
|
||
!encoder_ssi(enc=1,numBits=18,posSf=1.)
|
||
!motor(mot=1,dirCur=1000,JogSpeed=40,servoSf= 39.0625,InPosBand=0,FatalFeLimit=1000,HomeOffset=0.)
|
||
#1hmz
|
||
|
||
|
||
|
||
cpx PowerBrick[1].GpioData[0].16.5=$1f;jog1=-1000;PowerBrick[1].GpioData[0].16.5=$0
|
||
Motor[1].idCmd=0
|
||
|
||
EncTable[1].PrevEnc
|
||
Motor[1].HomeOffset
|
||
Motor[1].HomePos
|
||
Motor[1].ActPos
|
||
|
||
EncTable[1].PrevEnc=-2490368
|
||
|
||
|
||
!encoder_ssi(enc=1,numBits=18,posSf=5625./4096.)
|
||
!motor(mot=1,dirCur=1000,JogSpeed=40,servoSf=256./9.,InPosBand=0,FatalFeLimit=1000,HomeOffset=0.)
|
||
#1hmz
|
||
|
||
|
||
!encoder_ssi(enc=1,numBits=18,posSf=5625./4096.)
|
||
!motor(mot=1,dirCur=1000,JogSpeed=40,servoSf=256./9.,InPosBand=0,FatalFeLimit=1000,HomeOffset=-20907.)
|
||
#1hmz
|
||
|
||
|
||
|
||
Motor[1].HomeOffset=-20907
|
||
Motor[1].HomePos=-1100471.57226169435
|
||
Motor[1].ActPos=-1100474.61749599339
|
||
|
||
!encoder_ssi(enc=1,numBits=18,posSf=5625./4096.) -> reate wrong values
|
||
|
||
|
||
|
||
Motor[1].HomeOffset=0
|
||
Motor[1].HomePos=-1439342.11669405433
|
||
Motor[1].ActPos=-1100474.61749599339
|
||
|
||
!motor(mot=1,dirCur=1000,JogSpeed=40,servoSf=256./9.,InPosBand=0,FatalFeLimit=1000,HomeOffset=-20907.)
|
||
|
||
|
||
|
||
|
||
Motor[1].HomeOffset=-20907
|
||
Motor[1].HomePos=-372569.750242860231
|
||
Motor[1].ActPos=-8.86266251358743773e-17
|
||
#1p 372569.7502428602
|
||
but should be -8000
|
||
|
||
#1p=Motor[1].ActPos-Motor[1].HomePos
|
||
|
||
open plc 0
|
||
if (Motor[1].ActPos-Motor[1].HomePos>180000)
|
||
Motor[1].HomePos=Motor[1].HomePos+360000
|
||
if (Motor[2].ActPos-Motor[2].HomePos>180000)
|
||
Motor[2].HomePos=Motor[2].HomePos+360000
|
||
if (Motor[3].ActPos-Motor[3].HomePos>180000)
|
||
Motor[3].HomePos=Motor[3].HomePos+360000
|
||
if (Motor[4].ActPos-Motor[4].HomePos>180000)
|
||
Motor[4].HomePos=Motor[4].HomePos+360000
|
||
if (Motor[5].ActPos-Motor[5].HomePos>180000)
|
||
Motor[5].HomePos=Motor[5].HomePos+360000
|
||
disable plc 0
|
||
close plc 0
|
||
|
||
enable plc 0
|
||
```
|
||
|
||
|
||
29.5.18 Calibration ID Lab
|
||
--------------------------
|
||
```
|
||
PPMAC=MOTTEST-CPPM-CRM0515
|
||
ssh root@$PPMAC
|
||
cd /ioc/SAR-CPPM-EXPMX3
|
||
iocsh startup.script
|
||
dbl
|
||
|
||
export EPICS_CA_ADDR_LIST=$PPMAC
|
||
caQtDM -macro 'P=SAR-EXPMX' ESB_MX_exp
|
||
caQtDM -macro 'P=SAR-EXPMX' ESB_MX_5cam
|
||
|
||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX
|
||
PBInspect --host $PPMAC --cfg PBInspect2.pbi
|
||
|
||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/cfg
|
||
gpasciiCommander --host $PPMAC -i
|
||
$$$***
|
||
!common()
|
||
!SAR-EXPMX3()
|
||
|
||
caput SAR-EXPMX3:ASYN.AOUT '&1;#1..5j/;cpx call 15'
|
||
caput SAR-EXPMX3:ASYN.AOUT '&1;cpx jog1..5=000;call 16'
|
||
caput SAR-EXPMX3:ASYN.AOUT '&1;#1..5j/;cpx call 15'
|
||
caput SAR-EXPMX3:ASYN.AOUT '&1;cpx jog1..5=10000;call 16'
|
||
caput SAR-EXPMX3:ASYN.AOUT cpx call 16
|
||
caput SAR-EXPMX3:ASYN.AOUT cpx call 15
|
||
caput SAR-EXPMX3:ASYN.debug cpx call 16
|
||
caput SAR-EXPMX3:ASYN.debug0 cpx call 16
|
||
|
||
#1..5p
|
||
-204709.6252433953 -242008.2092276345 -269883.2702626893 -124867.8588862641 -189315.0329582951
|
||
|
||
-19000
|
||
Motor[1].pLimits=PowerBrick[0].Chan[0].Status.a
|
||
Motor[2].pLimits=PowerBrick[0].Chan[1].Status.a
|
||
|
||
```
|
||
|
||
29.5.18 Commissioning ESC
|
||
-------------------------
|
||
```
|
||
[saresb-cons-01 ~]$ caqtdm -macro 'P=SAR-EXPMX' ESB_MX_exp
|
||
|
||
|
||
SAR-EXPMX:MOT_CX ok
|
||
SAR-EXPMX:MOT_CZ ok
|
||
SAR-EXPMX:MOT_FX encoder ok, failed phasing... cabeling issue. old cable ok.
|
||
SAR-EXPMX:MOT_FY encoder ok, failed phasing... cabeling issue. old cable ok.
|
||
SAR-EXPMX:MOT_ROT_Y ok
|
||
|
||
SAR-EXPMX:MOT_BLGT hotor ok, homing fails -> check if ho,ing switsch is on correct pins?
|
||
SAR-EXPMX:MOT_CRYO ok
|
||
SAR-EXPMX:MOT_WEDGE1 motor ok, encoder cable issue. old incr. cable works
|
||
SAR-EXPMX:MOT_WEDGE2 motor ok, encoder cable issue. old incr. cable works
|
||
SAR-EXPMX:MOT_WEDGE3 motor ok, encoder cable issue. old incr. cable works
|
||
SAR-EXPMX:MOT_WEDGE4 motor ok, encoder cable issue. old incr. cable works
|
||
|
||
Backlight: check register Gate3[1].Chan[0].Status when pressing home button...
|
||
|
||
```
|
||
|
||
|
||
```
|
||
Wedge mover:
|
||
#3,4
|
||
#3,4j=-17000 up limit
|
||
#3,4j=18000 down limit
|
||
#3j=350;#4j=-350 left right
|
||
#3j=-2900;#4j=2900 left right
|
||
|
||
|
||
#1j=-13000;#2j=0 up limit
|
||
#1j=1000;#2j=14000 down limit
|
||
|
||
#1j=-6000;#2j=7000 start
|
||
|
||
#1j=-8500;#2j=9500 left right
|
||
#1j=-6000;#2j=7000 also limit ?
|
||
|
||
|
||
|
||
do this multiple times until motor 2 is far enough
|
||
> #1j-;#2j-
|
||
> #1j+;#2j-
|
||
then home motor 2
|
||
#1j-;#2hm
|
||
|
||
Measured distances schieblehre:
|
||
m1:67.85
|
||
m2:67:42
|
||
m3:66.73
|
||
m4:68.97
|
||
|
||
|
||
Alles bündig bei je 67mm
|
||
|
||
m3 -330
|
||
m4 1900
|
||
|
||
Wedge Mover Limits:
|
||
X -2.13 .. 1.5
|
||
Y -1.68 .. 2.28
|
||
|
||
Individual motor limits:
|
||
Y-Min (moving until all limits kick in)
|
||
#1..4p
|
||
19594 16978 22575.5 21962
|
||
|
||
Y-Max
|
||
#1..4p
|
||
-23962.5 -23414 -22669 -22413
|
||
|
||
right:
|
||
#1..4p
|
||
-2023 2049 -3362 3379
|
||
|
||
left
|
||
#1..4p
|
||
3017 -3170 1415.5 -1693
|
||
|
||
|
||
Y: -1.67
|
||
```
|
||
|
||
Motor 1,2 tuning
|
||
----------------
|
||
```
|
||
Current loop:
|
||
rise time: 0.25ms
|
||
overshot 2.74%
|
||
damping: 0.753
|
||
natural frq:1487Hz
|
||
|
||
=>system 2ter Ordnung
|
||
|
||
k*1/(1+T1*s+t2*s^2)
|
||
|
||
|
||
```
|
||
|
||
EVR
|
||
---
|
||
```
|
||
check git modules:
|
||
mrfioc2 -> EVR config
|
||
PB_BSREAD -> sample how to configure user Flags
|
||
|
||
Gate3[1].Chan[0].UserFlag -> is set to 0 when event triggered (mapped to output FronUnivOut4 in the EVR)
|
||
|
||
EVR output powerBrick register $(USR_FLAG_ID)
|
||
FrontUnivOut4 Gate3[1].Chan[0].UserFlag 5
|
||
FrontUnivOut5 Gate3[1].Chan[1].UserFlag 6
|
||
FrontUnivOut6 Gate3[1].Chan[2].UserFlag 7
|
||
|
||
Event 254 -> Pulser 0 -> FrontUnivOut4 Gate3[1].Chan[0].UserFlag
|
||
Event 40 -> Pulser 1 -> FrontUnivOut4 Gate3[1].Chan[1].UserFlag
|
||
Event 22 -> Pulser 2 -> FrontUnivOut4 Gate3[1].Chan[2].UserFlag
|
||
|
||
caput SAR-CVME-TIFALL5-EVG0:SoftEvt-EvtCode-SP 254
|
||
|
||
|
||
Sample test code for sync:
|
||
|
||
open prog 2
|
||
Gate3[0].GpioData[0].16.1=0
|
||
linearabs
|
||
//X50Y-0
|
||
dwell10
|
||
while(Gate3[1].Chan[0].UserFlag==0){}
|
||
while(1)
|
||
{
|
||
if(Gate3[1].Chan[1].UserFlag==0)
|
||
{
|
||
break
|
||
}
|
||
}
|
||
Gather.Enable=2
|
||
Gate3[0].GpioData[0].16.1=1
|
||
//pvt40abs
|
||
//X50:443.604Y-0:0
|
||
dwell1000
|
||
Gather.Enable=0
|
||
close
|
||
b2r
|
||
```
|
||
|
||
|
||
Testing Helical Coord Trf
|
||
-------------------------
|
||
```
|
||
B0.3504637004371034 X-13.68414496427224 Y-8.029999999998836 Z-1483.096457761122
|
||
|
||
|
||
&1p ->this will trigger:forward kinematic
|
||
cpx pmatch ->this will trigger:forward kinematic
|
||
|
||
cpx ;linear rel; X0Y0Z0B0
|
||
cpx ;linear abs; X-13.68 Y-8.03 Z-1483.1 B0.35
|
||
->this will trigger: inverse
|
||
|
||
&1;cpx abs linear;jog1=0;jog2=0;jog3=0;jog4=0;jog5=0
|
||
|
||
|
||
-1:fwd_inp(0) 0.45 -1103.7 0.350464 -7.98
|
||
-1:fwd_res -13.5538 -1481 0.350464 -7.98
|
||
|
||
|
||
//motors CX CZ RY FY
|
||
// 4 5 3 1
|
||
|
||
|
||
&1;cpx abs linear;jog1=0;jog2=0;jog3=0;jog4=0;jog5=0
|
||
|
||
def calcParam(self,x=((.468,-.627,-.523),(.357,-1.349,.351)),
|
||
y=(.557,-.008),
|
||
z=((1.73,.93,2.129),(2.13,.03,1.103))):
|
||
|
||
|
||
&1;cpx abs linear;jog1=557;jog3=0;jog4=-468;jog5=-1730
|
||
|
||
&1;cpx abs linear;jog1=-8;jog3=240000;jog4=-351;jog5=-1103
|
||
|
||
|
||
caQtDM -macro "NAME=ESB-MX-CAM,CAMNAME=ESB-MX-CAM" /sf/controls/config/qt/Camera/CameraMiniView
|
||
|
||
#1,3,4,5p
|
||
point 1 0,120,240 deg
|
||
575.5 0 -241.5 -1401.3
|
||
575.5 120000 96.7 -1401.7
|
||
575.5 240000 -53.8 -1802.4
|
||
|
||
point 2 0,120,240 deg
|
||
175.5 0 -162.3 -1802.5
|
||
175.5 120000 -293.2 -1303.7
|
||
175.5 240000 246.4 -1402.25
|
||
|
||
|
||
#1j=575.5; #3j=0 ; #4j=-241.5; #5j=-1401.3
|
||
#1j=575.5; #3j=120000; #4j= 96.7; #5j=-1401.7
|
||
#1j=575.5; #3j=240000; #4j= -53.8; #5j=-1802.4
|
||
#1j=175.5; #3j=0 ; #4j=-162.3; #5j=-1802.5
|
||
#1j=175.5; #3j=120000; #4j=-293.2; #5j=-1303.7
|
||
#1j=175.5; #3j=240000; #4j= 246.4; #5j=-1402.25
|
||
|
||
|
||
pixel center 1110 1090
|
||
|
||
#1j=575.5; #3j=0 ; #4j=-241.5; #5j=-1401.3
|
||
cpx pmatch
|
||
|
||
|
||
-1:fwd_inp(0) -241.5 -1401.3 0 575.5
|
||
-1:fwd_res -88.9829 308.514 0 575.5
|
||
|
||
|
||
cpx ;linear abs; X0 Z0 Y575 B0
|
||
cpx ;linear abs; X0 Z0 Y575 B100000
|
||
```
|
||
|
||
Software esbMX deploy
|
||
---------------------
|
||
```
|
||
zamofing_t@ganymede:~$ ll /sf/bernina/config/swissmx/zamofing_t/
|
||
/sf/bernina/config/swissmx/
|
||
ssh saresb-cons-01
|
||
ssh sf-cons-01
|
||
source /opt/gfa/python
|
||
source activate /sf/bernina/config/swissmx/conda/envs/b440_clone
|
||
zamofing_t@ganymede:~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python$
|
||
|
||
|
||
cp -farL ~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/*.py \
|
||
~/Documents/prj/SwissFEL/PBTools/pbtools/ \
|
||
~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/src/triggerSync/triggerSync \
|
||
/sf/bernina/config/swissmx/zamofing_t/
|
||
|
||
cp -farL ~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/ShapePathAnalyser/*.py \
|
||
/sf/bernina/config/swissmx/zamofing_t/ShapePathAnalyser/
|
||
|
||
#scp -r pc9477:~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/*.py /sf/bernina/config/swissmx/zamofing_t/
|
||
|
||
|
||
|
||
>alternatives but not recommanded
|
||
#scp -r ganymede:~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/*.py ganymede:~/Documents/prj/SwissFEL/PBTools/pbtools/ /sf/bernina/config/swissmx/zamofing_t/
|
||
#rsync -abuv --exclude 'records/' ~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/*.py ~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/PBMotionAnalyzer/ ~/Documents/prj/SwissFEL/PBTools/pbtools/ /sf/bernina/config/swissmx/zamofing_t/
|
||
```
|
||
|
||
|
||
Sync Start
|
||
----------
|
||
```
|
||
caput SAR-CVME-TIFALL5-EVG0:SoftEvt-EvtCode-SP 254
|
||
|
||
|
||
```
|
||
|
||
|
||
|
||
Try to find encoder count loss
|
||
------------------------------
|
||
```
|
||
//set incEncFrq to 25MHz, (default was to low: 3.125MHz)
|
||
|
||
Gate3[0].EncClockDiv=2
|
||
Gate3[1].EncClockDiv=2
|
||
|
||
```
|
||
|
||
Helicalscan setup
|
||
-----------------
|
||
```
|
||
calcParam(
|
||
x=((-34.05489905551743, 208.10204385266277, -606.4416461908648),
|
||
(22.139508829306088, 158.83214548238513, -618.6408606756819)),
|
||
y=(1700.0, 1252.0231362790232),
|
||
z=((-1200.0, -2000.0000000000005, -1900.0000000000005),
|
||
(-1200.0, -2000.0000000000005, -1800.0000000000002)))
|
||
|
||
cpx X0 Z0 B0 Y1700.0
|
||
cpx X0 Z0 B120000 Y1700.0
|
||
cpx X0 Z0 B240000 Y1700.0
|
||
|
||
cpx X0 Z0 B0 Y1252.0
|
||
cpx X0 Z0 B120000 Y1252.0
|
||
cpx X0 Z0 B240000 Y1252.0
|
||
|
||
send 1"fwd_inp(%f) %f %f %f %f\\n",D0,{qCX},{qCZ},{qW},{qFY}
|
||
send 1"fwd_res %f %f %f %f\\n",{DX},{DZ},{W},{Y}
|
||
send 1"inv_inp(%f) %f %f %f %f\\n",D0,{DX},{DZ},{W},{Y}
|
||
send 1"inv_res %f %f %f %f\\n",{qCX},{qCZ},{qW},{qFY}
|
||
|
||
|
||
```
|
||
|
||
|
||
Oct. 2019 Measure backlash wedge movers
|
||
---------------------------------------
|
||
```
|
||
Wedge Mover 1 Mover 2 Plate 1 Plate 2
|
||
0 0 0 0 0
|
||
-.1 -0.1030 -0.0990 -0.0990 -0.0990
|
||
-.2 -0.2045 -0.1990 -0.1985 -0.2000
|
||
-.3 -0.3060 -0.3005 -0.2990 -0.3000
|
||
-.2 -0.2040 -0.2000 -0.2015 -0.2030
|
||
-.1 -0.1030 -0.0990 -0.1020 -0.1030
|
||
0 0.0020 0.0025 0.0030 0.0020
|
||
.1 0.0985 0.1030 0.0965 0.0980
|
||
.2 0.1980 0.2015 0.1955 0.1980
|
||
.3 0.2975 0.3020 0.2950 0.2960
|
||
.2 0.1995 0.2035 0.1980 0.2020
|
||
.1 0.0980 0.1045 0.0990 0.1010
|
||
0 0.0020 0.0045 0.0000 0.0010
|
||
|
||
|
||
Mover 1/2 on the black metal block with the name
|
||
Plate 1/2 above mover 1/2 on aluminum border ob bread board
|
||
|
||
-> no backlash (ca. 10um) could be measured.
|
||
|
||
```
|
||
|
||
|
||
16.5.22 tunneling
|
||
-----------------
|
||
```
|
||
--host=localhost:10001:10002
|
||
|
||
PPMAC=SAR-CPPM-EXPMX1
|
||
|
||
rsync -va ~/Documents/prj/SwissFEL/PBTools/pbtools/gather/gather_server root@$PPMAC:/tmp/
|
||
ssh root@$PPMAC
|
||
LD_LIBRARY_PATH=/opt/ppmac/libppmac/ /tmp/gather_server
|
||
|
||
|
||
ssh -L 10001:localhost:22 root@$PPMAC 'uname -a'
|
||
ssh -L 10002:localhost:2332 root@$PPMAC 'uname -a'
|
||
-> this tunnels port 22 and 2332 of $PPMAC to 10001 and 10002 of localhost
|
||
|
||
Tests:
|
||
nc localhost 10001
|
||
nc localhost 10002
|
||
|
||
list close ssh tunnel
|
||
---------------------
|
||
lsof -i -n | grep '127.0.0.1:1000'
|
||
|
||
.
|
||
|
||
Make z to move over the grid.
|
||
|
||
&0
|
||
#1->0
|
||
#2->0
|
||
#3->0
|
||
#4->0
|
||
#5->0
|
||
#6->0
|
||
#7->0
|
||
#8->0
|
||
&1
|
||
#1->y
|
||
#2->x
|
||
#5->.1x+.1y-1400
|
||
|
||
|
||
?? what are the PV for the camera, zoom etc ???
|
||
```
|
||
|
||
|
||
30.9.22 Debug Synchronization
|
||
=============================
|
||
|
||
https://docs.google.com/document/d/1soSuCZYyfGf_ntcgG_Y1_WeGuo_687OuFn0s4sMj1uY/edit
|
||
|
||
|
||
remote ssh tunnel + start gather_server
|
||
---------------------------------------
|
||
```
|
||
PPMAC=SAR-CPPM-EXPMX1
|
||
rsync -va ~/Documents/prj/SwissFEL/PBTools/pbtools/gather/gather_server root@$PPMAC:/tmp/
|
||
lsof -i -n | grep '127.0.0.1:1000'
|
||
ssh -L 10001:localhost:22 root@$PPMAC 'uname -a'
|
||
ssh -L 10002:localhost:2332 root@$PPMAC 'uname -a'
|
||
ssh root@$PPMAC
|
||
LD_LIBRARY_PATH=/opt/ppmac/libppmac/ /tmp/gather_server
|
||
```
|
||
|
||
cleanup /tmp/
|
||
-------------
|
||
```
|
||
PPMAC=SAR-CPPM-EXPMX1
|
||
ssh root@$PPMAC rm /tmp/gather_server /tmp/triggerSync
|
||
ssh root@$PPMAC ls -l /tmp
|
||
```
|
||
|
||
start debug tools
|
||
-----------------
|
||
```
|
||
PPMAC=SAR-CPPM-EXPMX1
|
||
PBInspect --host=$PPMAC&
|
||
gpasciiCommander --host $PPMAC -i
|
||
ssh root@$PPMAC
|
||
ssh root@$PPMAC rm /tmp/gather_server /tmp/triggerSync
|
||
ssh root@$PPMAC ls -l /tmp
|
||
```
|
||
|
||
restart IOC
|
||
-----------
|
||
```
|
||
ssh saresc-cons-03
|
||
PPMAC=SAR-CPPM-EXPMX1
|
||
telnet $PPMAC 50001
|
||
Ctrl-X
|
||
dbgf SAR-CPPM-EXPMX1:MOD_VER
|
||
|
||
caget SAR-CPPM-EXPMX1:MOD_VER
|
||
|
||
```
|
||
|
||
checking versions
|
||
-----------------
|
||
```
|
||
git: 7a968aac967
|
||
asyn 427.0.2
|
||
motorBase alpha_220518
|
||
asynMotor alpha_220518
|
||
powerPmac alpha_220518
|
||
PB_COMMON 2.0.1
|
||
gpasciiCommander 0.9.0
|
||
ESB_MX 0.0.2
|
||
```
|
||
|
||
zamofing_t@ganymede:~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX$
|
||
git loggraph -10
|
||
* 7a968aa 2022-09-20 (HEAD -> master, tag: latest, tag: 0.0.2, psigithub/master) change speeds and directions [Thierry Zamofing]
|
||
* 00588f8 2022-09-16 minor changes [Thierry Zamofing]
|
||
* d52a6ce 2022-08-30 minor changes [Thierry Zamofing]
|
||
* f47e111 2022-05-20 (tag: 0.0.1) add DET_Z motor [Thierry Zamofing]
|
||
* 8e5b15e 2022-05-20 wip [Thierry Zamofing]
|
||
* 399282c 2019-03-20 enhance triggering [Thierry Zamofing]
|
||
* eda8caf 2019-03-19 wip [Thierry Zamofing]
|
||
* 0c45705 2019-03-08 optimize [Thierry Zamofing]
|
||
* c962ebd 2019-03-06 documentation [Thierry Zamofing]
|
||
|
||
git reset --hard 7a968aa
|
||
rmake -e LIBVERSION=42.42.42 uninstall install
|
||
-> restart IOC
|
||
|
||
ssh root@$PPMAC rm /tmp/triggerSync
|
||
cd python
|
||
git dt latest -- shapepath.py
|
||
./shapepath.py --host=localhost:10001:10002
|
||
|
||
removing test verion
|
||
ssh sf-lc7 ls -l /ioc/modules/ESB_MX/
|
||
ssh sf-lc7 rm -rf /ioc/modules/ESB_MX/42.42.42
|
||
|
||
|
||
IOC locations
|
||
-------------
|
||
```
|
||
~/Documents/prj/SwissFEL/epics_ioc_boot_sf/ESC_all/ESB_MX_PowerBrick
|
||
They are just using the new alphy driver. That should have no impact on the motion config.
|
||
```
|
||
|
||
|
||
Current (old) Synchronization
|
||
-----------------------------
|
||
```
|
||
default:
|
||
/ESB_MX/src/triggerSync/triggerSync.c -> read usage
|
||
simulate start trigger -> pshm->Coord[1].Q[10]=1 to simulate a Jungfrau aquire start\n\
|
||
simulate frame trigger -> pshm->Coord[1].Q[11]
|
||
Coord[1].Q[0] is incremented at each trigger
|
||
|
||
Coord[1].DesTimeBase is adjusted at each frame trigger
|
||
|
||
Coord[1].pDesTimeBase=Coord[1].DesTimeBase.a
|
||
|
||
|
||
gpascii: set Gather.Enable=1
|
||
PMAC: LD_LIBRARY_PATH=/opt/ppmac/libppmac/ /tmp/triggerSync 10 0 11 -> wait for start trigger
|
||
gpascii: set Start trigger: pshm->Coord[1].Q[10]=1 or set EVR that generates the trigger
|
||
PMAC: start Gather (Gather.Enable=2)
|
||
count and sync frames:
|
||
Coord[1].Q[0] = frame counter
|
||
gpascii: stop Gather -> Gather.Enable=0
|
||
PMAC: triggerSync stops when Gather.Enable=0
|
||
|
||
|
||
```
|
||
|
||
Enhanced Synchronization
|
||
------------------------
|
||
```
|
||
(to be tested)
|
||
Coord[1].pDesTimeBase=Coord[1].DesTimeBase.a
|
||
For “external time base”, in which the coordinate system’s time base value is proportional to the
|
||
frequency of an incoming encoder signal or pulse train, Coord[x].pDesTimeBase should be set
|
||
to EncTable[i].DeltaPos.a
|
||
|
||
Setup EncTable:
|
||
EncTable[n].type = (3)Software 1/T encoder extension (5)Four-byte read 32 bit int (11) Float 32f or 64f
|
||
|
||
The ERV are mapped to
|
||
//Power PMAC Software Reference Manual.pdf Gate3[i].Chan[j].Status -> page 919 UserFlag
|
||
(gate3_1->Chan[0].Status&0x800) = Gate3[1].Chan[0].UserFlag Trigger start
|
||
(gate3_1->Chan[1].Status&0x800) = Gate3[1].Chan[1].UserFlag Trigger frame
|
||
|
||
|
||
Use EncTable 20 as Frame counter
|
||
Gate3[1].Chan[1].EncCtrl = $encctrl
|
||
EncTable[20].type = 3
|
||
EncTable[20].pEnc = Gate3[1].Chan[1].UserFlag.a (is same as Gate3[1].Chan[1].Status) thus it will not work
|
||
EncTable[20].pEnc1 = Gate3[1].Chan[0].TimerA.a
|
||
EncTable[20].index1 = 0
|
||
EncTable[20].index2 = 0
|
||
EncTable[20].index3 = 0
|
||
EncTable[20].index4 = 0
|
||
EncTable[20].index5 = 0
|
||
EncTable[20].ScaleFactor = 1/256
|
||
-> THIS DOES NOT WORK WITH CURRENT CONNECTIONS !
|
||
-> ONE PHYSICAL ENCODER WOULD NEED PULSE AND DIRECTION INPUT AND SET Gate3[1].Chan[1].EncCtrl TO 'pulse and direction' mode
|
||
|
||
|
||
> Sys.Ddata[0]=Sys.Ddata[0]+10
|
||
|
||
Use EncTable 20 as Frame counter
|
||
Gate3[1].Chan[1].EncCtrl = $encctrl
|
||
EncTable[20].type = 11 //loating point read
|
||
EncTable[20].pEnc = Sys.Ddata[0].a
|
||
EncTable[20].pEnc1 = Gate3[1].Chan[0].TimerA.a
|
||
EncTable[20].index1 = 0
|
||
EncTable[20].index2 = 0
|
||
EncTable[20].index3 = 0
|
||
EncTable[20].index4 = 0
|
||
EncTable[20].index5 = 99 //multiply with 100
|
||
EncTable[20].index5 = 1 //float64
|
||
EncTable[20].ScaleFactor = 1/256
|
||
EncTable[20].ScaleFactor=1E-3
|
||
|
||
|
||
Use EncTable 20 as Frame counter
|
||
EncTable[20].type = 1 //32 Bit uint
|
||
EncTable[20].pEnc = Sys.Udata[0].a
|
||
EncTable[20].index1 = 0
|
||
EncTable[20].index2 = 0
|
||
EncTable[20].index3 = 0
|
||
EncTable[20].index4 = 0
|
||
EncTable[20].index5 = 0
|
||
EncTable[20].index5 = 0
|
||
EncTable[20].ScaleFactor=1E-3
|
||
|
||
|
||
2.1 trigger zu spät
|
||
1.9 trigger zu früh
|
||
|