Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
EMU.cmd 9.13 KiB
# Required modules ###
require ifcdaq,0.2.0
require singlemotion,1.4.6
require mrfioc2,2.7.13
require pev,0.1.1
require ecat2db,0.3.1
require fastacquisition,1.1.0
require dataacquisition,1.0.1
require emu,catane
require emu-motor-test,catane
require tpmac,3.11.2


### MACROS ###
# PMAC common macros3       ) 
epicsEnvSet("PMACPREFIX", "LNS-ISRC-010:PBI-EM-PMAC")
epicsEnvSet("PMACPORT",   "GEOBRICK_ASYN")
epicsEnvSet("MOTOR_PORT", "pmac1" )
epicsEnvSet("NB_AXES", "1" )

# Motor Macros
epicsEnvSet("EGU",       "mm"   )
epicsEnvSet("DIR",       "Pos"  )
epicsEnvSet("MRES",      "0.000249515")
epicsEnvSet("PREC",      "4"    )
epicsEnvSet("DHLM",      "4"   )
epicsEnvSet("DLLM",      "-200"  )
epicsEnvSet("VELO",      "1.5"    )
epicsEnvSet("HVEL",      "2"    )
epicsEnvSet("VBAS",      "0.1"  )
epicsEnvSet("VMAX",      "7"    )
epicsEnvSet("ACCL",      "10"  )
epicsEnvSet("BDST",      "0"    )
epicsEnvSet("INIT",      ""     )
epicsEnvSet("OFF",       "0"    )

epicsEnvSet("MOTOR_NAME1",  "MTR1")
epicsEnvSet("AXIS_NO1",     "1")

# Motor Status macros
epicsEnvSet("SCAN",         "1 second")
epicsEnvSet("OVERHEAT1",    "MAJOR"   )
epicsEnvSet("SWITCH_OFF1",  "MINOR"   )
epicsEnvSet("OVERHEAT2",    "0"       )
epicsEnvSet("SWITCH_OFF2",  "0"       )
epicsEnvSet("MOTOR_ERROR1", "0"       )
epicsEnvSet("MOTOR_ERROR2", "0"       )
epicsEnvSet("MOTOR_ERROR3", "0"       )
epicsEnvSet("MOTOR_ERROR4", "0"       )

# EVG Macros 
epicsEnvSet("SYS"             "SYS0")
#####NOT NEEDED AT CATANIA epicsEnvSet("EVG"             "EVG0")
epicsEnvSet("EVG_VMESLOT"     "8")

# EVR Macros
epicsEnvSet("EVR_PCIDOMAIN",    "0000")
epicsEnvSet("EVR_PCIBUS",       "05")
epicsEnvSet("EVR_PCIDEVICE",    "00")
epicsEnvSet("EVR_PCIFUNCTION",  "0")
epicsEnvSet("EVR",              "EVR0")
epicsEnvSet("EVR_PUL0_EVENT",   "14")
epicsEnvSet("EVR_PUL0_DELAY",   "$(EVR_EV14_OUT0_DELAY=0)")
epicsEnvSet("EVR_PUL0_WIDTH",   "$(EVR_EV14_OUT0_WIDTH=1000)")

#DAQ macros
epicsEnvSet("DAQPREFIX",  "LNS-ISRC-010"  )
epicsEnvSet("DAQBUFSIZE", "1024"         )
epicsEnvSet("BUFFERSIZE", "20000"         )
#Scanning macros
epicsEnvSet("SCANPREFIX", "LNS-ISRC-010:PBI-EMV"     )
epicsEnvSet("SCAN_SLIT", "MTR"          )
epicsEnvSet("SCAN_EF", "PS"              )
epicsEnvSet("SCAN_POINTS_EF", "1000"     )
epicsEnvSet("SCAN_POINTS_SLIT", "100"    )

epicsEnvSet(EPICS_CA_MAX_ARRAY_BYTES, 4000000)

