2023-08-29 12:33:04 +02:00
wip
2019-03-19 09:10:28 +01:00
wip
2019-03-19 09:10:28 +01:00
2023-06-29 10:40:23 +02:00
2023-09-05 09:28:24 +02:00
2022-10-06 13:56:32 +02:00
2023-07-21 18:43:00 +02:00
2023-07-21 18:43:00 +02:00
2023-09-21 15:08:48 +02:00
wip
2022-05-20 08:24:44 +02:00
2023-09-05 09:28:24 +02:00
2019-02-19 10:29:16 +01:00
2018-10-03 10:18:07 +02:00
2023-07-21 18:43:00 +02:00
2022-10-06 13:11:35 +02:00
2023-07-21 18:43:00 +02:00

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

restart IOC

ssh saresc-cons-03
PPMAC=SAR-CPPM-EXPMX1
telnet $PPMAC 50001
Ctrl-X
dbgf SAR-CPPM-EXPMX1:MOD_VER


checking versions

git: 7a968aac967
caget SAR-CPPM-EXPMX1:MOD_VER
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 systems 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

Sys.Udata[0];EncTable[20].PrevEnc


2.1 trigger zu spät
1.9 trigger zu früh

Description
No description provided
Readme 10 MiB
Languages
Python 57.2%
C 15.7%
MATLAB 12.5%
TeX 11.3%
Makefile 3.3%