Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

Table of Contents

Pulse Picker Edm Screens

Image Added

                 Image Added                    Image Added  

Fig 1. pp_mode_control.edl waiting for mode selection                                                                      Fig 2. pp_mode_control.edl, Pulse picking mode has been selected                                                        Fig 3. pp_mode_control.edl, Blade position unknown motor, homing required

 

Image Added

Fig 4. pp_gui.edl

 

  • pp_mode_control.edl

    • Shown in Fig 1. through Fig 3.
    • User screen for pulse picker motor
    • Displays current motor status including: blade position, pulse picker mcode status and version, fan status, limit violations, error mode, mcode heartbeat, and selected pulse picking mode.
    • Contains buttons to select pulse picking mode and perform a hard reset of the pulse picker mcode. 
    • Contains button to open to open pp_gui.edl, labeled CNTRL.
    • The edm macro for the screen is MOTOR=<Motor Base PV>, ie edm -x -eolc -m "MOTOR=CXI:ATC:MMS:29" pp_screens/pp_mode_control.edl &
  • pp_gui.edl

    • Shown in Fig 4.
    • Expert screen for pulse picker motor
    • Contains all displays and controls contained the in pp_mode_control.edl screen
    • Contains displays and controls for all variables for pulse picker Mcode.
  • Pulse picker screen logic

    • Both screens have built in logic to assist the user in the correct operation of the pulse picker, the logic is the same for both screens.
    • If the user has selected a mode for the pulse picking motor all of the mode selecting buttons will become invisible until the motor has been returned to 'Waiting for Mode Select'. This logic is show in Fig 2.
    • If the position of the pluse picker blades is unknown, DF=99, only the home motor button will be shown to the user and the user will be shown a message stating that the motor needs to be homed. Once the blade position returns to a know position the other buttons will become visible. The homing process takes a few seconds. This logic is show in Fig 3.
  • Pulse Picker Screen Launch Script

    • The script edm-pp-screens.cmd can be used to launch the pp_mode_control.edl screen with the correct motor name for each hutch
    • To launch screen for a specific hutch pass the three letter acronym of the hutch to the script, the script will accept upper, lower and mixed case arguments. 
    • Currently the script is located in: /reg/neh/home/alexd/ioc/common/xip_pp/current, the script will be moved to a release at the next update to the pulse picker ioc.

    Code Block
    languagebash
    titleedm-pp-screens.cmd
    $ ./edm-pp-screens.cmd mec

     

     

Info
titleAdditional Screens

There are additional screens located in the /pp_screens directory, these screens are only meant to be used by MEC, they have PVs hard coded in to them.

Info
titleOne-Shot

One-shot mode select button has been removed from pp_mode_select.edl and pp_gui.edl as of R1.4.1. The one-shot option has not been removed from the mcode or IOC. The mode is redundant as Burst Mode uses the same functions but does not require resetting after each use.

Epics IOC

Motor Interlocks

  • If pules picking motor is in pulse picking mode, $(MOTOR):SE_L != 0, X and Y stepper motors are disabled
  • If Y motor position is greater than 10mm X motor is disabled
  • If X motor position is greater then 5mm or less then -5mm Y motor is disabled.
  • Interlock records can be found in the 2-axis-control.sub-db file.

Records located in xip.template

$(MOTOR):SE

  • Pulse picking mode select
  • Reads Se from mcode
  • Returns string corresponding to selected pulse picking mode

$(MOTOR):SE_L

Records from xip.template

The below records are in addition to the normal ims motor records

Table of Contents

 $(MOTOR):SE

  • Reads Se from Mcode
  • Pulse picking mode select

$(MOTOR):SET_SE

  • Pulse picking mode select
  • Writes Se to Mcode, values 0 to 100 are allowed
  • Pulse picking mode select

$(MOTOR):MCODE:INIT

  • Sends a hard reset to the Mcode
  • Sets Se to 99
  • Executes program 1
  • Most variable used in the pulse picking mcode will be reset to standard values.
  • Motor will need to be re-homed if this is called

$(MOTOR):RESET_PG

...

  • Resets pulse picking mode
  • Sets Se to 0
  • Mcode will see Se=0, close the blades then return to mode select
Info
titleReset Program

The reset process is completed when the SD is "Waiting for Se", SD_L=0

