Greetings
I have progressed as far as I can with implementing an EPICS controlled motor through a Mclennan SimStep single axis stepper controller. The IOC seg faults upon boot, with the output being:
#!../../bin/linux-arm/pitest
## You may have to change pitest to something else
## everywhere it appears in this file
< envPaths
epicsEnvSet("ARCH","linux-arm")
epicsEnvSet("IOC","iocpitest")
epicsEnvSet("TOP","/opt/epics/pitest")
epicsEnvSet("EPICS_BASE","/opt/epics/base")
epicsEnvSet("ASYN","/opt/epics/modules/asyn4-21")
epicsEnvSet("CALC","/opt/epics/modules/calc-3-2")
epicsEnvSet("MOTOR","/opt/epics/modules/motorR6-8")
## Register all support components
dbLoadDatabase("../../dbd/pitest.dbd",0,0)
pitest_registerRecordDeviceDriver(pdbbase)
## Load record instances
dbLoadRecords("../../db/sum.db","INST=pitest")
# Test SE (test-se1)
drvAsynIPPortConfigure("test-se1-1", "172.16.0.108:5300")
# Test for Mclennan PM600 stepper motor controller
# PM304Setup(controller count, poll rate (Hz))
# PM304Config(card being configured, asyn port name, number of axes)
PM304Setup(1,5)
PM304Config(1, "test-se1-1", 1)
iocInit()
Starting iocInit
############################################################################
## EPICS R3.14.12.3 $Date: Mon 2012-12-17 14:11:47 -0600$
## EPICS Base built Aug 13 2013
############################################################################
2013/12/11 04:10:26.697 devMotorAsyn::init_record, test:buncher:motor find int32 interface failed
Segmentation fault
Points to note are:
·
The controller within the SimStep is a single PM600
·
I’m connecting to the SimStep via a Ethernet to serial adapter, through which I can successfully communicate to the PM600 using a telnet console
·
If the Ethernet to serial adapter is off during IOC boot, I still get the “interface failed”, but it doesn’t seg fault.
·
The SimSteps can be daisy chained to provide multi axis control, so more than one card can be addressed on the same port
The relevant sections of the application Makefile is:
…
# Include dbd files from all support applications:
#pitest_DBD += xxx.dbd
pitest_DBD += asyn.dbd
pitest_DBD += asynRecord.dbd
pitest_DBD += drvAsynIPPort.dbd
pitest_DBD += motorRecord.dbd
pitest_DBD += motorSupport.dbd
pitest_DBD += devMclennanMotor.dbd
# Add all the support libraries needed by this IOC
#pitest_LIBS += xxx
pitest_LIBS += asyn
pitest_LIBS += motor
pitest_LIBS += Mclennan
# pitest_registerRecordDeviceDriver.cpp derives from pitest.dbd
pitest_SRCS += pitest_registerRecordDeviceDriver.cpp
…
And the record database includes:
# Test record for Mclennan PM600 Stepper Motor driver
record(motor, "test:buncher:motor") {
field(DTYP, "asynMotor")
field(OUT, "@asyn(test-se1-1 1)")
field(RRES, "1.0")
field(PREC, "0")
field(TWV, "10")
field(VELO, "50")
}
I can see a few places where I might have gone wrong, but I don’t know exactly where. HELP!
J
Regards
Peter
--
Dr Peter Linardakis
Accelerator Research and Development Engineer
Nuclear Physics | Research School of Physics and Engineering
Australian National University
e: [email protected]
p: (02) 6125 2862 f: (02) 6215 0748