# 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