Compare commits

...

2 Commits
1.6.0 ... 1.7.0

Author SHA1 Message Date
4e30331c92 Added disconnect handling to sinqMotor
All checks were successful
Test And Build / Lint (push) Successful in 5s
Test And Build / Build (push) Successful in 6s
2026-01-22 09:52:24 +01:00
2578081814 Added dedicated interface function for setting the operation mode.
All checks were successful
Test And Build / Lint (push) Successful in 5s
Test And Build / Build (push) Successful in 5s
2026-01-20 16:47:36 +01:00
4 changed files with 29 additions and 1 deletions

View File

@@ -331,6 +331,8 @@ available in the IOC shell.
This function is also available in the IOC shell. This function is also available in the IOC shell.
- `setScaleMovTimeout`: Set a scaling factor for the expected movement time. - `setScaleMovTimeout`: Set a scaling factor for the expected movement time.
This function is also available in the IOC shell. This function is also available in the IOC shell.
- `setMode`: This is an empty function which should be overwritten by concrete
driver implementations.
#### msgPrintControl.h #### msgPrintControl.h
In addition to the two extension classes this library also includes a mechanism In addition to the two extension classes this library also includes a mechanism

View File

@@ -245,6 +245,10 @@ asynStatus sinqAxis::forcedPoll(bool *moving) {
// Clear the communication // Clear the communication
setAxisParamChecked(this, motorStatusCommsError, false); setAxisParamChecked(this, motorStatusCommsError, false);
// Assume the motor is initially connected. During the poll, this value will
// be set to false if the motor is not connected.
setAxisParamChecked(this, motorConnected, true);
/* /*
The poll function is just a wrapper around doPoll and handles mainly the The poll function is just a wrapper around doPoll and handles mainly the
callParamCallbacks() function. This wrapper is used to make sure callParamCallbacks() function. This wrapper is used to make sure
@@ -252,6 +256,11 @@ asynStatus sinqAxis::forcedPoll(bool *moving) {
*/ */
poll_status = doPoll(moving); poll_status = doPoll(moving);
// Motor is not connected
if (poll_status == asynDisconnected) {
setAxisParamChecked(this, motorConnected, false);
}
/* /*
If the poll did not succeed OR if an error message is waiting, something If the poll did not succeed OR if an error message is waiting, something
went wrong and the motor has a status problem. Otherwise, delete the error went wrong and the motor has a status problem. Otherwise, delete the error
@@ -732,6 +741,11 @@ void sinqAxis::setTargetPosition(double targetPosition) {
pSinqA_->targetPosition = targetPosition; pSinqA_->targetPosition = targetPosition;
} }
asynStatus sinqAxis::setMode(int mode) {
(void)mode;
return asynSuccess;
}
// ============================================================================= // =============================================================================
// IOC shell functions // IOC shell functions
extern "C" { extern "C" {

View File

@@ -434,6 +434,18 @@ class HIDDEN sinqAxis : public asynMotorAxis {
*/ */
asynStatus assertConnected(); asynStatus assertConnected();
/**
* @brief Set the operation mode (position or velocity) of the axis. It
* should be implemented by a child class of sinqAxis.
*
* This function is called from within sinqController::writeInt32 if a new
* operation mode has been set.
*
* @param mode: New operation mode. 0 is position mode, 1 is velocity mode.
* @return asynStatus
*/
virtual asynStatus setMode(int mode);
/** /**
* @brief Return a pointer to the axis controller. * @brief Return a pointer to the axis controller.
* *

View File

@@ -510,7 +510,7 @@ asynStatus sinqController::writeInt32(asynUser *pasynUser, epicsInt32 value) {
// for velocity mode): // for velocity mode):
if (value == 0 || value == 1) { if (value == 0 || value == 1) {
setAxisParamChecked(axis, motorMode, value); setAxisParamChecked(axis, motorMode, value);
return asynMotorController::writeInt32(pasynUser, value); return axis->setMode(value);
} else { } else {
int axisNo; int axisNo;
getAddress(pasynUser, &axisNo); getAddress(pasynUser, &axisNo);