Experimental Physics and
| |||||||||||||||
|
Hi all,
I'm trying to build an IOC to talk to a MAXnet controller using xxx-5-8 and motor-6-9 (synApps-5-8, base-3.15.5). Nothing in motor-6-9/motorApp/Makefile is deselected and synApps builds without error. The st.cmd and boot output are below but the error is: omsMAXnetConfig("MAXNET1" , 10, "MAXNET", 10, 1000, "") st.cmd line 67: Command omsMAXnetConfig not found. How do I tell the IOC where to find the maxnet support? Thanks, David # MAXnet Serial drvAsynSerialPortConfigure("MAXNET","/dev/ttyUSB0",0,0,0) asynSetOption("MAXNET",0,"baud","115200") asynSetOption("MAXNET",0,"bits","8") asynSetOption("MAXNET",0,"parity","none") asynSetOption("MAXNET",0,"crtscts","Y") dbLoadRecords("$(ASYN)/db/asynRecord.db","P=oms:,R=maxnet,PORT=MAXNET,ADDR=0,OMAX=0,IMAX=0") ### Uncomment one of the following two lines: #asynOctetSetInputEos("MAXNET",0,"\n\r") asynOctetSetInputEos("MAXNET",0,"\n") asynOctetSetOutputEos("MAXNET",0,"\n") # omsMAXnetConfig(portName, /* MAXnet Motor Asyn Port name */ # numAxes, /* Number of axes this controller supports */ # serialPortName, /* MAXnet Serial Asyn Port name */ # movingPollPeriod, /* Time to poll (msec) when an axis is in motion */ # idlePollPeriod, /* Time to poll (msec) when an axis is idle. 0 for no polling */ # initString) /* Init String sent to card */ omsMAXnetConfig("MAXNET1" , 10, "MAXNET", 10, 1000, "") [david@dusk iocLinux]$ ../../bin/linux-x86_64/stxm st.cmd # Linux startup script # For devIocStats epicsEnvSet("ENGINEER","engineer") epicsEnvSet("LOCATION","location") < envPaths epicsEnvSet("IOC","iocLinux") epicsEnvSet("TOP","/opt/epics/synApps_5_8/ioc/stxm") epicsEnvSet("SUPPORT","/opt/epics/synApps_5_8/support") epicsEnvSet("EPICS_BASE","/opt/epics/base") epicsEnvSet("ALIVE","/opt/epics/synApps_5_8/support/alive-1-0") epicsEnvSet("ALLEN_BRADLEY","/opt/epics/synApps_5_8/support/allenBradley-2-3") epicsEnvSet("AREA_DETECTOR","/opt/epics/synApps_5_8/support/areaDetector") epicsEnvSet("ADCORE","/opt/epics/synApps_5_8/support/areaDetector/ADCore") epicsEnvSet("ADBINARIES","/opt/epics/synApps_5_8/support/areaDetector/ADBinaries") epicsEnvSet("ASYN","/opt/epics/synApps_5_8/support/asyn-4-30") epicsEnvSet("AUTOSAVE","/opt/epics/synApps_5_8/support/autosave-5-7-1") epicsEnvSet("BUSY","/opt/epics/synApps_5_8/support/busy-1-6-1") epicsEnvSet("CALC","/opt/epics/synApps_5_8/support/calc-3-4-2-1") epicsEnvSet("CAMAC","/opt/epics/synApps_5_8/support/camac-2-7") epicsEnvSet("CAPUTRECORDER","/opt/epics/synApps_5_8/support/caputRecorder-1-5-1") epicsEnvSet("DAC128V","/opt/epics/synApps_5_8/support/dac128V-2-8") epicsEnvSet("DELAYGEN","/opt/epics/synApps_5_8/support/delaygen-1-1-1") epicsEnvSet("DEVIOCSTATS","/opt/epics/synApps_5_8/support/devIocStats-3-1-13") epicsEnvSet("IP","/opt/epics/synApps_5_8/support/ip-2-17") epicsEnvSet("IP330","/opt/epics/synApps_5_8/support/ip330-2-8") epicsEnvSet("IPAC","/opt/epics/synApps_5_8/support/ipac-2-14") epicsEnvSet("IPUNIDIG","/opt/epics/synApps_5_8/support/ipUnidig-2-10") epicsEnvSet("LOVE","/opt/epics/synApps_5_8/support/love-3-2-5") epicsEnvSet("MCA","/opt/epics/synApps_5_8/support/mca-7-6") epicsEnvSet("MEASCOMP","/opt/epics/synApps_5_8/support/measComp-1-1") epicsEnvSet("MODBUS","/opt/epics/synApps_5_8/support/modbus-2-7") epicsEnvSet("MOTOR","/opt/epics/synApps_5_8/support/motor-6-9") epicsEnvSet("OPTICS","/opt/epics/synApps_5_8/support/optics-2-9-3") epicsEnvSet("SNCSEQ","/opt/epics/synApps_5_8/support/seq-2-2-3") epicsEnvSet("SOFTGLUE","/opt/epics/synApps_5_8/support/softGlue-2-4-3") epicsEnvSet("SSCAN","/opt/epics/synApps_5_8/support/sscan-2-10") epicsEnvSet("STD","/opt/epics/synApps_5_8/support/std-3-4") epicsEnvSet("STREAM","/opt/epics/synApps_5_8/support/stream-2-6a") epicsEnvSet("VAC","/opt/epics/synApps_5_8/support/vac-1-5-1") epicsEnvSet("VME","/opt/epics/synApps_5_8/support/vme-2-8-2") epicsEnvSet("XXX","/opt/epics/synApps_5_8/support/xxx-5-8") # save_restore.cmd needs the full path to the startup directory, which # envPaths currently does not provide epicsEnvSet(STARTUP,/opt/epics/synApps_5_8/ioc/stxm/iocBoot/iocLinux) # Increase size of buffer for error logging from default 1256 errlogInit(20000) # Specify largest array CA will transport # Note for N doubles, need N*8 bytes+some overhead epicsEnvSet EPICS_CA_MAX_ARRAY_BYTES 64010 epicsEnvSet ("STREAM_PROTOCOL_PATH", ".:../protocols") ################################################################################ # Tell EPICS all about the record types, device-support modules, drivers, # etc. in the software we just loaded (stxm.munch) dbLoadDatabase("../../dbd/iocstxmLinux.dbd") iocstxmLinux_registerRecordDeviceDriver(pdbbase) ### save_restore setup < save_restore.cmd # BEGIN save_restore.cmd ------------------------------------------------------ ### save_restore setup # status PVs #save_restoreSet_UseStatusPVs(1) save_restoreSet_status_prefix("stxm:") dbLoadRecords("/opt/epics/synApps_5_8/support/autosave-5-7-1/asApp/Db/save_restoreStatus.db", "P=stxm:, DEAD_SECONDS=5") # Ok to save/restore save sets with missing values (no CA connection to PV)? save_restoreSet_IncompleteSetsOk(1) # Save dated backup files? save_restoreSet_DatedBackupFiles(1) # Number of sequenced backup files to write save_restoreSet_NumSeqFiles(3) # Time interval between sequenced backups save_restoreSet_SeqPeriodInSeconds(300) # Ok to retry connecting to PVs whose initial connection attempt failed? save_restoreSet_CAReconnect(1) # Time interval in seconds between forced save-file writes. (-1 means forever). # This is intended to get save files written even if the normal trigger mechanism is broken. save_restoreSet_CallbackTimeout(-1) # specify where save files should be set_savefile_path("/opt/epics/synApps_5_8/ioc/stxm/iocBoot/iocLinux", "autosave") ### # specify what save files should be restored. Note these files must be # in the directory specified in set_savefile_path(), or, if that function # has not been called, from the directory current when iocInit is invoked set_pass0_restoreFile("auto_positions.sav", "P=stxm:") # Save positions every five seconds doAfterIocInit("create_monitor_set('auto_positions.req',5,'P=stxm:')") set_pass0_restoreFile("auto_settings.sav", "P=stxm:") set_pass1_restoreFile("auto_settings.sav", "P=stxm:") # save settings every thirty seconds doAfterIocInit("create_monitor_set('auto_settings.req',30,'P=stxm:')") # Note that you can reload these sets after creating them: e.g., # reload_monitor_set("auto_settings.req",30,"P=stxm:") # Note that you can restore a .sav file without also autosaving to it. #set_pass0_restoreFile("myInitData.sav") #set_pass1_restoreFile("myInitData.sav") # Also, you can restore a .sav file that contains macros. (autosave R5-4-2) #set_pass0_restoreFile("myGenericData.sav", "P=stxm:") #set_pass1_restoreFile("myGenericData.sav", "P=stxm:") ### # specify directories in which to to search for included request files set_requestfile_path("/opt/epics/synApps_5_8/ioc/stxm/iocBoot/iocLinux", "") set_requestfile_path("/opt/epics/synApps_5_8/ioc/stxm/iocBoot/iocLinux", "autosave") set_requestfile_path("/opt/epics/synApps_5_8/support/areaDetector", "ADApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/areaDetector/ADCore", "ADApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/autosave-5-7-1", "asApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/busy-1-6-1", "busyApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/calc-3-4-2-1", "calcApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/camac-2-7", "camacApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/caputRecorder-1-5-1", "caputRecorderApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/dac128V-2-8", "dac128VApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/delaygen-1-1-1", "delaygenApp/Db") macLib: macro DXP is undefined (expanding string set_requestfile_path("$(DXP)", "dxpApp/Db")) set_requestfile_path("/opt/epics/synApps_5_8/support/ip-2-17", "ipApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/ip330-2-8", "ip330App/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/ipUnidig-2-10", "ipUnidigApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/love-3-2-5", "loveApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/mca-7-6", "mcaApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/measComp-1-1", "measCompApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/modbus-2-7", "modbusApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/motor-6-9", "motorApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/optics-2-9-3", "opticsApp/Db") macLib: macro QUADEM is undefined (expanding string set_requestfile_path("$(QUADEM)", "quadEMApp/Db")) set_requestfile_path("/opt/epics/synApps_5_8/support/sscan-2-10", "sscanApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/softGlue-2-4-3", "softGlueApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/std-3-4", "stdApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/vac-1-5-1", "vacApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/support/vme-2-8-2", "vmeApp/Db") set_requestfile_path("/opt/epics/synApps_5_8/ioc/stxm", "stxmApp/Db") # Debug-output level save_restoreSet_Debug(0) # Tell autosave to automatically build built_settings.req and # built_positions.req from databases and macros supplied to dbLoadRecords() # (and dbLoadTemplate(), which calls dbLoadRecords()). epicsEnvSet("BUILT_SETTINGS", "built_settings.req") epicsEnvSet("BUILT_POSITIONS", "built_positions.req") autosaveBuild("built_settings.req", "_settings.req", 1) pretending to register a dbLoadRecords hook autosaveBuild("built_positions.req", "_positions.req", 1) # END save_restore.cmd -------------------------------------------------------- # Access Security dbLoadRecords("/opt/epics/synApps_5_8/ioc/stxm/stxmApp/Db/Security_Control.db","P=stxm:") asSetFilename("/opt/epics/synApps_5_8/ioc/stxm/iocBoot/accessSecurity.acf") asSetSubstitutions("P=stxm:") # soft scaler for testing < softScaler.cmd # soft scaler dbLoadRecords("/opt/epics/synApps_5_8/support/asyn-4-30/db/asynRecord.db","P=stxm:,R=asynScaler,PORT=scaler1Port,ADDR=0,OMAX=0,IMAX=0") # drvScalerSoftConfigure(char *portName, int maxChans, char *pvTemplate) drvScalerSoftConfigure("scaler1Port", 8, "stxm:scaler1:s%d") dbLoadRecords("/opt/epics/synApps_5_8/support/std-3-4/stdApp/Db/scaler.db","P=stxm:,S=scaler1,OUT=@asyn(scaler1Port 0 0),DTYP=Asyn Scaler,FREQ=10000000") dbLoadRecords("/opt/epics/synApps_5_8/support/std-3-4/stdApp/Db/scalerSoftCtrl.db","P=stxm:,Q=scaler1:,SCALER=stxm:scaler1") # user-assignable ramp/tweak dbLoadRecords("/opt/epics/synApps_5_8/support/std-3-4/stdApp/Db/ramp_tweak.db","P=stxm:,Q=rt1") ### Motors dbLoadTemplate("motor.substitutions.MAXnet") dbLoadTemplate: error opening sub file motor.substitutions.MAXnet #dbLoadTemplate("MAXnetAux.substitutions") # MAXnet IP #drvAsynIPPortConfigure("MAXNET","maxnet-ip-address:23",0,0,0) # MAXnet Serial drvAsynSerialPortConfigure("MAXNET","/dev/ttyUSB0",0,0,0) asynSetOption("MAXNET",0,"baud","115200") asynSetOption("MAXNET",0,"bits","8") asynSetOption("MAXNET",0,"parity","none") asynSetOption("MAXNET",0,"crtscts","Y") dbLoadRecords("/opt/epics/synApps_5_8/support/asyn-4-30/db/asynRecord.db","P=oms:,R=maxnet,PORT=MAXNET,ADDR=0,OMAX=0,IMAX=0") ### Uncomment one of the following two lines: #asynOctetSetInputEos("MAXNET",0,"\n\r") asynOctetSetInputEos("MAXNET",0,"\n") asynOctetSetOutputEos("MAXNET",0,"\n") # omsMAXnetConfig(portName, /* MAXnet Motor Asyn Port name */ # numAxes, /* Number of axes this controller supports */ # serialPortName, /* MAXnet Serial Asyn Port name */ # movingPollPeriod, /* Time to poll (msec) when an axis is in motion */ # idlePollPeriod, /* Time to poll (msec) when an axis is idle. 0 for no polling */ # initString) /* Init String sent to card */ omsMAXnetConfig("MAXNET1" , 10, "MAXNET", 10, 1000, "") st.cmd line 67: Command omsMAXnetConfig not found. ### Scan-support software # crate-resident scan. This executes 1D, 2D, 3D, and 4D scans, and caches # 1D data, but it doesn't store anything to disk. (See 'saveData' below for that.) dbLoadRecords("/opt/epics/synApps_5_8/support/sscan-2-10/sscanApp/Db/standardScans.db","P=stxm:,MAXPTS1=1000,MAXPTS2=1000,MAXPTS3=1000,MAXPTS4=1000,MAXPTSH=1000") dbLoadRecords("/opt/epics/synApps_5_8/support/sscan-2-10/sscanApp/Db/saveData.db","P=stxm:") # Run this after iocInit: doAfterIocInit("saveData_Init(saveData.req, 'P=stxm:')") dbLoadRecords("/opt/epics/synApps_5_8/support/sscan-2-10/sscanApp/Db/scanProgress.db","P=stxm:scanProgress:") # Run this after iocInit: doAfterIocInit("seq &scanProgress, 'S=stxm:, P=stxm:scanProgress:'") # configMenu example. dbLoadRecords("/opt/epics/synApps_5_8/support/autosave-5-7-1/asApp/Db/configMenu.db","P=stxm:,CONFIG=scan1") # Note that the request file MUST be named $(CONFIG)Menu.req # If the macro CONFIGMENU is defined with any value, backup (".savB") and # sequence files (".savN") will not be written. We don't want these for configMenu. # Run this after iocInit: doAfterIocInit("create_manual_set('scan1Menu.req','P=stxm:,CONFIG=scan1,CONFIGMENU=1')") # You could make scan configurations read-only: #dbLoadRecords("$(AUTOSAVE)/asApp/Db/configMenu.db","P=stxm:,CONFIG=scan1,ENABLE_SAVE=0") # read-only configMenu example. (Read-only, because we're not calling create_manual_set().) #dbLoadRecords("$(AUTOSAVE)/asApp/Db/configMenu.db","P=stxm:,CONFIG=scan2") # A set of scan parameters for each positioner. This is a convenience # for the user. It can contain an entry for each scannable thing in the # crate. dbLoadTemplate("scanParms.substitutions") ### Stuff for user programming ### < calc.cmd ### Stuff for user programming ### dbLoadRecords("/opt/epics/synApps_5_8/support/calc-3-4-2-1/calcApp/Db/userCalcs10.db","P=stxm:") appendToFile("built_settings.req", '$(P)userCalcEnable') dbLoadRecords("/opt/epics/synApps_5_8/support/calc-3-4-2-1/calcApp/Db/userCalcOuts10.db","P=stxm:") appendToFile("built_settings.req", '$(P)userCalcOutEnable') dbLoadRecords("/opt/epics/synApps_5_8/support/calc-3-4-2-1/calcApp/Db/userCalcOuts10more.db","P=stxm:,N1=11,N2=12,N3=13,N4=14,N5=15,N6=16,N7=17,N8=18,N9=19,N10=20") dbLoadRecords("/opt/epics/synApps_5_8/support/calc-3-4-2-1/calcApp/Db/userStringCalcs10.db","P=stxm:") appendToFile("built_settings.req", '$(P)userStringCalcEnable') dbLoadRecords("/opt/epics/synApps_5_8/support/calc-3-4-2-1/calcApp/Db/userArrayCalcs10.db","P=stxm:,N=8000") appendToFile("built_settings.req", '$(P)userArrayCalcEnable') dbLoadRecords("/opt/epics/synApps_5_8/support/calc-3-4-2-1/calcApp/Db/userTransforms10.db","P=stxm:") appendToFile("built_settings.req", '$(P)userTranEnable') dbLoadRecords("/opt/epics/synApps_5_8/support/calc-3-4-2-1/calcApp/Db/userAve10.db","P=stxm:") # string sequence (sseq) records dbLoadRecords("/opt/epics/synApps_5_8/support/calc-3-4-2-1/calcApp/Db/userStringSeqs10.db","P=stxm:") appendToFile("built_settings.req", '$(P)userStringSeqEnable') # editSseq - edit any sseq or seq record dbLoadRecords("/opt/epics/synApps_5_8/support/calc-3-4-2-1/calcApp/Db/editSseq.db", "P=stxm:,Q=ES:") doAfterIocInit("seq &editSseq, 'P=stxm:,Q=ES:'") # interpolation dbLoadRecords("/opt/epics/synApps_5_8/support/calc-3-4-2-1/calcApp/Db/interp.db", "P=stxm:,N=2000") dbLoadRecords("/opt/epics/synApps_5_8/support/calc-3-4-2-1/calcApp/Db/interpNew.db", "P=stxm:,Q=1,N=2000") # pvHistory (in-crate archive of up to three PV's) dbLoadRecords("/opt/epics/synApps_5_8/support/std-3-4/stdApp/Db/pvHistory.db","P=stxm:,N=1,MAXSAMPLES=1440") # busy record dbLoadRecords("/opt/epics/synApps_5_8/support/busy-1-6-1/busyApp/Db/busyRecord.db", "P=stxm:,R=mybusy") dbLoadRecords("/opt/epics/synApps_5_8/support/busy-1-6-1/busyApp/Db/busyRecord.db", "P=stxm:,R=mybusy2") # Soft function generator #dbLoadRecords("$(CALC)/calcApp/Db/FuncGen.db","P=stxm:,Q=fgen,OUT=stxm:m7.VAL") # Slow feedback dbLoadTemplate "pid_slow.substitutions" dbLoadTemplate "async_pid_slow.substitutions" #dbLoadTemplate "fb_epid.substitutions" # Miscellaneous PV's, such as burtResult dbLoadRecords("/opt/epics/synApps_5_8/support/std-3-4/stdApp/Db/misc.db","P=stxm:") # devIocStats dbLoadRecords("/opt/epics/synApps_5_8/support/devIocStats-3-1-13/db/iocAdminSoft.db","IOC=stxm") ### Load database record for alive heartbeating support. # RHOST specifies the IP address that receives the heartbeats. #dbLoadRecords("$(ALIVE)/aliveApp/Db/alive.db", "P=stxm:,RHOST=X.X.X.X") ############################################################################### iocInit Starting iocInit ############################################################################ ## EPICS R3.15.5 ## EPICS Base built Jan 26 2017 ############################################################################ reboot_restore: entry for file 'auto_positions.sav' reboot_restore: Found filename 'auto_positions.sav' in restoreFileList. *** restoring from '/opt/epics/synApps_5_8/ioc/stxm/iocBoot/iocLinux/autosave/auto_positions.sav' at initHookState 6 (before record/device init) *** reboot_restore: done with file 'auto_positions.sav' reboot_restore: entry for file 'auto_settings.sav' reboot_restore: Found filename 'auto_settings.sav' in restoreFileList. *** restoring from '/opt/epics/synApps_5_8/ioc/stxm/iocBoot/iocLinux/autosave/auto_settings.sav' at initHookState 6 (before record/device init) *** reboot_restore: done with file 'auto_settings.sav' recDynLinkOut: waiting for CA context reboot_restore: entry for file 'auto_settings.sav' reboot_restore: Found filename 'auto_settings.sav' in restoreFileList. *** restoring from '/opt/epics/synApps_5_8/ioc/stxm/iocBoot/iocLinux/autosave/auto_settings.sav' at initHookState 7 (after record/device init) *** reboot_restore: done with file 'auto_settings.sav' recDynLinkOut: got CA context iocRun: All initialization complete create_monitor_set('auto_positions.req',5,'P=stxm:') create_monitor_set('auto_settings.req',30,'P=stxm:') auto_positions.sav: 0 of 0 PV's connected saveData_Init(saveData.req, 'P=stxm:') saveData: message queue created saveData:maxAllowedRetries = 10 saveData:retryWaitInSecs = 15 seq &scanProgress, 'S=stxm:, P=stxm:scanProgress:' sevr=info Sequencer release 2.2.3, compiled Thu Jan 26 13:28:16 2017 sevr=info Spawning sequencer program "scanProgress", thread 0x249e420: "scanProgress" sevr=info scanProgress[0]: all channels connected & received 1st monitor create_manual_set('scan1Menu.req','P=stxm:,CONFIG=scan1,CONFIGMENU=1') seq &editSseq, 'P=stxm:,Q=ES:' sevr=info Sequencer release 2.2.3, compiled Thu Jan 26 13:28:16 2017 sevr=info Spawning sequencer program "editSseq", thread 0x24b6610: "editSseq" sevr=info editSseq[0]: all channels connected & received 1st monitor sevr=minor ca_array_get_callback( typeToCA(type), count, var->chid, pvCaGetHandler, arg): Virtual circuit disconnect ############################################################################### # write all the PV names to a local file dbl > dbl-all.txt # Report states of database CA links dbcar(*,1) CA links in all records stxm:pid_slow.INP --> stxm:IP330_1 (0, 0) stxm:pid_slow.OUTL --> stxm:DAC3_1 (0, 0) stxm:pid_slowStop2.OUT --> stxm:DAC3_1 (0, 0) stxm:pid_slowOUT_tweak_down.INPB --> stxm:DAC3_1 (0, 0) stxm:pid_slowOUT_tweak_down.OUT --> stxm:DAC3_1 (0, 0) stxm:pid_slowOUT_tweak_up.INPB --> stxm:DAC3_1 (0, 0) stxm:pid_slowOUT_tweak_up.OUT --> stxm:DAC3_1 (0, 0) stxm:history1_PV1_DESC.DOL --> .DESC (0, 0) stxm:history1_PV2_DESC.DOL --> .DESC (0, 0) stxm:history1_PV3_DESC.DOL --> .DESC (0, 0) Total 270 CA links; 260 connected, 10 not connected. 0 can't read, 0 can't write. (0 disconnects, 0 writes prohibited) # print the time our boot was finished date 2017/02/03 08:57:44.475244 epics> scan1Menu.sav: 365 of 365 PV's connected auto_settings.sav: 6 of 6 PV's connected
| ||||||||||||||
ANJ, 21 Dec 2017 |
·
Home
·
News
·
About
·
Base
·
Modules
·
Extensions
·
Distributions
·
Download
·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing · |