From 1178c2f1192f9c14182aedb1d6b87a535a0985d6 Mon Sep 17 00:00:00 2001 From: MarkRivers Date: Wed, 30 Mar 2011 22:51:10 +0000 Subject: [PATCH] New file --- motorApp/NewportSrc/XPSMotorDriver.h | 121 +++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 motorApp/NewportSrc/XPSMotorDriver.h diff --git a/motorApp/NewportSrc/XPSMotorDriver.h b/motorApp/NewportSrc/XPSMotorDriver.h new file mode 100644 index 00000000..fc14a1c1 --- /dev/null +++ b/motorApp/NewportSrc/XPSMotorDriver.h @@ -0,0 +1,121 @@ +/* +FILENAME... XPSMotorDriver.cpp +USAGE... Newport XPS EPICS asyn motor device driver +*/ + +#include "asynMotorDriver.h" + +// drvInfo strings for extra parameters that the XPS controller supports +#define XPSMinJerkString "XPS_MIN_JERK" +#define XPSMaxJerkString "XPS_MAX_JERK" +#define XPSStatusString "XPS_STATUS" + +/** Struct that contains information about the XPS corrector loop.*/ +typedef struct +{ + bool ClosedLoopStatus; + double KP; /**< Main proportional term from PID loop.*/ + double KI; /**< Main integral term from PID loop.*/ + double KD; /**< Main differential term from PID loop.*/ + double KS; + double IntegrationTime; + double DerivativeFilterCutOffFrequency; + double GKP; + double GKI; + double GKD; + double KForm; + double FeedForwardGainVelocity; + double FeedForwardGainAcceleration; + double Friction; +} xpsCorrectorInfo_t; + +class XPSAxis : public asynMotorAxis +{ +public: + /* These are the methods we override from the base class */ + XPSAxis(class XPSController *pController, int axisNo, const char *positionerName, double stepSize); + asynStatus move(double position, int relative, double min_velocity, double max_velocity, double acceleration); + asynStatus moveVelocity(double min_velocity, double max_velocity, double acceleration); + asynStatus home(double min_velocity, double max_velocity, double acceleration, int forwards); + asynStatus stop(double acceleration); + asynStatus poll(int *moving); + asynStatus setPosition(double position); + +private: + XPSController *pC_; + char *getXPSError(int status, char *buffer); + int isInGroup(); + asynStatus setPID(const double * value, int pidoption); + asynStatus getPID(); + asynStatus setPIDValue(const double * value, int pidoption); + + /* Wrapper functions for the verbose PositionerCorrector functions. */ + asynStatus PositionerCorrectorPIPositionGetWrapper(); + asynStatus PositionerCorrectorPIDFFVelocityGetWrapper(); + asynStatus PositionerCorrectorPIDFFAccelerationGetWrapper(); + asynStatus PositionerCorrectorPIDDualFFVoltageGetWrapper(); + asynStatus PositionerCorrectorPIPositionSetWrapper(); + asynStatus PositionerCorrectorPIDFFVelocitySetWrapper(); + asynStatus PositionerCorrectorPIDFFAccelerationSetWrapper(); + asynStatus PositionerCorrectorPIDDualFFVoltageSetWrapper(); + + int pollSocket_; + int moveSocket_; + double currentPosition_; + double currentVelocity_; + double velocity_; + double accel_; + double highLimit_; + double lowLimit_; + double stepSize_; + char *positionerName_; + char *groupName_; + int positionerError_; + int axisStatus_; + xpsCorrectorInfo_t xpsCorrectorInfo_; + double deferredPosition_; + int deferredMove_; + int deferredRelative_; + +friend class XPSController; +}; + + +class XPSController : public asynMotorController { +public: + XPSController(const char *portName, const char *IPAddress, int IPPort, + int numAxes, double movingPollPeriod, double idlePollPeriod); + + /* 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); + asynStatus profileMove(asynUser *pasynUser, int npoints, double positions[], double times[], int relative, int trigger); + asynStatus triggerProfile(asynUser *pasynUser); + + /* These are the methods that are new to this class */ + /* Deferred moves functions.*/ + asynStatus processDeferredMoves(); + asynStatus processDeferredMovesInGroup(char * groupName); + +protected: + int XPSMinJerk_; +#define FIRST_XPS_PARAM XPSMinJerk_ + int XPSMaxJerk_; + int XPSStatus_; +#define LAST_XPS_PARAM XPSStatus_ + +#define NUM_XPS_PARAMS (&LAST_XPS_PARAM - &FIRST_XPS_PARAM + 1) + +private: + char *IPAddress_; + int IPPort_; + int pollSocket_; + char firmwareVersion_[100]; + int movesDeferred_; + +friend class XPSAxis; +}; +