From 9b3af6ab55099a96cbd6ab92912eda8938dccd65 Mon Sep 17 00:00:00 2001 From: kmpeters Date: Fri, 2 Aug 2013 22:02:31 +0000 Subject: [PATCH] Updated to PI_GCS2_2013_07_12.tgz --- motorApp/PIGCS2Src/PIE517Controller.cpp | 11 ++----- motorApp/PIGCS2Src/PIE517Controller.h | 6 +++- motorApp/PIGCS2Src/PIE755Controller.cpp | 4 +-- motorApp/PIGCS2Src/PIGCSController.cpp | 8 +++-- motorApp/PIGCS2Src/PIGCSPiezoController.cpp | 34 +++++++++++++++++++-- motorApp/PIGCS2Src/PIGCSPiezoController.h | 2 ++ motorApp/PIGCS2Src/PIHexapodController.cpp | 2 ++ motorApp/PIGCS2Src/PIasynController.cpp | 10 +++--- 8 files changed, 57 insertions(+), 20 deletions(-) diff --git a/motorApp/PIGCS2Src/PIE517Controller.cpp b/motorApp/PIGCS2Src/PIE517Controller.cpp index bf282e8d..648435c6 100644 --- a/motorApp/PIGCS2Src/PIE517Controller.cpp +++ b/motorApp/PIGCS2Src/PIE517Controller.cpp @@ -21,8 +21,8 @@ Created: 15.12.2010 #include #include -//#undef asynPrint -//#define asynPrint(user,reason,format...) 0 +#undef asynPrint +#define asynPrint(user,reason,format...) 0 asynStatus PIE517Controller::init() @@ -74,11 +74,4 @@ asynStatus PIE517Controller::getNrOutputChannels() } -asynStatus PIE517Controller::initAxis(PIasynAxis* pAxis) -{ - pAxis->m_movingStateMask = pow(2.0, pAxis->getAxisNo()); - - return setServo(pAxis, 1); -} - diff --git a/motorApp/PIGCS2Src/PIE517Controller.h b/motorApp/PIGCS2Src/PIE517Controller.h index bcb3cd99..2b07f8c4 100644 --- a/motorApp/PIGCS2Src/PIE517Controller.h +++ b/motorApp/PIGCS2Src/PIE517Controller.h @@ -40,7 +40,11 @@ public: ~PIE517Controller() {} virtual asynStatus init(void); - virtual asynStatus initAxis(PIasynAxis* pAxis); + virtual asynStatus haltAxis(PIasynAxis* pAxis) + { + // E-517 does support HLT with single axis + return PIGCSController::haltAxis(pAxis); + } private: asynStatus setOnline(int outputChannel, int onlineState); diff --git a/motorApp/PIGCS2Src/PIE755Controller.cpp b/motorApp/PIGCS2Src/PIE755Controller.cpp index 5b9b846a..19f98f01 100644 --- a/motorApp/PIGCS2Src/PIE755Controller.cpp +++ b/motorApp/PIGCS2Src/PIE755Controller.cpp @@ -19,8 +19,8 @@ Original Author: Steffen Rau #include "PIasynAxis.h" #include -//#undef asynPrint -//#define asynPrint(user,reason,format...) 0 +#undef asynPrint +#define asynPrint(user,reason,format...) 0 asynStatus PIE755Controller::getStatus(PIasynAxis* pAxis, int& homing, int& moving, int& negLimit, int& posLimit, int& servoControl) diff --git a/motorApp/PIGCS2Src/PIGCSController.cpp b/motorApp/PIGCS2Src/PIGCSController.cpp index 3704a157..e4d4c761 100644 --- a/motorApp/PIGCS2Src/PIGCSController.cpp +++ b/motorApp/PIGCS2Src/PIGCSController.cpp @@ -55,6 +55,12 @@ PIGCSController* PIGCSController::CreateGCSController(asynUser* pInterface, cons { return new PIE517Controller(pInterface, szIDN); } + else if ( strstr(szIDN, "E-753") != NULL + || strstr(szIDN, "E-709") != NULL + ) + { + return new PIGCSPiezoController(pInterface, szIDN); + } else if ( strstr(szIDN, "E-755") != NULL) { return new PIE755Controller(pInterface, szIDN); @@ -314,8 +320,6 @@ asynStatus PIGCSController::moveCts( PIasynAxis** pAxesArray, int* pTargetCtsArr asynStatus PIGCSController::moveCts( PIasynAxis* pAxis, int targetCts ) { - asynStatus status; - char cmd[100]; double target = double(targetCts) * pAxis->m_CPUdenominator / pAxis->m_CPUnumerator; asynPrint(m_pInterface, ASYN_TRACE_FLOW|ASYN_TRACE_ERROR, "PIGCSController::moveCts(, %d) \n", targetCts); diff --git a/motorApp/PIGCS2Src/PIGCSPiezoController.cpp b/motorApp/PIGCS2Src/PIGCSPiezoController.cpp index 59d071e3..23c26fc8 100644 --- a/motorApp/PIGCS2Src/PIGCSPiezoController.cpp +++ b/motorApp/PIGCS2Src/PIGCSPiezoController.cpp @@ -21,8 +21,8 @@ Created: 15.12.2010 #include #include -//#undef asynPrint -//#define asynPrint(user,reason,format...) 0 +#undef asynPrint +#define asynPrint(user,reason,format...) 0 asynStatus PIGCSPiezoController::getStatus(PIasynAxis* pAxis, int& homing, int& moving, int& negLimit, int& posLimit, int& servoControl) @@ -46,3 +46,33 @@ asynStatus PIGCSPiezoController::getReferencedState(PIasynAxis* pAxis) return asynSuccess; } +asynStatus PIGCSPiezoController::initAxis(PIasynAxis* pAxis) +{ + pAxis->m_movingStateMask = pow(2.0, pAxis->getAxisNo()); + + return setServo(pAxis, 1); +} + +/** + * Currenty no Piezo controller supports "HLT". + * use STP - which will stop all axes... + */ +asynStatus PIGCSPiezoController::haltAxis(PIasynAxis* pAxis) +{ + asynStatus status = sendOnly("STP"); + if (status != asynSuccess) + { + return status; + } + int err = getGCSError(); + // controller will set error code to PI_CNTR_STOP (10) + if (err != PI_CNTR_STOP) + { + asynPrint(m_pCurrentLogSink, ASYN_TRACE_FLOW|ASYN_TRACE_ERROR, + "PIGCSPiezoController::haltAxis() failed, GCS error %d", err); + return asynError; + } + return status; +} + + diff --git a/motorApp/PIGCS2Src/PIGCSPiezoController.h b/motorApp/PIGCS2Src/PIGCSPiezoController.h index 1ede7e24..53ad6707 100644 --- a/motorApp/PIGCS2Src/PIGCSPiezoController.h +++ b/motorApp/PIGCS2Src/PIGCSPiezoController.h @@ -37,6 +37,8 @@ public: ~PIGCSPiezoController() {} virtual asynStatus init(void) { return PIGCSController::init(); } + virtual asynStatus initAxis(PIasynAxis* pAxis); + virtual asynStatus haltAxis(PIasynAxis* pAxis); virtual asynStatus getStatus(PIasynAxis* pAxis, int& homing, int& moving, int& negLimit, int& posLimit, int& servoControl); virtual asynStatus getReferencedState(PIasynAxis* pAxis); diff --git a/motorApp/PIGCS2Src/PIHexapodController.cpp b/motorApp/PIGCS2Src/PIHexapodController.cpp index aa0deaca..edf7b749 100644 --- a/motorApp/PIGCS2Src/PIHexapodController.cpp +++ b/motorApp/PIGCS2Src/PIHexapodController.cpp @@ -43,6 +43,7 @@ asynStatus PIHexapodController::init(void) m_bCanReadStatusWithChar4 = false; getGCSError(); // clear error UNKNOWN COMMAND } +/* m_bCanReadPosWithChar3=true causes DMOV problems */ // status = sendAndReceive(char(3), buf, 199); // if (status == asynSuccess) // { @@ -229,6 +230,7 @@ asynStatus PIHexapodController::moveCts( PIasynAxis** pAxesArray, int* pTargetCt asynStatus PIHexapodController::getAxisPosition(PIasynAxis* pAxis, double& position) { + m_pCurrentLogSink = m_pInterface; if (!m_bAnyAxisMoving) { return PIGCSController::getAxisPosition(pAxis, position); diff --git a/motorApp/PIGCS2Src/PIasynController.cpp b/motorApp/PIGCS2Src/PIasynController.cpp index e1b229ff..c32f914c 100644 --- a/motorApp/PIGCS2Src/PIasynController.cpp +++ b/motorApp/PIGCS2Src/PIasynController.cpp @@ -35,6 +35,7 @@ Based on drvMotorSim.c, Mark Rivers, December 13, 2009 #include #include #include +#include #include #include @@ -261,7 +262,7 @@ asynStatus PIasynController::writeInt32(asynUser *pasynUser, epicsInt32 value) * status at the end, but that's OK */ status = pAxis->setIntegerParam(function, value); - if (function == motorClosedLoop_) + if (function == motorSetClosedLoop_) { asynPrint(pasynUser, ASYN_TRACE_FLOW, "%s:%s: %sing Closed-Loop Control flag on driver %s\n", @@ -346,7 +347,7 @@ asynStatus PIasynController::writeFloat64(asynUser *pasynUser, epicsFloat64 valu /* Call base class call its method (if we have our parameters check this here) */ status = asynMotorController::writeFloat64(pasynUser, value); } - else if (function == motorEncoderRatio_) + else if (function == motorEncRatio_) { /* Call base class call its method (if we have our parameters check this here) */ status = asynMotorController::writeFloat64(pasynUser, value); @@ -486,15 +487,16 @@ asynStatus PIasynController::configAxis(PIasynAxis *pAxis) asynStatus PIasynController::poll() { - return m_pGCSController->getGlobalState(pAxes_, numAxes_); + m_pGCSController->getGlobalState(pAxes_, numAxes_); - setDoubleParam( 0, PI_SUP_RBPIVOT_X, m_pGCSController->GetPivotX()); + setDoubleParam( 0, PI_SUP_RBPIVOT_X, m_pGCSController->GetPivotX()); setDoubleParam( 0, PI_SUP_RBPIVOT_Y, m_pGCSController->GetPivotY()); setDoubleParam( 0, PI_SUP_RBPIVOT_Z, m_pGCSController->GetPivotZ()); setIntegerParam( 0, PI_SUP_LAST_ERR, m_pGCSController->GetLastError() ); callParamCallbacks(); + return asynSuccess; }