Compare commits

...

5 Commits

4 changed files with 20 additions and 65 deletions

View File

@ -54,11 +54,11 @@ setMaxSubsequentTimeouts("$(DRIVER_PORT)", 20);
setThresholdComTimeout("$(DRIVER_PORT)", 300, 10); setThresholdComTimeout("$(DRIVER_PORT)", 300, 10);
# Parametrize the EPICS record database with the substitution file named after the MCU. # Parametrize the EPICS record database with the substitution file named after the MCU.
epicsEnvSet("SINQDBPATH","$(sinqMotor_DB)/sinqMotor.db") epicsEnvSet("SINQDBPATH","$(turboPmac_DB)/sinqMotor.db")
dbLoadTemplate("$(TOP)/$(DRIVER_PORT).substitutions", "INSTR=$(INSTR)$(DRIVER_PORT):,CONTROLLER=$(DRIVER_PORT)") dbLoadTemplate("$(TOP)/$(DRIVER_PORT).substitutions", "INSTR=$(INSTR)$(DRIVER_PORT):,CONTROLLER=$(DRIVER_PORT)")
epicsEnvSet("SINQDBPATH","$(turboPmac_DB)/turboPmac.db") epicsEnvSet("SINQDBPATH","$(turboPmac_DB)/turboPmac.db")
dbLoadTemplate("$(TOP)/$(DRIVER_PORT).substitutions", "INSTR=$(INSTR)$(DRIVER_PORT):,CONTROLLER=$(DRIVER_PORT)") dbLoadTemplate("$(TOP)/$(DRIVER_PORT).substitutions", "INSTR=$(INSTR)$(DRIVER_PORT):,CONTROLLER=$(DRIVER_PORT)")
dbLoadRecords("$(sinqMotor_DB)/asynRecord.db","P=$(INSTR)$(DRIVER_PORT),PORT=$(IP_PORT)") dbLoadRecords("$(turboPmac_DB)/asynRecord.db","P=$(INSTR)$(DRIVER_PORT),PORT=$(IP_PORT)")
``` ```
### Additional records ### Additional records

View File

