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