phytron: home_zero and initialize some variables
This commit is contained in:
@@ -56,7 +56,7 @@ January 2019
|
||||
* \param[in] numAxes The number of axes that this controller supports
|
||||
*/
|
||||
PhytronController::PhytronController(const char *portName, const char *PhytronPortName, const char *sel ,
|
||||
int encX, int encY)
|
||||
int encX, int encY, int homeZeroX, int homeZeroY)
|
||||
: SINQController(portName, PhytronPortName,2)
|
||||
{
|
||||
asynStatus status;
|
||||
@@ -82,8 +82,8 @@ PhytronController::PhytronController(const char *portName, const char *PhytronPo
|
||||
new PhytronDoseAxis(this, 1, encX);
|
||||
new PhytronDoseAxis(this, 2, encY);
|
||||
} else {
|
||||
new PhytronAxis(this, 1, encX);
|
||||
new PhytronAxis(this, 2, encY);
|
||||
new PhytronAxis(this, 1, encX, homeZeroX);
|
||||
new PhytronAxis(this, 2, encY, homeZeroY);
|
||||
}
|
||||
|
||||
|
||||
@@ -92,7 +92,7 @@ PhytronController::PhytronController(const char *portName, const char *PhytronPo
|
||||
|
||||
PhytronDoseController::PhytronDoseController(const char *portName, const char *PhytronPortName, const char *sel ,
|
||||
int encX, int encY)
|
||||
: PhytronController(portName, PhytronPortName, sel, encX, encY)
|
||||
: PhytronController(portName, PhytronPortName, sel, encX, encY, 0, 0)
|
||||
{
|
||||
new PhytronDoseAxis(this, 1, encX);
|
||||
new PhytronDoseAxis(this, 2, encY);
|
||||
@@ -106,9 +106,9 @@ PhytronDoseController::PhytronDoseController(const char *portName, const char *P
|
||||
* \param[in] numAxes The number of axes that this controller supports
|
||||
*/
|
||||
extern "C" int PhytronCreateController(const char *portName, const char *PhytronPortName, const char *selector,
|
||||
int encX, int encY)
|
||||
int encX, int encY, int homeZeroX, int homeZeroY)
|
||||
{
|
||||
new PhytronController(portName, PhytronPortName,selector, encX, encY);
|
||||
new PhytronController(portName, PhytronPortName,selector, encX, encY, homeZeroX, homeZeroY);
|
||||
return(asynSuccess);
|
||||
}
|
||||
|
||||
@@ -178,10 +178,10 @@ PhytronDoseAxis* PhytronDoseController::getAxis(int axisNo)
|
||||
|
||||
asynStatus PhytronController::transactController(int axisNo,char command[COMLEN], char reply[COMLEN])
|
||||
{
|
||||
asynStatus status;
|
||||
size_t in, out;
|
||||
int reason;
|
||||
char myReply[COMLEN+10], myCommand[COMLEN+10], *pPtr;
|
||||
asynStatus status = asynSuccess;
|
||||
size_t in = 0, out = 0;
|
||||
int reason = 0;
|
||||
char myReply[COMLEN+10] = {0}, myCommand[COMLEN+10] = {0}, *pPtr = {0};
|
||||
SINQAxis *axis = getAxis(axisNo);
|
||||
|
||||
|
||||
@@ -237,7 +237,7 @@ asynStatus PhytronController::transactController(int axisNo,char command[COMLEN]
|
||||
*
|
||||
* Initializes register numbers, etc.
|
||||
*/
|
||||
PhytronAxis::PhytronAxis(PhytronController *pC, int axisNo, int enc)
|
||||
PhytronAxis::PhytronAxis(PhytronController *pC, int axisNo, int enc, int homeZero)
|
||||
: SINQAxis(pC, axisNo),
|
||||
pC_(pC)
|
||||
{
|
||||
@@ -251,7 +251,8 @@ PhytronAxis::PhytronAxis(PhytronController *pC, int axisNo, int enc)
|
||||
brakeIO = -1;
|
||||
next_poll = -1;
|
||||
homing = 0;
|
||||
homing_direction = 0;
|
||||
homing_direction = 0;
|
||||
home_zero = homeZero;
|
||||
}
|
||||
|
||||
int PhytronAxis::setBrake(int brakeNO)
|
||||
@@ -467,8 +468,6 @@ asynStatus PhytronAxis::poll(bool *moving)
|
||||
{
|
||||
asynStatus comStatus = asynSuccess;
|
||||
char command[COMLEN], reply[COMLEN];
|
||||
double lowlim;
|
||||
|
||||
|
||||
// protect against excessive polling
|
||||
if(time(NULL) < next_poll){
|
||||
@@ -538,12 +537,15 @@ asynStatus PhytronAxis::poll(bool *moving)
|
||||
|
||||
if(!*moving) {
|
||||
if(homing){
|
||||
if(homing_direction) {
|
||||
pC_->getDoubleParam(axisNo_,pC_->motorHighLimit_,&lowlim);
|
||||
} else {
|
||||
pC_->getDoubleParam(axisNo_,pC_->motorLowLimit_,&lowlim);
|
||||
}
|
||||
setPosition(lowlim);
|
||||
double home_pos = 0.0;
|
||||
if(!home_zero) {
|
||||
if(homing_direction) {
|
||||
pC_->getDoubleParam(axisNo_,pC_->motorHighLimit_,&home_pos);
|
||||
} else {
|
||||
pC_->getDoubleParam(axisNo_,pC_->motorLowLimit_,&home_pos);
|
||||
}
|
||||
}
|
||||
setPosition(home_pos);
|
||||
setIntegerParam(pC_->motorStatusAtHome_, true);
|
||||
} else {
|
||||
/*
|
||||
@@ -616,7 +618,7 @@ asynStatus PhytronAxis::poll(bool *moving)
|
||||
*/
|
||||
|
||||
PhytronDoseAxis::PhytronDoseAxis(PhytronController *pC, int axisNo, int enc)
|
||||
: PhytronAxis(pC, axisNo, enc)
|
||||
: PhytronAxis(pC, axisNo, enc, 0)
|
||||
{
|
||||
if(axisNo == 1){
|
||||
doseChar = '3';
|
||||
@@ -720,15 +722,20 @@ static const iocshArg PhytronCreateControllerArg1 = {"Phytron port name", iocshA
|
||||
static const iocshArg PhytronCreateControllerArg2 = {"Phytron Selector", iocshArgString};
|
||||
static const iocshArg PhytronCreateControllerArg3 = {"EncoderX", iocshArgInt};
|
||||
static const iocshArg PhytronCreateControllerArg4 = {"EncoderY", iocshArgInt};
|
||||
static const iocshArg PhytronCreateControllerArg5 = {"HomeZeroX", iocshArgInt};
|
||||
static const iocshArg PhytronCreateControllerArg6 = {"HomeZeroY", iocshArgInt};
|
||||
static const iocshArg * const PhytronCreateControllerArgs[] = {&PhytronCreateControllerArg0,
|
||||
&PhytronCreateControllerArg1,
|
||||
&PhytronCreateControllerArg2,
|
||||
&PhytronCreateControllerArg3,
|
||||
&PhytronCreateControllerArg4};
|
||||
static const iocshFuncDef PhytronCreateControllerDef = {"PhytronCreateController", 5, PhytronCreateControllerArgs};
|
||||
&PhytronCreateControllerArg2,
|
||||
&PhytronCreateControllerArg3,
|
||||
&PhytronCreateControllerArg4,
|
||||
&PhytronCreateControllerArg5,
|
||||
&PhytronCreateControllerArg6};
|
||||
static const iocshFuncDef PhytronCreateControllerDef = {"PhytronCreateController", 7, PhytronCreateControllerArgs};
|
||||
static void PhytronCreateContollerCallFunc(const iocshArgBuf *args)
|
||||
{
|
||||
PhytronCreateController(args[0].sval, args[1].sval, args[2].sval, args[3].ival,args[4].ival);
|
||||
PhytronCreateController(args[0].sval, args[1].sval, args[2].sval, args[3].ival, args[4].ival,
|
||||
args[5].ival, args[6].ival);
|
||||
}
|
||||
|
||||
static const iocshArg PhytronDoseCreateControllerArg0 = {"Port name", iocshArgString};
|
||||
|
||||
@@ -30,7 +30,7 @@ class PhytronAxis : public SINQAxis
|
||||
{
|
||||
public:
|
||||
/* These are the methods we override from the base class */
|
||||
PhytronAxis(class PhytronController *pC, int axis, int enc);
|
||||
PhytronAxis(class PhytronController *pC, int axis, int enc, int homeZero);
|
||||
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);
|
||||
@@ -52,6 +52,8 @@ protected:
|
||||
int encoder;
|
||||
int haveBrake;
|
||||
int brakeIO;
|
||||
int home_zero;
|
||||
|
||||
|
||||
friend class PhytronController;
|
||||
};
|
||||
@@ -74,7 +76,7 @@ PhytronDoseController *pC_;
|
||||
class PhytronController : public SINQController {
|
||||
public:
|
||||
PhytronController(const char *portName, const char *PhytronPortName, const char *selector,
|
||||
int encX, int encY);
|
||||
int encX, int encY, int homeZeroX, int homeZeroY);
|
||||
|
||||
void report(FILE *fp, int level);
|
||||
PhytronAxis* getAxis(asynUser *pasynUser);
|
||||
|
||||
Reference in New Issue
Block a user