diff --git a/.gitignore b/.gitignore index 80eb861..722ae0f 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,4 @@ src/usrServo/usrServo.sublime-workspace *Doc/*.blg +qt/motor_*.ui diff --git a/qt/ESB_MX_5cam.ui b/qt/ESB_MX_5cam.ui index 50c4bc7..41ab3b4 100644 --- a/qt/ESB_MX_5cam.ui +++ b/qt/ESB_MX_5cam.ui @@ -6,8 +6,8 @@ 0 0 - 776 - 798 + 720 + 620 @@ -46,156 +46,30 @@ - 20 - 70 - 731 - 420 + 10 + 50 + 700 + 274 P=$(P),M=MOT_GIR_1;P=$(P),M=MOT_GIR_2;P=$(P),M=MOT_GIR_3;P=$(P),M=MOT_GIR_4;P=$(P),M=MOT_GIR_5;P=$(P),M=MOT_GIR_X;P=$(P),M=MOT_GIR_Y;P=$(P),M=MOT_GIR_U;P=$(P),M=MOT_GIR_V;P=$(P),M=MOT_GIR_W - PB_motor.ui + motor_1m.ui 10 - - - - - 20 - 50 - 731 - 21 - + + 6 - - - 2 - - - - - - 0 - 0 - - - - DESC - - - Qt::AlignCenter - - - - - - - - 0 - 0 - - - - VAL - - - Qt::AlignCenter - - - - - - - - 0 - 0 - - - - RBV - - - Qt::AlignCenter - - - - - - - - 0 - 0 - - - - - 25 - 0 - - - - - 20 - 16777215 - - - - LLS - - - Qt::AlignCenter - - - - - - - - 0 - 0 - - - - - 25 - 0 - - - - - 20 - 16777215 - - - - HLS - - - Qt::AlignCenter - - - - - - - Motors Panels - - - Qt::AlignCenter - - - - 20 - 750 + 582 411 31 @@ -211,7 +85,7 @@ 20 - 700 + 532 451 41 @@ -225,7 +99,7 @@ 20 - 500 + 332 341 194 @@ -1223,7 +1097,7 @@ 450 - 510 + 342 161 31 diff --git a/qt/ESB_MX_SmarAct.ui b/qt/ESB_MX_SmarAct.ui index 1cd9d8d..8752183 100644 --- a/qt/ESB_MX_SmarAct.ui +++ b/qt/ESB_MX_SmarAct.ui @@ -6,8 +6,8 @@ 0 0 - 645 - 680 + 610 + 735 @@ -60,15 +60,15 @@ 5 53 - 626 - 612 + 590 + 672 P=$(P),T=$(T),M=$(M)1;P=$(P),T=$(T),M=$(M)2;P=$(P),T=$(T),M=$(M)3;P=$(P),T=$(T),M=$(M)4;P=$(P),T=$(T),M=$(M)5;P=$(P),T=$(T),M=$(M)6;P=$(P),T=$(T),M=$(M)7;P=$(P),T=$(T),M=$(M)8;P=$(P),T=$(T),M=$(M)9;P=$(P),T=$(T),M=$(M)10;P=$(P),T=$(T),M=$(M)11;P=$(P),T=$(T),M=$(M)12;P=$(P),T=$(T),M=$(M)13;P=$(P),T=$(T),M=$(M)14;P=$(P),T=$(T),M=$(M)15 - MCS_stage.ui + motor_exp.ui 15 @@ -80,83 +80,6 @@ caInclude::NoFrame - - - - 470 - 30 - 80 - 20 - - - - - URW Gothic L - 12 - - - - Relative - - - - - - 215 - 30 - 80 - 20 - - - - - URW Gothic L - 12 - - - - Position - - - - - - 7 - 30 - 80 - 20 - - - - - URW Gothic L - 12 - - - - Motor - - - - - - 346 - 30 - 100 - 20 - - - - - URW Gothic L - 12 - true - - - - Absolute - - diff --git a/qt/ESB_MX_SmarAct_home.py b/qt/ESB_MX_SmarAct_home.py new file mode 100755 index 0000000..89f0108 --- /dev/null +++ b/qt/ESB_MX_SmarAct_home.py @@ -0,0 +1,146 @@ +#!/usr/bin/env python +#*-----------------------------------------------------------------------* +#| | +#| Copyright (c) 2014 by Paul Scherrer Institute (http://www.psi.ch) | +#| | +#| Author Thierry Zamofing (thierry.zamofing@psi.ch) | +#*-----------------------------------------------------------------------* +''' +Homing procedure for PPRM. + +Long Doc''' +#for ID in 1 2 3 4 5 6 +#do +#caput MYPREFIX:MOTOR_$ID.RLV 55 +#caput MYPREFIX:MOTOR_$ID.SET Set +#caput MYPREFIX:MOTOR_$ID.VAL 0 +#caput MYPREFIX:MOTOR_$ID.SET Use +#done + +#for ID in 1 2 3 4 5 6 +#do +#caput MYPREFIX:MOTOR_$ID.RLV -10 +#done + + +import logging, sys, os, json +import CaChannel,time + +class EsbMxSmaract: + + def __init__(self, args): + self.args=args + prefix=self.args.var[0] + if prefix[-1]==':':prefix[:-1] + self.prefix=prefix + self.pv=pvDict=dict() + for i in range(1,16): + #SARES30-ESBMX1:FRM_FORW.PROC + #SARES30-ESBMX1:DRIVE + + s1=prefix+'%i'%i + for j in ('DRIVE','MOTRBV','FRM_FORW.PROC','FRM_BACK.PROC','GET_HOMED','STATUS'): + s2=s1+':'+j + print(s2) + pv = CaChannel.CaChannel(s2) + pv.setTimeout(10.0) + pv.search() + pvDict[s2]=pv + CaChannel.ca.pend_io(10.0) + #print(pvDict) + #pvDict['cryorbv'] = CaChannel.CaChannel("SAR-EXPMX:MOT_CRYO.RBV") + #pvDict['cryorbv'].search() + + def home(self,idx,fwd): + print('home motor %i fwd:%d...'%(idx,fwd)) + if fwd: + pv=self.pv[self.prefix+'%i'%idx+':'+'FRM_FORW.PROC'] + else: + pv=self.pv[self.prefix+'%i'%idx+':'+'FRM_BACK.PROC'] + pv.putw(1) #set position and move + CaChannel.ca.pend_event(0.1) + + def waitHomed(self,idx): + pv=self.pv[self.prefix+'%i'%idx+':'+'GET_HOMED'] + while pv.getw()==0: + print('wait motor %i homing done ...'%idx) + CaChannel.ca.pend_event(0.2) + + def moveAbs(self,idx,val): + pv=self.pv[self.prefix+'%i'%idx+':'+'DRIVE'] + pv.putw(val) #set position and move + + + def check_pos(self, idx, val, tolerance=0.1): + pvrbv = self.pv[self.prefix+'%i'%idx+':'+'MOTRBV'] + pvst = self.pv[self.prefix+'%i'%idx+':'+'STATUS'] + + CaChannel.ca.pend_event(0.2) + while pvst.getw(): + CaChannel.ca.pend_event(0.2) + rbv=pvrbv.getw() + if abs(val - rbv) > tolerance: + raise Exception("failed to reach target value %g,%g,%g"%(val,rbv,tolerance)) + + def homing(self): + #start homing in desired direction + #cryorbv = self.pv['cryorbv'] + #if cryorbv.getw() < 4.9: + # raise Exception("Cryojet is too close, move it to 5.0 mm") + + # home Colli Y first and move it to the TOP + self.home(2, True) + CaChannel.ca.pend_event(0.5) + self.waitHomed(2) + CaChannel.ca.pend_event(0.5) + self.moveAbs(2, 10.0) + self.check_pos(2, 10.0) + + for idx,fwd in ((1,True),(4,True),(5,True),(6,True),(7,True),(8,True),(10,True),(11,True),(12,True),(13,True),(14,True),(15,True),): + self.home(idx,fwd) + CaChannel.ca.pend_event(0.5) + #wait homing done + for idx in (1,4,5,6,7,8,10,11,12,13,14,15,): + self.waitHomed(idx) + + #move to desired position + for idx,val in ((1,-10),(4,.4),(5,.5),(6,.6),(7,.7),(8,.8),(10,1.0),(11,1.1),(12,1.2),(13,1.3),(14,1.4),(15,1.5),): + self.moveAbs(idx,val) + print('Homing done') + +if __name__=='__main__': + from optparse import OptionParser, IndentedHelpFormatter + class MyFormatter(IndentedHelpFormatter): + 'helper class for formating the OptionParser' + + def __init__(self): + IndentedHelpFormatter.__init__(self) + + def format_epilog(self, epilog): + if epilog: + return epilog + else: + return "" + + def parse_args(): + 'main command line interpreter function' + #usage: gpasciiCommunicator.py --host=PPMACZT84 myPowerBRICK.cfg + (h, t)=os.path.split(sys.argv[0]);cmd='\n '+(t if len(h)>3 else sys.argv[0])+' ' + exampleCmd=('SARES30-ESBMX', + ) + epilog=__doc__+''' +Examples:'''+''.join(map(lambda s:cmd+s, exampleCmd))+'\n ' + + fmt=MyFormatter() + parser=OptionParser(epilog=epilog, formatter=fmt) + #parser.add_option('', '--host', dest='host', help='hostname (or none to use locally)', metavar='HOST') + #parser.add_option('-v', '--verbose', type="int", dest='verbose', help='verbosity bits (see below)', default=0) + (args, other)=parser.parse_args() + print(args,other) + args.var=other + esbMxSmaract=EsbMxSmaract(args) + esbMxSmaract.homing() + + #os.environ['EPICS_CA_ADDR_LIST']='localhost' + parse_args() + diff --git a/qt/ESB_MX_exp.ui b/qt/ESB_MX_exp.ui index ed50e92..ffd1d01 100644 --- a/qt/ESB_MX_exp.ui +++ b/qt/ESB_MX_exp.ui @@ -6,8 +6,8 @@ 0 0 - 776 - 977 + 720 + 680 @@ -16,7 +16,7 @@ - 20 + 10 10 721 28 @@ -46,27 +46,30 @@ - 20 + 10 50 - 731 - 882 + 700 + 582 P=$(P),M=MOT_FY;P=$(P),M=MOT_FX;P=$(P),M=MOT_CY;P=$(P),M=MOT_CX;P=$(P),M=MOT_CZ;P=$(P),M=MOT_WEDGE1;P=$(P),M=MOT_WEDGE2;P=$(P),M=MOT_WEDGE3;P=$(P),M=MOT_WEDGE4;P=$(P),M=MOT_WEDGEX;P=$(P),M=MOT_WEDGEY;P=$(P),M=MOT_WEDGEA;P=$(P),M=MOT_WEDGEB;P=$(P),M=MOT_BLGT;P=$(P),M=MOT_CRYO;P=$(P),M=MOT_GIR_X;P=$(P),M=MOT_GIR_Y;P=$(P),M=MOT_GIR_U;P=$(P),M=MOT_GIR_V;P=$(P),M=MOT_GIR_W;P=$(P),M=MOT_DET_Z - PB_motor.ui + motor_1m.ui 21 + + 6 + - 140 - 940 + 130 + 640 120 22 @@ -87,8 +90,8 @@ - 360 - 940 + 350 + 640 100 22 @@ -109,8 +112,8 @@ - 260 - 940 + 250 + 640 90 22 @@ -128,8 +131,8 @@ - 20 - 940 + 10 + 640 120 22 @@ -150,8 +153,8 @@ - 560 - 940 + 510 + 640 180 31