Files
motorBase/motorApp/ImsSrc/README.ImsMDrivePlusMotor
T
2012-09-12 17:17:24 +00:00

121 lines
4.1 KiB
Plaintext

=======================================
ImsMDrivePlusMotor AsynPortDriver Notes
Author: Nia Fong, SLAC National Laboratory
First Initial: 10/28/2011
This driver is based on "model 3" motor asyn port driver defined by Mark Rivers.
The driver assumes:
1) each controller is configured for a single axis
2) the motor is set up for Party Mode (PY=1) and Echo Mode 2 (EM=2)
=======================================
=======================
Building an Application
=======================
Building the driver into an application requires
1) The 'asyn', 'motor' and 'ImsMDrivePlusMotor' (this driver) packages/modules to be built and
installed. The application's RELEASE file must point to these packages so that the build process
locates headers and libraries etc.
2) The application's '.dbd' file must contain
- motorSupport.dbd
- drvAsynIPPort.dbd (or equivalent 'asyn' port driver package)
- devImsMotor.dbd (this include support for all Ims drivers)
These '.dbd' files are best listed in the application src/Makefile:
<app>_DBD += motorSupport.dbd
<app>_DBD += devImsMotor.dbd
<app>_DBD += drvAsynIPPort.dbd
3) The application must be linked against the 'Ims', 'motor' and 'asyn'
libraries, e.g.,
<app>_LIBS += Ims motor asyn
===============
Custom Database
===============
There is an IMS specific IMS_extra.db database that contains IMS-specific records.
IMS_S: saves user variables and flags to controller's NVM
record(bo,"$(DEV):$(AREA):$(LOC):IMS_S") {
field(DESC, "Ims Save to NVM")
field(PINI, "NO")
field(DTYP, "asynInt32")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))IMS_SAVETONVM")
field(VAL, "0")
field(ZNAM, "No")
field(ONAM, "Yes")
}
=============================
Driver Run-Time Configuration
=============================
To configure the motor from the iocsh or a C/C++ application
1) Create and configure an asyn IP port
drvAsynIPPortConfigure(IOPortName, port, priority, disable auto-connect, no process EOS)
motorPortName: name string assigned to the asyn IP port being created
port: host:port [protocol]
2) Create and configure an ImsMDrivePlus controller
ImsMDrivePlusCreateController(motorPortName, IOPortName, devName, movingPollPeriod, idlePollPeriod)
motorPortName: name string assigned to the controller
IOPortName: name of asyn IO port that was created by drvAsynIPPortConfigure()
devName: unique device name used to address the motor in MCode
NOTE: the device name is prepended to all MCode commands to communicate in Party Mode.
See README file for more information.
movingPollPeriod: time in milliseconds between polls when axis is moving
idlePollPeriod: time in milliseconds between polls when axis is not moving
=========================
Example iocsh st.cmd file
=========================
#!../../bin/linux-x86/ImsMDrivePlus
# Register all support components
dbLoadDatabase("dbd/ImsMDrivePlus.dbd")
ImsMDrivePlus_registerRecordDeviceDriver pdbbase
# Motors substitutions, customize this for your motor
dbLoadTemplate "db/motor.mdriveplus.substitutions"
# Configure asyn communication port, first
drvAsynIPPortConfigure("M06", "ts-b34-nw08:2101", 0, 0, 0 )
# Configure one controller per motor, each controller just has 1 axis
ImsMDrivePlusCreateController("IMS1", "M06", "1", 200, 5000)
# Optional: Enable tracing
asynSetTraceIOMask("IMS1",0,2)
asynSetTraceMask("IMS1",0,2)
=============================================
Example application database substitions file
=============================================
Db/motor.mdrive.substitutions file:
file "$(MOTOR)/db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, DESC, ADDR, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, DHLM, DLLM, MRES, PREC, INIT}
{IMS:, 1, 1, "asynMotor", IMS1, "MDrive23", 0, mm, Pos, 3.0, 0.017, 2.0, 0, 0.017, 2.0, 100, -100, 0.000083, 4, ""}
}
file "$(MOTOR)/db/IMS_extra.db"
{
pattern
{DEV, AREA, LOC, PORT, ADDR, TIMEOUT}
{ims, IOC, 1, IMS1, 0, 1}