New tests with new ioc version (new MCode version)
Features:
TO BE IMPLEMENTED IN THE MCODE ASAP:
==================================================
in xcs-control:
caput XCS:SB2:MMS:09:SET_VE 0
modify reg/d/iocCommon/sioc/ioc-xcs-trigger-ims/startup.cmd
to point to working area,
ssh ioc-xcs-mot1
kill ioc (telnet localhost...)
boot ioc from reg/d/iocCommon/sioc/ioc-xcs-trigger-ims/startup.cmd
===================================================
to fast open/close:
caput XCS:SB2:MMS:09:MODE_OPEN 1 (C2 should be around 655)
caget XCS:SB2:MMS:09:SE_L (to be read 4)
caput XCS:SB2:MMS:09:MODE_CLOSE 1 (C2 should be around 0 or 2x655)
caget XCS:SB2:MMS:09:SE_L (to be read 5)
===================================================
1. START STOP mode3.3
SET_TG 2
SET_MODE 3
2. FAST OPEN/CLOSE PV
3. START POSITION INDEPENDENT:
def _align(self): caput('%s:%s' % (self.sPpmPv, 'C2'), 1) val = caget('%s:%s' % (self.sPpmPv, 'C2')) C2 = int(val) APR_000 = self.apr_000 APR_180 = self.apr_180 ALG_000 = self.alg_000 ALG_180 = self.alg_180 self._exe_align(C2, APR_000, APR_180, ALG_000, ALG_180) def _exe_align(self, C2, APR_000, APR_180, ALG_000, ALG_180): print '_exe_align self.homeDone', self.homeDone self._dis_pars() self._pr_log('Blades alignment -----------------') if not self.homeDone: self._pr_err('!! Need to home before alignment procedure') return False #cmd = '%s:%s' % (self.sPpmPv, 'C1'); val = '%d' % C2 #self._pr_log('caput(\'%s\', %s)' % (cmd, val)) # set C1=C2 caput('%s:%s' % (self.sPpmPv, 'SET_VM'), 25600) # set EE=0 (open loop) caput('%s:%s' % (self.sPpmPv, 'SET_VI'), 2844) # set C1=0 caput('%s:%s' % (self.sPpmPv, 'SET_A'), 45511) # set C1=0 caput('%s:%s' % (self.sPpmPv, 'SET_D'), 45511) # set C1=0 caput('%s:%s' % (self.sPpmPv, 'SET_C1'), C2) # set C1=C2 caput('%s:%s' % (self.sPpmPv, 'SET_EE'), 1) # set EE=1 (close loop) #cmd = '%s:%s' % (self.sPpmPv, 'EE'); val = 1 #self._pr_log('caput(\'%s\', %s)' % (cmd, val)) # set EE=1 (close loop) print 'C2 >= APR_000', C2, APR_000 print 'C2 < APR_180', C2, APR_180 print 'C2 < APR_000', C2, APR_000 print 'C2 >= APR_180', C2, APR_180 # if C2 >= APR_000 and C2 < APR_180: # # move absolute to ALG_180 position # #cmd = '%s:%s' % (self.sPpmPv, 'MA'); val = '%d' % ALG_180 # #self._pr_log('caput(\'%s\', %s)' % (cmd, val)) # caput('%s:%s' % (self.sPpmPv, 'MA'), ALG_180) # elif C2 < APR_000 and C2 >= APR_180: # # move absolute to ALG_100 position # #cmd = '%s:%s' % (self.sPpmPv, 'MA'); val = '%d' % ALG_000 # #self._pr_log('caput(\'%s\', %s)' % (cmd, val)) # caput('%s:%s' % (self.sPpmPv, 'MA'), ALG_000) # caput('%s:%s' % (self.sPpmPv, 'MA'), ALG_000) # else: # self.homeDone = False # print '!! Need to home before alignment procedure' # return False # cmd = '%s:%s' % (self.sPpmPv, 'EE'); val = 0 # self._pr_log('caput(\'%s\', %s)' % (cmd, val)) # set EE=0 (open loop) # cmd = '%s:%s' % (self.sPpmPv, 'C1'); val = 0 # self._pr_log('caput(\'%s\', %s)' % (cmd, val)) # set C1=0 time.sleep(5) caput('%s:%s' % (self.sPpmPv, 'SET_EE'), 0) # set EE=0 (open loop) caput('%s:%s' % (self.sPpmPv, 'SET_C1'), 0) # set C1=0 caput('%s:%s' % (self.sPpmPv, 'SET_C2'), 0) # set C1=0
located in:
[working area]... modules/pcds_motion/current/pcds_motionApp/src/ims_bootup_V3.mcode
initial condition: Motor is homing from outside: C2 = 0 C1= 0 MN = ? MF = XXXX steps (known) forward MB = XXXX steps (known) backward MO = XXXX steps (known) open position Idle routine: looking for where to go... (mod 2, mod 3, mod 4, fastopen, fastclose) checkset subroutine check my pos: read C2 MN=MB, C2=MF +/- DELTA (dead band) RT MN=MF, C2=MB +/- DELTA (dead band) RT (MA MF and MN=MF), C2=MO +/- DELTA (dead band) RT if I m in startup+: set next move to startup- (MB) return subroutine if I m in startup-: set next move to startup+ (MF) return subroutine if I m open (MO): MA to startup+ (MF) set next move to startup- (MB) mod 2 call chekset waiting for trigger ... mod 3 call chekset waiting for trigger ... mod 4 call chekset waiting for trigger ... fastopen MA to open pos fastclose if in open pos MA to startup+
' Program Fragment: MODE_1 (Single Shot)
' Program Fragment: MODE_2 (Continuous)
' Program Fragment: MODE_3 (Burst mode)
ssh ioc-xcs-mot1
su <authorized_user> ssh ioc-xcs-mot1 sudo /reg/d/iocCommon/sioc/ioc-xcs-trigger-ims/startup.cmd telnet localhost 30999
/reg/neh/home1/paiser/working/ioc/xcs/xip_pp/current/pyscripts/src/run_pp.sh
~/.pp_xcs/pvlist.lst
# --------------------------------------------------------------- # Pulse Selector Description File # --------------------------------------------------------------- # Syntax: # <TYPE>, <PVNAME|IOCNAME|SCRIPT>, <DESC> # some_more_comments # Where: # <Type> : "SEQ" -> Sequencer # "EVR" -> EVR associated to sequencer # "PPM" -> Pulse Selector # "SVR" -> Motor and Pulse Selector Server # "IOC" -> Motor and Pulse Selector software IOC # "SPP" -> EDM screens for motion # "SEV" -> EDM screens for evr # <PVNAME> : PV base name # <IOCNAME> : Server name associated to Pulse Selector PVs # <DESC> : User description # Notes: # PVNAME or IOCNAME are not case sensitive. # Line can be commented out by starting with '#' character. # --------------------------------------------------------------- SEQ, XPP:R35:IOC:SEQ, XPP DAQ Sequencer # FIXME To check PLY, IOC:IN20:EV01, XPP DAQ Sequencer play mode # FIXME to check EVR, XCS:R42:EVR:01, VME EVR located in XCS Rack 42 # OK IOC, ioc-xcs-trigger-ims, IOC running pulse selector # OK SPP, ppm_gui.sh, EDM screen startup shell script for PP motor # OK PPM, XCS:SB2:MMS:09, Pulse Selector Motor # OK YTR, XCS:SB2:MMS:21, Y translation motor # OK XTR, XCS:SB2:MMS:08, X translation motor # OK SEV, evr_gui.sh, EDM screen startup shell script for EVR # OK SVR, ioc-xcs-mot1, server running IOC for pulse selector # OK
PP and Motor GUIs :
/reg/neh/home1/paiser/working/ioc/xcs/xip_pp/current/pyscripts/ppm_gui.sh XCS:SB2:MMS:09 XCS:SB2:MMS:21 XCS:SB2:MMS:08
# FIXME Configuration file default location # TODO Autosave default rampup values # TODO Fast close and open functions # TODO Test Sequencer
ssh ioc-tst-cam5 /reg/neh/home1/paiser/bin/evr.sh EVR=TST:CAM:05:EVR
ssh ioc-tst-cam5
sudo /reg/d/iocCommon/sioc/ioc-tst-cam5/startup.cmd
[paiser@ioc-xrt-xcscam04 ~ 12:18:20] psproc PID USER-ID SIOC COMMAND HOSTNAME PORT 4851 tstioc caRepeater procServ ioc-xrt-xcscam04 30000 5147 tstioc ioc-tst-cam5 procServ ioc-xrt-xcscam04 30001 5150 tstioc ioc-tst-cam5 procServ ioc-xrt-xcscam04 40000
ipmitool -I lanplus -U ADMIN -P <you_should_know> -H ioc-tst-cam5-ipmi power status ipmitool -I lanplus -U ADMIN -P <you_should_know> -H ioc-tst-cam5-ipmi power reset
Where: <you_should_know> is the standard ipmi password that you_should_know...
Python homing script:
/reg/neh/home1/jsludvik/test-python/xip-home.py
XIP main GUI:
/reg/neh/home1/jsludvik/svn/trunk/ioc/xpp/xip_pp/current/motionScreens/xip_gui.sh
XPP motor GUIs:
/reg/g/pcds/package/epics/3.14/modules/pcds_motion/R2.3.4/launch-motor.sh XPP:TST:MMS:01 /reg/g/pcds/package/epics/3.14/modules/pcds_motion/R2.3.4/launch-motor.sh XPP:TST:MMS:02 /reg/g/pcds/package/epics/3.14/modules/pcds_motion/R2.3.4/launch-motor.sh XPP:TST:MMS:03
Startup.cmd:
/reg/d/iocCommon/sioc/ioc-xpp-trigger-ims/startup.cmd
Mode 1: Single pulse
Mode 2: Continuous trigger
Mode 1 and 2 should be the same program, as the Seq will generate the pulses to the motor, and open/close operation shouldn't make any difference whether it is 1 or more. The motor sees a trigger and moves.
This mode is accessed by <PV>:RUN_MODE2
Mode 3: The motor opens on a pulse, counts N pulses and closes on the Nth pulse. The pre-trigger and close trigger should be factored in by the upper layer software to determine the proper N value to put into the motor. All the motor does is, open on N=1, count, then close on N=N.
This mode is accessed by <PV>:RUN_MODE3
Mode 1 was programmed like just mode 2 with a User "Trigger" enable/disable, which may or may not be useful for us. Sort of like 2 layers of enabling, versus just 1 for mode2
This mode is accessed by <PV>:RUN_MODE1
Reset Modes to start new mode:
<PV>:RESET
1) EPICS Motor Record: HOMF
2) Zero Position
3) Move Relative -76.25 degrees
4) Zero Position
Pulse Selector Test/Checkout Procedure (6/10/2013)
X motor calibration
Y motor calibration
New Interlock:
Add Y motor interlock, position >= 2 mm above 0 position, no X movement allowed
X-Y interlock stopped working today, need to investigate.