Added support for dose rate controlled Phytron motors. Not tested! Small bug fixes
74 lines
2.4 KiB
C++
74 lines
2.4 KiB
C++
/*
|
|
Driver for the MasterMACS motor controllers used at SINQ.
|
|
For documentation see the standard manuals area for SINQ or
|
|
Marcel Schildt.
|
|
|
|
The MasterMACS has a special line protocol which is implemented in
|
|
drvAsynMMACSPort.c. The driver will not work with a standard asyn IPPort,
|
|
only with the special one.
|
|
|
|
Mark Koennecke, March 2023
|
|
*/
|
|
|
|
#include "SINQController.h"
|
|
#include "SINQAxis.h"
|
|
|
|
#define COMLEN 50
|
|
|
|
class MasterMACSAxis : public SINQAxis
|
|
{
|
|
public:
|
|
/* These are the methods we override from the base class */
|
|
MasterMACSAxis(class MasterMACSController *pC, int axis);
|
|
void report(FILE *fp, int level);
|
|
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(bool *moving);
|
|
asynStatus setPosition(double position);
|
|
asynStatus setClosedLoop(bool closedLoop);
|
|
|
|
private:
|
|
MasterMACSController *pC_; /**< Pointer to the asynMotorController to which this axis belongs.
|
|
* Abbreviated because it is used very frequently */
|
|
double position;
|
|
int homing;
|
|
time_t next_poll;
|
|
int errorReported;
|
|
int hasStarted; /* The motor status is invalid if the thing has not run once */
|
|
int isOn(int axisStatus);
|
|
int readStatus();
|
|
int errorCodeFound;
|
|
friend class MasterMACSController;
|
|
};
|
|
|
|
|
|
#define EnableAxisString "ENABLE_AXIS"
|
|
#define AxisEnabledString "AXIS_ENABLED"
|
|
|
|
class MasterMACSController : public SINQController {
|
|
public:
|
|
MasterMACSController(const char *portName, const char *MasterMACSPortName, int numAxes);
|
|
|
|
void report(FILE *fp, int level);
|
|
MasterMACSAxis* getAxis(asynUser *pasynUser);
|
|
MasterMACSAxis* getAxis(int axisNo);
|
|
|
|
// overloaded because we want to enable/disable the motor
|
|
asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
|
|
|
|
// overloaded because we want to read the axis state
|
|
asynStatus readInt32(asynUser *pasynUser, epicsInt32 *value);
|
|
|
|
friend class MasterMACSAxis;
|
|
private:
|
|
asynUser *pasynUserController_;
|
|
MasterMACSAxis **pAxes_; /**< Array of pointers to axis objects */
|
|
|
|
|
|
asynStatus transactController(int axis, char command[COMLEN], char reply[COMLEN]);
|
|
int enableAxis_;
|
|
int axisEnabled_;
|
|
};
|