You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 30 Next »

Pulse Selector in the Hutches

TODO and issues in XCS

  1. ISSUE: No counting -> trigger "burst stop" sometimes
  2. FIXME: Avoid arm/disarm
  3. TODO: Benchmark time needed for position correction
  4. FIXME: Start position dependent on present position
  5. TODO: If position correction takes <= 10ms the do each time
  6. TODO: Home offset as PV
  7. TODO: Make Aperture Angle as VAR and PV (to be changed as needed)
  8. TODO: Dial zero @ Encoder Home marker
    User zero @ "Aligned" position (means that RESET_PG reset only users) - to be discussed with Jeff
  9. TODO: Fast Open/Close PV
  1. NEXT: Uses First Trigger to Open, Second Trigger to Close
    The PP listen then for just one Event Code.
    Example of sequence:
    84 1 -> PP
    85 2 -> DAQ
    85 1 -> DAQ
    85 1 -> DAQ
    84 1 -> PP
    85 1 -> DAQ

MCODE programs (Jeff version on Jun 26 2013):

Single Shot Mode (MODE 1)

' Program Fragment: MODE_1 (Single shot)
' VA restrictions:
' 1. A variable cannot be named after A MCode Instruction,
' Variable or Flag or Keyword
' 2. The first character must be alpha, the second character
' may be alpha-numeric.
' 3. A variable is limited to two characters.
' 4. Limited to 192 variables and labels.

'Jeff additions
VA Ve=1        ' Program version
VA SE=0        ' Program select
S1=16,1,1      ' Setup IO 1 for LED/Fan control
VA EN=0        ' Current enable
VA Eo=0        ' Last enable
VA TG=0        ' Trigger enable


'Ernesto python defaults, 30Hz
VA NS=0
VA DT=0        'waiting time
VA QN=1        'ratio to divide
VA N1=0        'steps to move Cw
VA N2=0        'steps to move ccw
VA N=0         'steps to move
VA CT=0        'trigger counter
S13=60,0,0     'set inp 13 for hi speed TC in
Fc=0           'filter input none
Ms=256         'nb of motor steps/usteps
Vi=1000        'initial velocity
Vm=768000      'maximum velocity
A=1000000      'acceleration
D=1000000      'deceleration
Ee=0           'disable encoder closed-loop
Rc=100         'max run current
Hc=5           'minimal hold current


PG 1

  LB SU
    ' 30Hz testing inits
    SE = 0
    'O1 = 0
    N1=3200
    N2=-3200
    QN=1
    DT=0
    CT=0
    N=5
    Vm=5000000
    Vi=100000
    A=30000000
    D=30000000
    H 100

  LB ZA             ' Main loop
    BR Z0, SE = 1
    BR Z2, SE = 2
    BR Z4, SE = 3
    BR ZA

  LB Z0             ' One-shot init
    'O1 = 1
    Tc = M1
    H 500
    BR Z1

  LB Z1             ' One-shot program
    BR ZB, TG = 1
    BR Z1

  LB ZB
    Te = 4
    BR ZG

  LB ZG
    BR Z1, TG = 0
    BR ZG

  LB M1
    Te = 0
    TG = 0
    CL ZC, EN = 0
    CL ZD, EN = 1
    CL ZE, EO = 0
    CL ZF, EO = 1
    RT

  LB ZC
    MR N1
    H
    EO = 0
    RT

  LB ZD
    MR N2
    H
    EO = 1
    RT

  LB ZE
    EN = 1
    RT

  LB ZF
    EN = 0
    RT
PG
E
 

Continuous Mode (MODE 2)

' Program Fragment: MODE_2 (Continuous)
' VA restrictions:
' 1. A variable cannot be named after A MCode Instruction,
' Variable or Flag or Keyword
' 2. The first character must be alpha, the second character
' may be alpha-numeric.
' 3. A variable is limited to two characters.
' 4. Limited to 192 variables and labels.

'Jeff additions
VA Ve=1        ' Program version
VA SE=0        ' Program select
S1=16,1,1      ' Setup IO 1 for LED/Fan control
VA EN=0        ' Current enable
VA Eo=0        ' Last enable
VA TG=0        ' Trigger enable


'Ernesto python defaults, 30Hz
VA NS=0
VA DT=0        'waiting time
VA QN=1        'ratio to divide
VA N1=0        'steps to move Cw
VA N2=0        'steps to move ccw
VA N=0         'steps to move
VA CT=0        'trigger counter
S13=60,0,0     'set inp 13 for hi speed TC in
Fc=0           'filter input none
Ms=256         'nb of motor steps/usteps
Vi=1000        'initial velocity
Vm=768000      'maximum velocity
A=1000000      'acceleration
D=1000000      'deceleration
Ee=0           'disable encoder closed-loop
Rc=100         'max run current
Hc=5           'minimal hold current


PG 1

  LB SU
    ' 30Hz testing inits
    SE = 0
    'O1 = 0
    N1=3200
    N2=-3200
    QN=1
    DT=0
    CT=0
    N=5
    Vm=5000000
    Vi=100000
    A=30000000
    D=30000000
    H 100

  LB ZA             ' Main loop
    BR Z0, SE = 1
    BR Z2, SE = 2
    BR Z4, SE = 3
    BR ZA

  LB ZC
    MR N1
    H
    EO = 0
    RT

  LB ZD
    MR N2
    H
    EO = 1
    RT

  LB ZE
    EN = 1
    RT

  LB ZF
    EN = 0
    RT

  LB Z2             ' Flip-flop init
    DT=0
    H 100
    BR Z3

  LB Z3             ' Flip-flop program
    Tc = M2
    Te = 4
    BR Z3

   LB M2
    CL ZC, EN = 0
    CL ZD, EN = 1
    CL ZE, EO = 0
    CL ZF, EO = 1
    RT