# Connection to PMAC and setup for $(NUM_MOTORS) motors
pmacAsynIPConfigure($(PMACPORT), "10.10.3.42:1025")
pmacCreateController($(MOTOR_PORT), $(PMACPORT), 0, $(NB_AXES), 50, 300)
pmacCreateAxis($(MOTOR_PORT), $(AXIS_NO1))

# Initialize EVG
#####NOT NEEDED AT CATANIA mrmEvgSetupVME($(EVG), $(EVG_VMESLOT), 0x100000, 1, 0x01)

# Initialize EVR
mrmEvrSetupPCI($(EVR), $(EVR_PCIDOMAIN), $(EVR_PCIBUS), $(EVR_PCIDEVICE), $(EVR_PCIFUNCTION))

# Initialize daq
ndsCreateDevice(ifcdaq, CARD0, card=0, fmc=2)

### LOAD RECORDS ###

#Load EVG records
#####NOT NEEDED AT CATANIA dbLoadRecords("evg-vme-230.db", "DEVICE=$(EVG), SYS=$(SYS)")

#Load EVR records
dbLoadRecords("evr-pmc-230.db", "DEVICE=$(EVR), SYS=$(SYS)")
dbLoadRecords("evr-softEvent.template", "DEVICE=$(EVR), SYS=$(SYS), EVT=$(EVR_PUL0_EVENT), CODE=$(EVR_PUL0_EVENT)")
dbLoadRecords("evr-pulserMap.template", "DEVICE=$(EVR), SYS=$(SYS), EVT=$(EVR_PUL0_EVENT), PID=0, F=Trig, ID=0")
#####NOT NEEDED AT CATANIA dbLoadRecords("evr-pulserMap.template", "DEVICE=$(EVR), SYS=$(SYS), EVT=$(EVR_PUL0_EVENT), PID=1, F=Trig, ID=1")

#
# Load Single motions records
#

#
# Motors
#

dbLoadRecords("motor.template", "PREFIX=$(PMACPREFIX),MOTOR_NAME=$(MOTOR_NAME1),MOTOR_PORT=$(MOTOR_PORT),AXIS_NO=$(AXIS_NO1),EGU=$(EGU),DIR=$(DIR),MRES=$(MRES),PREC=$(PREC),DHLM=$(DHLM),DLLM=$(DLLM),HVEL=$(HVEL),VELO=$(VELO),VBAS=$(VBAS),VMAX=$(VMAX),ACCL=$(ACCL),BDST=$(BDST),INIT=$(INIT),OFF=$(OFF)")

#dbLoadRecords("get_value_pmac.db")
#dbLoadRecords("set_value_pmac.db")
#dbLoadRecords("console.db")

#
# Motor status
#

dbLoadRecords("motorStatus.template", "PREFIX=$(PMACPREFIX),MOTOR_NAME=$(MOTOR_NAME1),ASYN_PORT=$(PMACPORT),AXIS_NO=$(AXIS_NO1),SCAN=$(SCAN),EGU=$(EGU),PREC=$(PREC),OVERHEAT1=$(OVERHEAT1),SWITCH_OFF1=$(SWITCH_OFF1),OVERHEAT2=$(OVERHEAT2),SWITCH_OFF2=$(SWITCH_OFF2),MOTOR_ERROR1=$(MOTOR_ERROR1),MOTOR_ERROR2=$(MOTOR_ERROR2),MOTOR_ERROR3=$(MOTOR_ERROR3),MOTOR_ERROR4=$(MOTOR_ERROR4)")

#
# Homing procedure records
#

dbLoadRecords("motorHoming.template", "PREFIX=$(PMACPREFIX),MOTOR_NAME=$(MOTOR_NAME1),ASYN_PORT=$(PMACPORT),AXIS_NO=$(AXIS_NO1),PREC=$(PREC),EGU=$(EGU)")

