This commit is contained in:
2018-04-06 17:19:30 +02:00
parent 85414a7acf
commit 16614d650e
8 changed files with 1178 additions and 3358 deletions

136
Readme.md
View File

@@ -594,30 +594,11 @@ 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;cpx jog1..5=000;call 16'
caput SAR-EXPMX3:ASYN.AOUT '&1;#1..5j/;cpx call 15' 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 '&1;cpx jog1..5=10000;call 16'
caput SAR-EXPMX3:debug0 '&1;#1..5j/;cpx call 15'
caput SAR-EXPMX3:debug0 '&1;#1..5j/;cpx call 15'
caput SAR-EXPMX3:debug0 '&1;#1..5j/;cpx call 15'
caput SAR-EXPMX3:debug0 '&1;#1..5j/;jog1..5=10000;cpx call 16'
caput SAR-EXPMX3:debug0 '&1;#1..5j/;cpx call 15'
caput SAR-EXPMX3:debug0 '&1;cpx jog1..5=0;call 16'
caput SAR-EXPMX3:debug0 '&1;#1..5j/;cpx call 15'
caput SAR-EXPMX3:debug0 '&1;cpx jog1..5=10000;call 16'
caput SAR-EXPMX3:ASYN.AOUT cpx call 16 caput SAR-EXPMX3:ASYN.AOUT cpx call 16
caput SAR-EXPMX3:ASYN.AOUT cpx call 15 caput SAR-EXPMX3:ASYN.AOUT cpx call 15
caput SAR-EXPMX3:ASYN.debug cpx call 16 caput SAR-EXPMX3:ASYN.debug cpx call 16
caput SAR-EXPMX3:ASYN.debug0 cpx call 16 caput SAR-EXPMX3:ASYN.debug0 cpx call 16
see also: 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_startup.script
@@ -625,8 +606,6 @@ see also:
/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/hpod.template
/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_boot_sf/SARES20-CSSU-ESB1/cfg/hpod.proto /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" asynRecord.ui
caQtDM -macro "P=SAR-EXPMX:,R=asyn" asynSerialPortSetup.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=asyn" asynOctet.ui
@@ -636,19 +615,17 @@ 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 15'
caput SAR-EXPMX:asyn.AOUT '&1;#1..5j/;cpx call 16' caput SAR-EXPMX:asyn.AOUT '&1;#1..5j/;cpx call 16'
caput SAR-EXPMX:debug0 '&1;#1..5j/;cpx call 15' caput -S SAR-EXPMX:debug '&1;#1..5j/;cpx call 15;jog1..5=0; call 16'
caput SAR-EXPMX:debug0 '&1;#1..5j/;cpx call 16' caput -S SAR-EXPMX:debug '&1;#1..5j/;cpx call 15;jog1..5=10000; call 16'
caput 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'
caget -S SAR-EXPMX:debug0 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 SAR-EXPMX:debug0 '&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 SAR-EXPMX:debug0 '&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(00)Y(0)U(0)V(0)W(0);call16'
caput SAR-EXPMX:debug0 '&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 SAR-EXPMX:debug0 '&1;#1..5j/;cpx call15;abslinear X(00)Y(0)U(0)V(0)W(0);call16'
caput SAR-EXPMX:debug0 '&1;#1..5j/;cpx call15;abslinear X(1000)Y(0)U(0)V(0)W(0);call16'
SAR-EXPMX:MOT_GIR_W.SPMG SAR-EXPMX:MOT_GIR_W.SPMG
@@ -739,22 +716,6 @@ open inverse
close close
&1;cpx abs linear;jog1=0;jog2=0;jog3=0;jog4=0;jog5=0 &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;jog1=10000;jog2=20000;jog3=30000;jog4=40000;jog5=50000
@@ -791,3 +752,84 @@ 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.)
```

View File

@@ -13,11 +13,11 @@
#caget SAROP21-OAPU092:ASYN.TINP #caget SAROP21-OAPU092:ASYN.TINP
#caput SAROP21-OAPU092:ASYN.AOUT '&1;cpx abs;X(-900)Y(10)A(5200)B(5100)' #caput SAROP21-OAPU092:ASYN.AOUT '&1;cpx abs;X(-900)Y(10)A(5200)B(5100)'
file stream.template {{P="$(P_M)",Q="MOT_GIR_",PORT=$(PORT_M)}} file stream.template {{P="$(P_M)",Q="MOT_GIR_",ID="3",PORT=$(PORT_M)}}
file PPMACMotor.template { file PPMACMotor.template {
pattern pattern
{ DESC , P , M , PORT , ADDR, DIR, VELO, MRES , PREC, EGU } { DESC , P , M , PORT , ADDR, DIR, VELO, MRES , PREC, EGU }
{ "Girder 1", "$(P_M)", "MOT_GIR_1", "$(PORT_M)", 1 , 0 , 40 , 0.001, 3 , "deg" } { "Girder 1", "$(P_M)", "MOT_GIR_1", "$(PORT_M)", 1 , 0 , 40 , 0.001, 3 , "deg" }
{ "Girder 2", "$(P_M)", "MOT_GIR_2", "$(PORT_M)", 2 , 0 , 40 , 0.001, 3 , "deg" } { "Girder 2", "$(P_M)", "MOT_GIR_2", "$(PORT_M)", 2 , 0 , 40 , 0.001, 3 , "deg" }
{ "Girder 3", "$(P_M)", "MOT_GIR_3", "$(PORT_M)", 3 , 0 , 40 , 0.001, 3 , "deg" } { "Girder 3", "$(P_M)", "MOT_GIR_3", "$(PORT_M)", 3 , 0 , 40 , 0.001, 3 , "deg" }
@@ -25,7 +25,7 @@ pattern
{ "Girder 5", "$(P_M)", "MOT_GIR_5", "$(PORT_M)", 5 , 0 , 40 , 0.001, 3 , "deg" } { "Girder 5", "$(P_M)", "MOT_GIR_5", "$(PORT_M)", 5 , 0 , 40 , 0.001, 3 , "deg" }
{ "Girder X", "$(P_M)", "MOT_GIR_X", "$(PORT_M)", 9 , 0 , 40 , 0.001, 3 , "mm" } { "Girder X", "$(P_M)", "MOT_GIR_X", "$(PORT_M)", 9 , 0 , 40 , 0.001, 3 , "mm" }
{ "Girder Y", "$(P_M)", "MOT_GIR_Y", "$(PORT_M)", 10 , 0 , 40 , 0.001, 3 , "mm" } { "Girder Y", "$(P_M)", "MOT_GIR_Y", "$(PORT_M)", 10 , 0 , 40 , 0.001, 3 , "mm" }
{ "Girder U", "$(P_M)", "MOT_GIR_U", "$(PORT_M)", 11 , 0 , 40 , 0.001, 3 , "mrad" } { "Girder U", "$(P_M)", "MOT_GIR_U", "$(PORT_M)", 11 , 0 , 40 , 0.001, 3 , "mrad"}
{ "Girder V", "$(P_M)", "MOT_GIR_V", "$(PORT_M)", 12 , 0 , 40 , 0.001, 3 , "mrad" } { "Girder V", "$(P_M)", "MOT_GIR_V", "$(PORT_M)", 12 , 0 , 40 , 0.001, 3 , "mrad"}
{ "Girder W", "$(P_M)", "MOT_GIR_W", "$(PORT_M)", 13 , 0 , 40 , 0.001, 3 , "mrad" } { "Girder W", "$(P_M)", "MOT_GIR_W", "$(PORT_M)", 13 , 0 , 40 , 0.001, 3 , "mrad"}
} }

View File

@@ -68,8 +68,8 @@ open forward
S4=scl*sin(AA4*$camSf) S4=scl*sin(AA4*$camSf)
S5=scl*sin(AA5*$camSf) S5=scl*sin(AA5*$camSf)
send 1"fwd_inp(%f) %f %f %f %f %f\\n",D0,AA1,AA2,AA3,AA4,AA5 //send 1"fwd_inp(%f) %f %f %f %f %f\\n",D0,AA1,AA2,AA3,AA4,AA5
send 1"fwd_inp(%f) %f %f %f %f %f\\n",D0,S1,S2,S3,S4,S5 //send 1"fwd_inp(%f) %f %f %f %f %f\\n",D0,S1,S2,S3,S4,S5
//X=D^-1*S //X=D^-1*S
@@ -79,7 +79,7 @@ open forward
V=-1.*S1 +1.*S2 +1.5*S3 -.5*S4 -.5*$sqrt2*S5 V=-1.*S1 +1.*S2 +1.5*S3 -.5*S4 -.5*$sqrt2*S5
W=-1.*S1 -1.*S2 +.5*S3 +.5*S4 +.5*$sqrt2*S5 W=-1.*S1 -1.*S2 +.5*S3 +.5*S4 +.5*$sqrt2*S5
send 1"fwd_res %f %f %f %f %f\\n",X,Y,U,V,W //send 1"fwd_res %f %f %f %f %f\\n",X,Y,U,V,W
D0=$$000000f8; //U=$$8 V=$$10 W=$$20 X=$$40 Y=$$80 hex(8+int('10',16)+int('20',16)+int('40',16)+int('80',16)) -> '0xf8' D0=$$000000f8; //U=$$8 V=$$10 W=$$20 X=$$40 Y=$$80 hex(8+int('10',16)+int('20',16)+int('40',16)+int('80',16)) -> '0xf8'
close close
@@ -93,7 +93,7 @@ open inverse
//if(D0>0) //if(D0>0)
// send 1"Velocity calculation NOT SUPPORTED\\n" // send 1"Velocity calculation NOT SUPPORTED\\n"
send 1"inv_inp(%f) %f %f %f %f %f\\n",D0,X,Y,U,V,W //send 1"inv_inp(%f) %f %f %f %f %f\\n",D0,X,Y,U,V,W
r=$height/$width r=$height/$width
@@ -110,7 +110,7 @@ open inverse
AA4=asin(S4*scl)/$camSf AA4=asin(S4*scl)/$camSf
AA5=asin(S5*scl)/$camSf AA5=asin(S5*scl)/$camSf
send 1"inv_res %f %f %f %f %f\\n",AA1,AA2,AA3,AA4,AA5 //send 1"inv_res %f %f %f %f %f\\n",AA1,AA2,AA3,AA4,AA5
close close

View File

@@ -66,7 +66,7 @@ open subprog SP_LockBrk
{ {
if(Coord[1].InPos) if(Coord[1].InPos)
{ {
send 1"inPos\n" //send 1"inPos\n"
break break
} }
//if(Motor[1].InPos && Motor[2].InPos&& Motor[3].InPos&& Motor[4].InPos&& Motor[5].InPos) //if(Motor[1].InPos && Motor[2].InPos&& Motor[3].InPos&& Motor[4].InPos&& Motor[5].InPos)

View File

@@ -1,6 +1,6 @@
X3_setup() !MX3_setup()
!MX3_setup_sim() // comment out !MX3_setup() when this is active //!MX3_setup_sim() // comment out !MX3_setup() when this is active
//!MX3_home() //!MX3_home()
//using 360000 for 1 rev. -> 1.7453292519943296e-05=np.pi/180000 //using 360000 for 1 rev. -> 1.7453292519943296e-05=np.pi/180000
//excentricity= 5mm //excentricity= 5mm
@@ -29,4 +29,21 @@ Motor[5].IdCmd=0;Motor[5].InPosBand=10
#1..5j/ #1..5j/
&1 &1
//initialization code
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

View File

@@ -17,7 +17,6 @@ debug {
debug0 { debug0 {
out "%s"; out "%s";
} }
# end
moveXYUVW { moveXYUVW {
out "cpx abs linear;call 15; X(%(\$1X.VAL)f)Y(%(\$1Y.VAL)f)U(%(\$1U.VAL)f)V(%(\$1V.VAL)f)W(%(\$1W.VAL)f);call 16"; out "cpx abs linear;call 15; X(%(\$1X.VAL)f)Y(%(\$1Y.VAL)f)U(%(\$1U.VAL)f)V(%(\$1V.VAL)f)W(%(\$1W.VAL)f);call 16";

File diff suppressed because it is too large Load Diff

View File

@@ -9,32 +9,31 @@
#record(motor, "$(P):$(Q)U") {} #record(motor, "$(P):$(Q)U") {}
#record(motor, "$(P):$(Q)V") {} #record(motor, "$(P):$(Q)V") {}
#record(motor, "$(P):$(Q)W") {} #record(motor, "$(P):$(Q)W") {}
record(calc, "$(P):5CAM_X") {
record(calc, $(P):5CAM_X) {
field(CALC, "A/B") field(CALC, "A/B")
field(INPA, "$(P):$(Q)X.VAL") field(INPA, "$(P):$(Q)X.VAL")
field(INPB, "$(P):$(Q)X.MRES") field(INPB, "$(P):$(Q)X.MRES")
} }
record(calc, $(P):5CAM_Y) { record(calc, "$(P):5CAM_Y") {
field(CALC, "A/B") field(CALC, "A/B")
field(INPA, "$(P):$(Q)Y.VAL") field(INPA, "$(P):$(Q)Y.VAL")
field(INPB, "$(P):$(Q)Y.MRES") field(INPB, "$(P):$(Q)Y.MRES")
} }
record(calc, $(P):5CAM_U) { record(calc, "$(P):5CAM_U") {
field(CALC, "A/B") field(CALC, "A/B")
field(INPA, "$(P):$(Q)U.VAL") field(INPA, "$(P):$(Q)U.VAL")
field(INPB, "$(P):$(Q)U.MRES") field(INPB, "$(P):$(Q)U.MRES")
} }
record(calc, $(P):5CAM_V) { record(calc, "$(P):5CAM_V") {
field(CALC, "A/B") field(CALC, "A/B")
field(INPA, "$(P):$(Q)V.VAL") field(INPA, "$(P):$(Q)V.VAL")
field(INPB, "$(P):$(Q)V.MRES") field(INPB, "$(P):$(Q)V.MRES")
} }
record(calc, $(P):5CAM_W) { record(calc, "$(P):5CAM_W") {
field(CALC, "A/B") field(CALC, "A/B")
field(INPA, "$(P):$(Q)W.VAL") field(INPA, "$(P):$(Q)W.VAL")
field(INPB, "$(P):$(Q)W.MRES") field(INPB, "$(P):$(Q)W.MRES")
@@ -44,10 +43,9 @@ record(calc, $(P):5CAM_W) {
# field(DESC, "asyn record") # field(DESC, "asyn record")
# field(PORT, "$(PORT)") # field(PORT, "$(PORT)")
# } # }
#record (stringout, "$(P):debug$(ID)") is limited to 40 characters therefore use waveform record
#record (stringout, "$(P):debug") is limited to 40 characters therefore use waveform record record(waveform, "$(P):debug$(ID)") {
record(waveform, "$(P):debug") { field(DESC, "debug$(ID)")
field(DESC, "debug")
field(FTVL, "CHAR") field(FTVL, "CHAR")
field(NELM, "256") field(NELM, "256")
field(DTYP, "stream") field(DTYP, "stream")
@@ -69,20 +67,38 @@ record(bo, "$(P):MOVE_XYUVW") {
field(OUT, "@stream.cfg moveXYUVW($(P):5CAM_) $(PORT)") field(OUT, "@stream.cfg moveXYUVW($(P):5CAM_) $(PORT)")
} }
#! Further lines contain data used by VisualDCT #! Further lines contain data used by VisualDCT
#! View(0,0,1.0) #! View(0,160,1.0)
#! Record("$(P):MOT_GIR1",20,23,0,0,"$(P):MOT_GIR1") #! Record("$(P):5CAM_X",300,22,0,0,"$(P):5CAM_X")
#! Field("$(P):MOT_GIR1.VAL",16777215,1,"$(P):MOT_GIR1.VAL") #! Field("$(P):5CAM_X.INPA",16777215,0,"$(P):5CAM_X.INPA")
#! Field("$(P):MOT_GIR1.MRES",16777215,1,"$(P):MOT_GIR1.MRES") #! Field("$(P):5CAM_X.INPB",16777215,0,"$(P):5CAM_X.INPB")
#! Record("$(P):MOT_GIR2",260,23,0,0,"$(P):MOT_GIR2") #! Field("$(P):5CAM_X.VAL",16777215,1,"$(P):5CAM_X.VAL")
#! Record("$(P):MOT_GIR3",500,23,0,0,"$(P):MOT_GIR3") #! Record("$(P):5CAM_Y",300,202,0,0,"$(P):5CAM_Y")
#! Record("$(P):MOT_GIR4",740,23,0,0,"$(P):MOT_GIR4") #! Field("$(P):5CAM_Y.INPA",16777215,0,"$(P):5CAM_Y.INPA")
#! Record("$(P):MOT_GIR5",980,23,0,0,"$(P):MOT_GIR5") #! Field("$(P):5CAM_Y.INPB",16777215,0,"$(P):5CAM_Y.INPB")
#! Record("$(P):debug",1220,14,0,0,"$(P):debug") #! Field("$(P):5CAM_Y.VAL",16777215,1,"$(P):5CAM_Y.VAL")
#! Record("$(P):MOVE_XYUVW",1460,22,0,0,"$(P):MOVE_XYUVW") #! Record("$(P):5CAM_U",280,382,0,0,"$(P):5CAM_U")
#! Record(M1,300,202,0,1,"M1") #! Field("$(P):5CAM_U.INPA",16777215,0,"$(P):5CAM_U.INPA")
#! Field("M1.INPA",16777215,0,"M1.INPA") #! Field("$(P):5CAM_U.INPB",16777215,0,"$(P):5CAM_U.INPB")
#! Link("M1.INPA","$(P):MOT_GIR1.VAL") #! Field("$(P):5CAM_U.VAL",16777215,1,"$(P):5CAM_U.VAL")
#! Field("M1.INPB",16777215,0,"M1.INPB") #! Record("$(P):5CAM_V",280,562,0,0,"$(P):5CAM_V")
#! Link("M1.INPB","$(P):MOT_GIR1.MRES") #! Field("$(P):5CAM_V.INPA",16777215,0,"$(P):5CAM_V.INPA")
#! Field("$(P):5CAM_V.INPB",16777215,0,"$(P):5CAM_V.INPB")
#! Field("$(P):5CAM_V.VAL",16777215,1,"$(P):5CAM_V.VAL")
#! Record("$(P):5CAM_W",280,742,0,0,"$(P):5CAM_W")
#! Field("$(P):5CAM_W.INPA",16777215,0,"$(P):5CAM_W.INPA")
#! Field("$(P):5CAM_W.INPB",16777215,0,"$(P):5CAM_W.INPB")
#! Field("$(P):5CAM_W.VAL",16777215,1,"$(P):5CAM_W.VAL")
#! Record("$(P):debug$(ID)",660,274,0,0,"$(P):debug$(ID)")
#! Record("$(P):MOVE_XYUVW",660,128,0,0,"$(P):MOVE_XYUVW")
#! Record(SEL,660,414,0,1,"SEL")
#! Field("SEL.INPA",16777215,0,"SEL.INPA")
#! Link("SEL.INPA","$(P):5CAM_X.VAL")
#! Field("SEL.INPB",16777215,0,"SEL.INPB")
#! Link("SEL.INPB","$(P):5CAM_Y.VAL")
#! Field("SEL.INPC",16777215,0,"SEL.INPC")
#! Link("SEL.INPC","$(P):5CAM_U.VAL")
#! Field("SEL.INPD",16777215,0,"SEL.INPD")
#! Link("SEL.INPD","$(P):5CAM_V.VAL")
#! Field("SEL.INPE",16777215,0,"SEL.INPE")
#! Link("SEL.INPE","$(P):5CAM_W.VAL")