From 01da70ef67f7dda9002e156a76c1e819eccc8854 Mon Sep 17 00:00:00 2001 From: MarkRivers Date: Sat, 21 Mar 2015 22:05:02 +0000 Subject: [PATCH] Swap min and max in both set and get for position compare --- motorApp/NewportSrc/XPSAxis.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/motorApp/NewportSrc/XPSAxis.cpp b/motorApp/NewportSrc/XPSAxis.cpp index 641b26d0..e69e8677 100644 --- a/motorApp/NewportSrc/XPSAxis.cpp +++ b/motorApp/NewportSrc/XPSAxis.cpp @@ -933,6 +933,7 @@ asynStatus XPSAxis::setPositionCompare() int mode; double minPosition, maxPosition, stepSize, pulseWidth, settlingTime; int itemp; + int direction; int status; static const char *functionName = "setPositionCompare"; @@ -951,7 +952,8 @@ asynStatus XPSAxis::setPositionCompare() stepSize = fabs(motorRecStepToXPSStep(stepSize)); // Swap max and min positions if needed - if (minPosition > maxPosition) { + pC_->getIntegerParam(axisNo_, pC_->motorRecDirection_, &direction); + if (direction != 0) { double temp=maxPosition; maxPosition = minPosition; minPosition = temp; @@ -1036,10 +1038,13 @@ asynStatus XPSAxis::getPositionCompare() bool enable; int status; int i; + int direction; double minPosition=0, maxPosition=0, stepSize=0, pulseWidth, settlingTime; static const char *functionName = "getPositionCompare"; status = PositionerPositionComparePulseParametersGet(pollSocket_, positionerName_, &pulseWidth, &settlingTime); + pC_->getIntegerParam(axisNo_, pC_->motorRecDirection_, &direction); + if (status) { asynPrint(pasynUser_, ASYN_TRACE_ERROR, "%s:%s: [%s,%d]: error calling PositionerPositionComparePulseParametersGet status=%d\n", @@ -1054,6 +1059,12 @@ asynStatus XPSAxis::getPositionCompare() } status = PositionerPositionCompareAquadBWindowedGet(pollSocket_, positionerName_, &minPosition, &maxPosition, &enable); if (status == 0) { + // Swap max and min positions if needed + if (direction != 0) { + double temp=maxPosition; + maxPosition = minPosition; + minPosition = temp; + } setDoubleParam(pC_->XPSPositionCompareMinPosition_, XPSPositionToMotorRecPosition(minPosition)); setDoubleParam(pC_->XPSPositionCompareMaxPosition_, XPSPositionToMotorRecPosition(maxPosition)); }