Hi,
I'm working on supporting a New Focus 8743-CL controller at Gemini
Observatory using EPICS/RTEMS. I was thrilled to see that there already is a
driver for the 8742 model controller in the motor distribution. From my
initial reading, I'm thinking there will be minimal changes needed to support
closed loop control.
I've been trying to set up the driver, connected to the 8743, expecting
that most functionality is the same as the 8742. I seem to be doing something
wrong, however, since the IOC crashes during/shortly after iocInit .. appearing
to encounter problems during init_record. The errors I'm getting seem to
indicate a problem with how I'm setting up the driver support. I'm following
the example in "iocBoot/iocNewFocus874x".
Here are the errors I'm getting:
lis:m1Offset devAsynFloat64::initCommon findInterface asynFloat64Type
Bad init_rec return value PV: lis:m1Offset ao: init_record
lis:m1Resolution devAsynFloat64::initCommon findInterface asynFloat64Type
Bad init_rec return value PV: lis:m1Resolution ao: init_record
lis:m1Direction devAsynInt32::initCommon findInterface asynInt32Type
2018/03/27 17:09:45.730 devMotorAsyn::init_record, lis:m1 find int32
interface failed
I've done some digging on "devMotorAsyn::init_record find int32 interface
failed" and found several TechTalk threads about trying to set up model 1
drivers as model 3 (using asyn). The specific problem in those cases was
specifying DTYP as "asynMotor". (link to thread:
https://epics.anl.gov/tech-talk/2013/msg02425.php
<https://epics.anl.gov/tech-talk/2013/msg02425.php>)
I'm pretty sure I'm setting up the driver with the correct approach
though and find no other clues as to the root of the problem.
Here is my motor substitution file:
file "db/basic_asyn_motor.db"
{
pattern
{P,N,M,DTYP,PORT,ADDR,C,S,DESC,EGU,DIR,VELO,VBAS,ACCL,BDST,BVEL,BACC,MRES,PREC,DHLM,DLLM,INIT}
{lis:,1, "m$(N)","asynMotor",MOT1,1,0,0,"Rot",
counts,Pos,1750,500,1,0,0,50,1,0,0,0,""}
}
relevant portion of my startup script:
### Motors
# Setup IP port for 8742
drvAsynIPPortConfigure("MOT1", "10.1.60.111:23 <http://10.1.60.111:23/>")
asynOctetSetInputEos("MOT1",0,"\r\n")
asynOctetSetOutputEos("MOT1",0,"\r")
#db asyn debug traces
asynSetTraceMask("MOT1",0,0x9)
asynSetTraceIOMask("MOT1",0,0x2)
nf874xCreateController("M0", "MOT1", 1, 200, 1000)
## Load record instances
dbLoadTemplate("data/newfocus8742.asyn.motor.substitutions")
dbLoadRecords("${ASYN}/db/asynRecord.db",
"P="lis:",R=Asyn,PORT=MOT1,ADDR=,OMAX=80,IMAX=80")
I've done a bunch of checking to ensure that my dbd has all of the asyn/motor
support built in .. It seems ok.
Here's the Makefile component:
gis-mk-ioc_DBD += motorSupport.dbd
gis-mk-ioc_DBD += devNewFocus.dbd
gis-mk-ioc_DBD += devSoftMotor.dbd
gis-mk-ioc_DBD += motorSimSupport.dbd
gis-mk-ioc_DBD += asyn.dbd
gis-mk-ioc_DBD += drvAsynSerialPort.dbd
gis-mk-ioc_DBD += drvAsynIPPort.dbd
gis-mk-ioc_LIBS += NewFocus
gis-mk-ioc_LIBS += softMotor
gis-mk-ioc_LIBS += motorSimSupport
gis-mk-ioc_LIBS += motor
gis-mk-ioc_LIBS += asyn
Cheers,
Angelic Ebbers