PG
E
 

Burst Mode (MODE 3)

' Program Fragment: MODE_3 (Burst mode)
' VA restrictions:
' 1. A variable cannot be named after A MCode Instruction,
' Variable or Flag or Keyword
' 2. The first character must be alpha, the second character
' may be alpha-numeric.
' 3. A variable is limited to two characters.
' 4. Limited to 192 variables and labels.

'Jeff additions
VA Ve=1        ' Program version
VA SE=0        ' Program select
S1=16,1,1      ' Setup IO 1 for LED/Fan control
VA EN=0        ' Current enable
VA Eo=0        ' Last enable
VA TG=0        ' Trigger enable


'Ernesto python defaults, 30Hz
VA NS=0
VA DT=0        'waiting time
VA QN=1        'ratio to divide
VA N1=0        'steps to move Cw
VA N2=0        'steps to move ccw
VA N=0         'steps to move
VA CT=0        'trigger counter
S13=60,0,0     'set inp 13 for hi speed TC in
Fc=0           'filter input none
Ms=256         'nb of motor steps/usteps
Vi=1000        'initial velocity
Vm=768000      'maximum velocity
A=1000000      'acceleration
D=1000000      'deceleration
Ee=0           'disable encoder closed-loop
Rc=100         'max run current
Hc=5           'minimal hold current


PG 1

  LB SU
    ' 30Hz testing inits
    SE = 0
    'O1 = 0
    N1=3200
    N2=-3200
    QN=1
    DT=0
    CT=0
    N=5
    Vm=5000000
    Vi=100000
    A=30000000
    D=30000000
    H 100

  LB ZA             ' Main loop
    BR Z0, SE = 1
    BR Z2, SE = 2
    BR Z4, SE = 3
    BR ZA

  LB ZC
    MR N1
    H
    EO = 0
    RT

  LB ZD
    MR N2
    H
    EO = 1
    RT

  LB ZE
    EN = 1
    RT

  LB ZF
    EN = 0
    RT

  LB Z4             ' Burst init
    R1=0
    DT=0
    TG=0
    R1 = 0
    H 100
    BR Zy

  LB Zy             ' Burst trigger enable
    BR Zx, TG = 1
    BR Zy

  LB Zx
    MR N1
    BR Z5

  LB Z5             ' Burst program
    Tc = M4
    Te = 4
    BR ZZ, R1 = N
    BR Z5

  LB M4
    IC R1
    RT

  LB ZZ
    MR N2
    R1 = 0
    Tg=0
    BR Zy

  LB SP
    M3 = , CT = 0
    IC CT
    RT , CT < QN
    CT = 0
    RT

  LB M3
    MR N1
    H DT
    MR N2
    H DT
    RT

PG
E
 

Settings in XCS

Server running the IOC

ssh ioc-xcs-mot1

Startup IOC

su <authorized_user>
ssh ioc-xcs-mot1
sudo /reg/d/iocCommon/sioc/ioc-xcs-trigger-ims/startup.cmd
telnet localhost 30999

How to start the Pulse Selector Python script:

/reg/neh/home1/paiser/working/ioc/xcs/xip_pp/current/pyscripts/src/run_pp.sh

Configuration file

~/.pp_xcs/pvlist.lst

Current configuration (Working in progress)

# ---------------------------------------------------------------
# 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

Screens

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

TODO:

 # FIXME Configuration file default location
 # TODO  Autosave default rampup values
 # TODO  Fast close and open functions
 # TODO  Test Sequencer

Setup Lab tests

XIP Pulse Selector: Files, modes, schematics

Setup Lab: EVR Settings

Setup Lab: Working with the EVR from pslogin
  1. in pslogin type (you need to have your securekeys):
     ssh ioc-tst-cam5 /reg/neh/home1/paiser/bin/evr.sh EVR=TST:CAM:05:EVR
     
  2. Then configure EVR as you need manually...
Setup Lab: In case the server ioc-tst-cam5 was power cycled
  1. Connect to the server:
     ssh ioc-tst-cam5
     
  2. Run the startup command that contains EVR ioc in:
     sudo /reg/d/iocCommon/sioc/ioc-tst-cam5/startup.cmd
     
  3. You should see with psproc:
     [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
     
Setup Lab : In case you need to power cycle ioc-tst-cam5
 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...

Setup Lab : Test Screens

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 Descriptions

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

Homing Sequence

1) EPICS Motor Record: HOMF
2) Zero Position
3) Move Relative -76.25 degrees
4) Zero Position

MCode Program State Diagram

<insert VISIO diagram>
<code example>

Motor Interlock Scheme

Screenshots

Pulse Selector Test/Checkout Procedure (6/10/2013)

X motor calibration

  • Found offset from X zero position: 5.8075 mm from + limit
  • Offset for X zero position: 5.7332 mm from - limit
  • Limits performed as expected, and in place before hardstops

Y motor calibration

  • Offset from +Y limit to zero: 15.6689 mm
  • Offset from -Y limit to zero: 7.9956 mm
  • Limits performed as expected, and in place before hardstops

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.

  • No labels