dbLoadRecords("EMU.db", "DEVICE=$(SCANPREFIX), SCAN_SLIT=$(SCAN_SLIT), SCAN_EF=$(SCAN_EF),MTRREC=$(PMACPREFIX):$(MOTOR_NAME1), MAX_POINTS_EF=$(SCAN_POINTS_EF), MAX_POINTS_SLIT=$(SCAN_POINTS_SLIT), DAQNDSPREFIX=$(DAQPREFIX), DAQBUFSIZE=$(DAQBUFSIZE), DET1WF=PBI-EMV-FC:CurrR_Y, DET2WF=PBI-EM-HV1:VoltR_Y, DET3WF=PBI-EM-HV2:VoltR_Y, TR_TL=$(SYS)-$(EVR):Pul0-Ena-Sel, TR_TLTSEL=$(SYS)-$(EVR):Event-$(EVR_PUL0_EVENT)-SP.TIME, PSU_SP=LNS-ISRC-010:PBI-EM:HVhor-SP, PSU_RBV=LNS-ISRC-010:PBI-EM:HVhor-SP, PSU2_SP=LNS-ISRC-010:PBI-EM:HVver-SP, PSU2_RBV=LNS-ISRC-010:PBI-EM:HVver-SP,BUFFERSIZE=$(BUFFERSIZE)")

#
# Init ETHERCAT module
ecat2configure(0,500,1,1)


#############################################################################
######################### iocInit ###########################################
#############################################################################
iocInit

#### Motor homing
seq motorHoming "PREFIX=$(PMACPREFIX),MOTOR_NAME=$(MOTOR_NAME1)"
seq homeMtrAuto "PMACPREFIX=$(PMACPREFIX),MOTOR_NAME1=$(MOTOR_NAME1),DEVICE=$(SCANPREFIX),PREFIX=LNS-ISRC-010"


#### Simulation of a current with ES4134 from Beckoff
#seq RampCurrent "PREFIX_PS=LNS-ISRC-010:PBI-EM,CONS_PS2=HVhor-SP,DEVICE=SCAN,SCAN_SLIT=$(SCAN_SLIT)"


# SET INTERFACE FROM IFCDAQ TO Allison scanner
# Forward link wf record to Detector guard
dbpf $(DAQPREFIX):PBI-EMV-FC:CurrR_Y.FLNK $(SCANPREFIX):DET1-GUARD
dbpf $(DAQPREFIX):PBI-EM-HV1:VoltR_Y.FLNK $(SCANPREFIX):DET2-GUARD
dbpf $(DAQPREFIX):PBI-EM-HV2:VoltR_Y.FLNK $(SCANPREFIX):DET3-GUARD
# Forward link from state record to Detector trigger
dbpf $(DAQPREFIX):PBI-EM:CARD0-STAT-RB.FLNK $(SCANPREFIX):DAQTRG-DAQSTGUARD


# Forward link number of samples rbv to compress N record, so that detetor know number of elements to average over.
dbpf $(DAQPREFIX):PBI-EM:CARD0:NSAMPLES-RB.FLNK "$(SCANPREFIX):DET1-COMPRESSN"


# Set tsel on WF record to event record in EVR
dbpf $(DAQPREFIX):PBI-EMV-FC:CurrR_Y.TSEL $(SYS)-$(EVR):Event-$(EVR_PUL0_EVENT)-SP.TIME
dbpf $(DAQPREFIX):PBI-EM-HV1:VoltR_Y.TSEL $(SYS)-$(EVR):Event-$(EVR_PUL0_EVENT)-SP.TIME
dbpf $(DAQPREFIX):PBI-EM-HV2:VoltR_Y.TSEL $(SYS)-$(EVR):Event-$(EVR_PUL0_EVENT)-SP.TIME
dbpf $(SYS)-$(EVR):Time-I.TSE -2

############################################################
################### Configuration Timing ###################
############################################################

########## TIMING GENERATOR: setup TrgSrc0 to EVENT 14 ######
## Internal trigger from Mxc1 - TrgSrc0
#####NOT NEEDED AT CATANIA  dbpf $(SYS)-$(EVG):TrigEvt0-EvtCode-SP 	 $(EVR_PUL0_EVENT)
#####NOT NEEDED AT CATANIA  dbpf $(SYS)-$(EVG):Mxc1-Frequency-SP	 14
#####NOT NEEDED AT CATANIA  dbpf $(SYS)-$(EVG):Mxc1-TrigSrc0-SP 	 "Set"