@ -397,13 +397,6 @@ asynStatus turboPmacAxis::doPoll(bool *moving) {
case -5: case -5:
// Axis is deactivated // Axis is deactivated
*moving = false; *moving = false;
pl_status = setStringParam(pC_->motorMessageText(), "Deactivated");
if (pl_status != asynSuccess) {
return pC_->paramLibAccessFailed(pl_status, "motorMessageText_",
axisNo_, __PRETTY_FUNCTION__,
__LINE__);
}
break; break;
case -4: case -4:
// Emergency stop // Emergency stop
@ -426,19 +419,10 @@ asynStatus turboPmacAxis::doPoll(bool *moving) {
axisNo_, __PRETTY_FUNCTION__, axisNo_, __PRETTY_FUNCTION__,
__LINE__); __LINE__);
} }
break; break;
case -3: case -3:
// Disabled // Disabled
*moving = false; *moving = false;
pl_status = setStringParam(pC_->motorMessageText(), "Disabled");
if (pl_status != asynSuccess) {
return pC_->paramLibAccessFailed(pl_status, "motorMessageText_",
axisNo_, __PRETTY_FUNCTION__,
__LINE__);
}
break; break;
case 0: case 0:
// Idle // Idle
@ -599,8 +583,7 @@ asynStatus turboPmacAxis::handleError(int error, char *userMessage,
resetError = false; resetError = false;
status = setStringParam(pC_->motorMessageText(), status = setStringParam(pC_->motorMessageText(),
"Target position would exceed software " "Target position would exceed software limits");
"limits. Please call the support.");
if (status != asynSuccess) { if (status != asynSuccess) {
return pC_->paramLibAccessFailed(status, "motorMessageText_", return pC_->paramLibAccessFailed(status, "motorMessageText_",
axisNo_, __PRETTY_FUNCTION__, axisNo_, __PRETTY_FUNCTION__,
@ -783,10 +766,10 @@ asynStatus turboPmacAxis::handleError(int error, char *userMessage,
} }
resetError = false; resetError = false;
snprintf(userMessage, sizeUserMessage, snprintf(
"Driver hardware error (P%2.2d01 = 13). " userMessage, sizeUserMessage,
"Please call the support.", "Driver hardware error (P%2.2d01 = 13). Please call the support.",
axisNo_); axisNo_);
status = setStringParam(pC_->motorMessageText(), userMessage); status = setStringParam(pC_->motorMessageText(), userMessage);
if (status != asynSuccess) { if (status != asynSuccess) {
return pC_->paramLibAccessFailed(status, "motorMessageText_", return pC_->paramLibAccessFailed(status, "motorMessageText_",
@ -1084,22 +1067,7 @@ asynStatus turboPmacAxis::doHome(double min_velocity, double max_velocity,
axisNo_, __PRETTY_FUNCTION__, axisNo_, __PRETTY_FUNCTION__,
__LINE__); __LINE__);
} }
pl_status = setStringParam(pC_->motorMessageText(), "Homing");
if (pl_status != asynSuccess) {
return pC_->paramLibAccessFailed(pl_status, "motorMessageText_",
axisNo_, __PRETTY_FUNCTION__,
__LINE__);
}
return callParamCallbacks(); return callParamCallbacks();
} else {
pl_status = setStringParam(pC_->motorMessageText(),
"Can't home a motor with absolute encoder");
if (pl_status != asynSuccess) {
return pC_->paramLibAccessFailed(pl_status, "motorMessageText_",
axisNo_, __PRETTY_FUNCTION__,
__LINE__);
}
} }
return asynSuccess; return asynSuccess;
@ -1271,14 +1239,17 @@ asynStatus turboPmacAxis::enable(bool on) {
// Status of parameter library operations // Status of parameter library operations
asynStatus pl_status = asynSuccess; asynStatus pl_status = asynSuccess;
bool moving = false;
rw_status = doPoll(&moving);
if (rw_status != asynSuccess) {
return rw_status;
}
// ========================================================================= // =========================================================================
/*
Continue regardless of the status returned by the poll; we just want to
find out whether the motor is currently moving or not. If the poll
function fails before it can determine that, it is assumed that the motor
is not moving.
*/
bool moving = false;
doPoll(&moving);
// If the axis is currently moving, it cannot be disabled. Ignore the // If the axis is currently moving, it cannot be disabled. Ignore the
// command and inform the user. We check the last known status of the axis // command and inform the user. We check the last known status of the axis
// instead of "moving", since status -6 is also moving, but the motor can // instead of "moving", since status -6 is also moving, but the motor can
@ -1327,16 +1298,7 @@ asynStatus turboPmacAxis::enable(bool on) {
"Controller \"%s\", axis %d => %s, line %d\n%s axis\n", "Controller \"%s\", axis %d => %s, line %d\n%s axis\n",
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__, pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__,
on ? "Enable" : "Disable"); on ? "Enable" : "Disable");
if (on == 0) {
pl_status = setStringParam(pC_->motorMessageText(), "Disabling ...");
} else {
pl_status = setStringParam(pC_->motorMessageText(), "Enabling ...");
}
if (pl_status != asynSuccess) {
return pC_->paramLibAccessFailed(pl_status, "motorMessageText_",
axisNo_, __PRETTY_FUNCTION__,
__LINE__);
}
rw_status = pC_->writeRead(axisNo_, command, response, 0); rw_status = pC_->writeRead(axisNo_, command, response, 0);
if (rw_status != asynSuccess) { if (rw_status != asynSuccess) {
return rw_status; return rw_status;
@ -1379,7 +1341,7 @@ asynStatus turboPmacAxis::enable(bool on) {
// Output message to user // Output message to user
snprintf(command, sizeof(command), "Failed to %s within %d seconds", snprintf(command, sizeof(command), "Failed to %s within %d seconds",
on ? "enable" : "disable", timeout_enable_disable); on ? "enable" : "disable", timeout_enable_disable);
pl_status = setStringParam(pC_->motorMessageText(), "Enabling ..."); pl_status = setStringParam(pC_->motorMessageText(), command);
if (pl_status != asynSuccess) { if (pl_status != asynSuccess) {
return pC_->paramLibAccessFailed(pl_status, "motorMessageText_", return pC_->paramLibAccessFailed(pl_status, "motorMessageText_",
axisNo_, __PRETTY_FUNCTION__, axisNo_, __PRETTY_FUNCTION__,

View File

@ -120,17 +120,10 @@ class turboPmacController : public sinqController {
int readConfig() { return readConfig_; } int readConfig() { return readConfig_; }
int flushHardware() { return flushHardware_; } int flushHardware() { return flushHardware_; }
// Set the maximum buffer size. This is an empirical value which must be
// large enough to avoid overflows for all commands to the device /
// responses from it.
static const uint32_t MAXBUF_ = 200;
asynUser *pasynInt32SyncIOipPort() { return pasynInt32SyncIOipPort_; } asynUser *pasynInt32SyncIOipPort() { return pasynInt32SyncIOipPort_; }
protected: protected:
/* // Timeout for the communication process in seconds
Timeout for the communication process in seconds
*/
double comTimeout_; double comTimeout_;
char lastResponse[MAXBUF_]; char lastResponse[MAXBUF_];