Changed set/getPositionCompare API

This commit is contained in:
MarkRivers
2015-03-11 20:02:33 +00:00
parent 57bf44260e
commit b5954f3c7d
2 changed files with 59 additions and 27 deletions
+53 -27
View File
@@ -161,22 +161,22 @@ XPSController::XPSController(const char *portName, const char *IPAddress, int IP
// Create controller-specific parameters
createParam(XPSMinJerkString, asynParamFloat64, &XPSMinJerk_);
createParam(XPSMaxJerkString, asynParamFloat64, &XPSMaxJerk_);
createParam(XPSPositionCompareEnableString, asynParamInt32, &XPSPositionCompareEnable_);
createParam(XPSPositionCompareEnableString, asynParamInt32, &XPSPositionCompareEnable_);
createParam(XPSPositionCompareMinPositionString, asynParamFloat64, &XPSPositionCompareMinPosition_);
createParam(XPSPositionCompareMaxPositionString, asynParamFloat64, &XPSPositionCompareMaxPosition_);
createParam(XPSPositionCompareStepSizeString, asynParamFloat64, &XPSPositionCompareStepSize_);
createParam(XPSPositionComparePulseWidthString, asynParamFloat64, &XPSPositionComparePulseWidth_);
createParam(XPSPositionCompareSettlingTimeString, asynParamFloat64, &XPSPositionCompareSettlingTime_);
createParam(XPSPositionComparePulseWidthString, asynParamInt32, &XPSPositionComparePulseWidth_);
createParam(XPSPositionCompareSettlingTimeString, asynParamInt32, &XPSPositionCompareSettlingTime_);
createParam(XPSProfileMaxVelocityString, asynParamFloat64, &XPSProfileMaxVelocity_);
createParam(XPSProfileMaxAccelerationString, asynParamFloat64, &XPSProfileMaxAcceleration_);
createParam(XPSProfileMinPositionString, asynParamFloat64, &XPSProfileMinPosition_);
createParam(XPSProfileMaxPositionString, asynParamFloat64, &XPSProfileMaxPosition_);
createParam(XPSProfileGroupNameString, asynParamOctet, &XPSProfileGroupName_);
createParam(XPSTrajectoryFileString, asynParamOctet, &XPSTrajectoryFile_);
createParam(XPSStatusString, asynParamInt32, &XPSStatus_);
createParam(XPSStatusStringString, asynParamOctet, &XPSStatusString_);
createParam(XPSTclScriptString, asynParamOctet, &XPSTclScript_);
createParam(XPSTclScriptExecuteString, asynParamInt32, &XPSTclScriptExecute_);
createParam(XPSProfileGroupNameString, asynParamOctet, &XPSProfileGroupName_);
createParam(XPSTrajectoryFileString, asynParamOctet, &XPSTrajectoryFile_);
createParam(XPSStatusString, asynParamInt32, &XPSStatus_);
createParam(XPSStatusStringString, asynParamOctet, &XPSStatusString_);
createParam(XPSTclScriptString, asynParamOctet, &XPSTclScript_);
createParam(XPSTclScriptExecuteString, asynParamInt32, &XPSTclScriptExecute_);
// This socket is used for polling by the controller and all axes
pollSocket_ = TCP_ConnectToServer((char *)IPAddress, IPPort, XPS_POLL_TIMEOUT);
@@ -283,33 +283,59 @@ asynStatus XPSController::writeInt32(asynUser *pasynUser, epicsInt32 value)
this->portName);
status = asynError;
}
} else if (function == XPSPositionCompareEnable_) {
bool enable = value;
double minPosition, maxPosition, stepSize, pulseWidth, settlingTime;
getDoubleParam(XPSPositionCompareMinPosition_, &minPosition);
getDoubleParam(XPSPositionCompareMaxPosition_, &maxPosition);
getDoubleParam(XPSPositionCompareStepSize_, &stepSize);
getDoubleParam(XPSPositionComparePulseWidth_, &pulseWidth);
getDoubleParam(XPSPositionCompareSettlingTime_, &settlingTime);
status = pAxis->setPositionCompare(enable, minPosition, maxPosition, stepSize, pulseWidth, settlingTime);
status = pAxis->getPositionCompare(&enable, &minPosition, &maxPosition, &stepSize, &pulseWidth, &settlingTime);
if (status == asynSuccess) {
setIntegerParam(XPSPositionCompareEnable_, enable);
setDoubleParam(XPSPositionCompareMinPosition_, minPosition);
setDoubleParam(XPSPositionCompareMaxPosition_, maxPosition);
setDoubleParam(XPSPositionCompareStepSize_, stepSize);
setDoubleParam(XPSPositionComparePulseWidth_, pulseWidth);
setDoubleParam(XPSPositionCompareSettlingTime_, settlingTime);
}
} else if ((function == XPSPositionCompareEnable_) ||
(function == XPSPositionComparePulseWidth_) ||
(function == XPSPositionCompareStepSize_)) {
status = pAxis->setPositionCompare();
status = pAxis->getPositionCompare();
} else {
/* Call base class method */
status = asynMotorController::writeInt32(pasynUser, value);
}
/* Do callbacks so higher layers see any changes */
pAxis->callParamCallbacks();
return (asynStatus)status;
}
/** Called when asyn clients call pasynFloat64->write().
* \param[in] pasynUser asynUser structure that encodes the reason and address.
* \param[in] value Value to write. */
asynStatus XPSController::writeFloat64(asynUser *pasynUser, epicsFloat64 value)
{
int function = pasynUser->reason;
XPSAxis *pAxis;
asynStatus status = asynError;
//static const char *functionName = "writeFloat64";
pAxis = getAxis(pasynUser);
if (!pAxis) return asynError;
/* Set the parameter and readback in the parameter library. */
status = pAxis->setDoubleParam(function, value);
if ((function == XPSPositionCompareMinPosition_) ||
(function == XPSPositionCompareMaxPosition_) ||
(function == XPSPositionCompareStepSize_)) {
status = pAxis->setPositionCompare();
status = pAxis->getPositionCompare();
} else {
/* Call base class method */
status = asynMotorController::writeFloat64(pasynUser, value);
}
/* Do callbacks so higher layers see any changes */
pAxis->callParamCallbacks();
return status;
}
/**
* Perform a deferred move (a coordinated group move) on all the axes in a group.
* @param groupName Pointer to string naming the group on which to perform the group move.
+6
View File
@@ -21,6 +21,11 @@ USAGE... Newport XPS EPICS asyn motor device driver
#define MAX_MESSAGE_LEN 256
#define MAX_GROUPNAME_LEN 64
#define MAX_PULSE_WIDTHS 4
#define MAX_SETTLING_TIMES 4
static const double positionComparePulseWidths[MAX_PULSE_WIDTHS] = {0.2, 1.0, 2.5, 10.0};
static const double positionCompareSettlingTimes[MAX_SETTLING_TIMES] = {0.075, 1.0, 4.0, 12.0};
// drvInfo strings for extra parameters that the XPS controller supports
#define XPSMinJerkString "XPS_MIN_JERK"
#define XPSMaxJerkString "XPS_MAX_JERK"
@@ -50,6 +55,7 @@ class epicsShareClass XPSController : public asynMotorController {
/* These are the methods that we override from asynMotorDriver */
asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value);
void report(FILE *fp, int level);
XPSAxis* getAxis(asynUser *pasynUser);
XPSAxis* getAxis(int axisNo);