### Setup EVR
##set the pulser 0 to trigger on output 0
########## TIMING RECEIVER: setup OUT0 ##############

dbpf $(SYS)-$(EVR):Link-Clk-SP           88.0519    
dbpf $(SYS)-$(EVR):FrontOut0-Src-SP      0
dbpf $(SYS)-$(EVR):Pul0-Evt-Trig0-SP 	 $(EVR_PUL0_EVENT)
dbpf $(SYS)-$(EVR):Pul0-Width-SP         20000
dbpf $(SYS)-$(EVR):Pul0-Delay-SP         0
dbpf $(SYS)-$(EVR):FrontOut0-Ena-SP      "Enabled"

### Setup EVR
##set the pulser 1 to trigger on output 1 for BETSI
########## TIMING RECEIVER: setup OUT0 ##############
#####NOT NEEDED AT CATANIA  dbpf $(SYS)-$(EVR):FrontOut1-Src-SP      1
#####NOT NEEDED AT CATANIA  dbpf $(SYS)-$(EVR):Pul1-Evt-Trig1-SP 	 $(EVR_PUL0_EVENT)
#####NOT NEEDED AT CATANIA  dbpf $(SYS)-$(EVR):Pul1-Width-SP         20000
#####NOT NEEDED AT CATANIA  dbpf $(SYS)-$(EVR):Pul1-Delay-SP         0
#####NOT NEEDED AT CATANIA  dbpf $(SYS)-$(EVR):FrontOut1-Ena-SP      "Enabled"

### Setup IFCDAQ PVs ###
# Set trigger repeat to 1
dbpf $(DAQPREFIX):PBI-EM:CARD0:TriggerRepeat 1
# Set trigger source to external GPIO
dbpf $(DAQPREFIX):PBI-EM:CARD0:TRIGGERSOURCE "EXT-GPIO"
sleep(1)
dbpf $(DAQPREFIX):PBI-EM:CARD0-STAT ON
sleep(3)
dbpf $(DAQPREFIX):PBI-EM:CARD0-STAT RUNNING
sleep(1)
dbpf $(DAQPREFIX):PBI-EM:CARD0-STAT RUNNING
# Set the Frequency to 1MHz
dbpf $(DAQPREFIX):PBI-EM:CARD0:SAMPLINGRATE 1000000

### Setup reasonable values for sscan record ###
# Initialize Motor positioners
dbpf $(SCANPREFIX):$(SCAN_SLIT).P4SP -120
dbpf $(SCANPREFIX):$(SCAN_SLIT).P4EP -180
dbpf $(SCANPREFIX):$(SCAN_SLIT).P2SP 1.5
dbpf $(SCANPREFIX):$(SCAN_SLIT).P2EP 1.5
dbpf $(SCANPREFIX):$(SCAN_SLIT).P1SP 4
dbpf $(SCANPREFIX):$(SCAN_SLIT).P1EP 4
dbpf $(SCANPREFIX):$(SCAN_SLIT).NPTS 11

# Initialize Power supply positioners
dbpf $(SCANPREFIX):PROC-AngleMax-SP 80
dbpf $(SCANPREFIX):PROC-AngleMin-SP -80
dbpf $(SCANPREFIX):$(SCAN_EF).NPTS 200
dbpf $(SCANPREFIX):$(SCAN_EF).PDLY 0.02
dbpf $(SCANPREFIX):$(SCAN_EF).DDLY 0.01

dbpf $(DAQPREFIX):PBI-EM:CARD0:TriggerEdge 1
dbpf $(DAQPREFIX):PBI-EM:CARD0:NSAMPLES_ms 7
dbpf $(DAQPREFIX):PBI-EMV:LCURSOR_ms 2
dbpf $(DAQPREFIX):PBI-EMV:RCURSOR_ms 6