...

$(MOTOR):SD_L

$(MOTOR):SD

  • Mcode program status string
    *
  • Returns string corresponding to status of mcode program

$(MOTOR):RUN_ONESHOT

  • Runs Selects One Shot pulse picking mode
  • Sets SET_SE to 1
  • Turns output 4 on 
  • Read Se back from Mcode

$(MOTOR):

...

RUN_FLIPFLOP

  • Selects Flip Flop pulse picking mode Mode
  • Sets SET_SE to 2
  • Turns output 4 on
  • Reads Se back from mcodeALL Updates all Mcode parameters for the pulse picker

$(MOTOR):RUN_BURSTMODE

  • Selects Burst Mode
  • Sets SET_SE to 3
  • Turns output 4 on
  • Reads Se back from mcode

$(MOTOR):RUN_FLIPFLOP

  • Selects Flip Flop Mode
  • Sets SET_SE to 2
  • Turns output 4 on
  • Reads Se back from mcodeUPDATE_STATUS
  • Updates specific mcode parameters
  • They include MV, P, C1, C2, I1, I2

$(MOTOR):S_OPEN

  • Moves shutter to open position
  • Sets Se to 4
  • Reads Se from Mcode
  • Reads Ad from Mcode

$(MOTOR):S_CLOSE

  • Moves shutter to close position
  • Sets Se to 5
  • Reads Se from Mcode

$(MOTOR):HOME:MOTOR

  • Selects automatic motor homing and offset
  • Sets Se to 7
  • Reads Ad from McodeSe from Mcode
Info
titleMode Selecting

To change pulse picking modes, ie processing RUN_<MODE> PV, RESET_PG must be processed before selecting the new mode

$(MOTOR):

...

LD

  • Lower limit drift violation counter
  • Scanned at 1 second
  • Minor alarm at 100

$(MOTOR):UD

  • Upper limit violation
  • Scanned at 1 second
  • Minor alarm at 100

Records that use xip_readwrite.template called by pulse-motor-ims.sub-db

...

$(MOTOR):N0

  • Center position of motor in Encoder Counts
  • Reads N0 from mcode
  • Passive Scanning
  • Processed at IOC startLLV
  • Lower Limit Violation in raw motor counts
  • On I/O Intr, looks for "LLV=<counts>" sting
  • Waiting for inturption from Mcode if lower limit is violated
  • Process UD, #########TODO: Find what LD is

$(MOTOR):

...

SET_N0

  • Center position of motor in Encoder Counts
  • Writes N0 to mcodePOS_CLOSE
  • Last reported close position
  • On I/O Intr, looks for "CLOSE=<counts>" string

$(MOTOR):N1

  • Positive motor closed position in Encoder Counts
  • Reads N1 from mcode
  • Passive Scanning
  • Processed at IOC startS_POS_OPEN
  • Last reported open position
  • On I/O Intr, looks for "OPEN=<counts>" string

$(MOTOR):

...

SET_N1

  • Positive motor closed position in Encoder Counts
  • Writes N1 to mcodeDEGREES
  • Conversion of N1 from motor counts to degrees
  • ##########TODO: find what N1 is

$(MOTOR):N2

  • Negative closed position of motor in Encoder Counts
  • Reads N2 from mcode
  • Passive Scanning
  • Processed at IOC startMINUS_DEGREES
  • Conversion of N2 from motor counts to degrees
  • ###########TODO: Find what N2 is

$(MOTOR):

...

SET_N2

  • Negative closed position of motor in Encoder Counts
  • Writes N2 to mcode

$(MOTOR): P0

  • Center motor position in motor microsteps
  • Reads P0 from mcode
  • Passive Scanning
  • Processed at IOC startDEGREE_CNTS
  • Conversion of N3 from encoder counts to degrees
  • ###################TODO: find what N3 is

$(MOTOR):SET_P0

  • Center motor position in motor microsteps
  • Writes P0 to mcode

$(MOTOR): P1

  • Positive closed motor position in motor microsteps
  • Reads P1 from mcode
  • Passive Scanning
  • Processed at IOC startMINUS_DEGREES_CNTS
  • Conversion of N4 from encoder counts to degrees
  • ###############TODO: find what N4 is

$(MOTOR):SET_P1

  • Positive closed motor position in motor microsteps
  • Writes P1 to mcode

$(MOTOR): P2

  • Negative closed motor position in motor microsteps
  • Reads P2 from mcode
  • Passive Scanning
  • Processed at IOC startDEADBAND_DEGREES
  • Conversion of Sd from encoder counts to degrees
  • ###### Currently Sd is save deadband, and Karl is planning on using it as a status indicator.

$(MOTOR):

...

SET_P2

  • Negative closed motor position in motor microsteps
  • Writes P2 to mcode

$(MOTOR): SW

  • Sweep distance from closed position to open position in microsteps
  • Reads SW from mcode
  • Passive Scanning
  • Processed at IOC start

$(MOTOR):SET_SW

  • Sweep distance from closed position to open position in microsteps
  • Writes SW to mcode

$(MOTOR):SR

  • Sweep distance from closed position to open position in encoder counts
  • Reads SR from mcode
  • Passive Scanning
  • Processed at IOC start30HZ
  • Write parameters to motor for 30Hz operation
  • Sets A, D, VI, VM to $(LOC):30HZ:<A ... VM>:01
  • Sets A, D, VI, VM to $(LOC):30HZ:<A ... VM>:02
  • ###############TODO: unsure of why values need to be set to 02 after being set to 01, Also these settings from epics may not be needed

$(MOTOR):SET_SR

  • Sweep distance from closed position to open position in microsteps
  • Writes SR to mcode

$(MOTOR):DR

  • Position drift at closed positions in encoder counts
  • Reads DR from mcode
  • Passive Scanning
  • Processed at IOC start

$(MOTOR):SET_DR

  • Position drift at closed positions in encoder counts
  • Writes DR to mcode

$(MOTOR):DL

  • Position drift limit in encoder counts
  • Reads DL from mcode
  • Passive Scanning
  • Processed at IOC start

$(MOTOR):SET_DL

  • Position drift limit in encoder counts
  • Writes DL to mcode

Records that use xip_read.template called by pulse-motor-ims.sub-db

$(MOTOR):DF

  • Current motor position
  • Reads DR from mcode
  • Scanned at 1 second

$(MOTOR):HB

  • Mcode Heartbeat
  • Reads HB from mcode
  • Passive scanning
  • Scanned at IOC start

$(MOTOR):NS

  • Pulse picker mcode version
  • Reads NS from mcode
  • Passive Scanning
  • Scanned at IOC start

Records contained in xip_evr_seq.template

Info
titleEVR SEQ Records

All records in template do not have inputs or outputs. They are read by python module to select proper pulse selecting mode

$(MOTOR):PP_EVRDELAY

  • EVR Delay for pulse picker
  • Engineering units 'ms'

$(MOTOR):PP_NSHOTS

  • Number of shots for picker to select

$(MOTOR):PP_REPEAT

  • Number of repetitions of pulse selecting

$(MOTOR):PP_FREQ

  • Frequency of selected pulses

$(MOTOR):PP_SEQ

  • Use Sequencer <Yes,No>

$(MOTOR):PP_EVRDELAY

  • EVR Delay for pulse pickerSETUP_60HZ
  • Sets A, D, VI to $(LOC):60HZ:<A ... VI>:01
  • Sets A, D, VI to $(LOC):60HZ:<A ... VI>:02
  • Sets A, D, VI to $(LOC):60HZ:<A ... VI>:03
  • Sets A, D, VI to $(LOC):60HZ:<A ... VI>:04
  • Sets A, D, VI to $(LOC):60HZ:<A ... VI>:05
  • Sets A, D, VI to $(LOC):60HZ:<A ... VI>:06
  • Sets VI to $(LOC):50HX:VI:07
  • Sets VI to $(LOC):50HX:VI:08
  • ###############TODO: unsure of why values need to be set to 02 after being set to 01, Also these settings from epics may not be needed

##################################################################

  • Tasks to complete for PP ioc
    • Find the correct delay so that RESET_PG can be completed before other links are process in RUN_<mode>
    • Add records to write to desired sequencer and evr records and hold desired information
    • Edit EDM screen to reflect changes to ioc
    • Add homing option to SE_L, look in to turning on scanning so motion is displayed on screensTest effects of scanning SD and DF on motor performance, may be covered by MV scanning
    • Update confluence page