fix stopping

This commit is contained in:
2026-06-10 17:49:32 +03:00
parent 4ed2a93cdd
commit 981a9ef074
2 changed files with 24 additions and 11 deletions

View File

@@ -551,11 +551,11 @@ Asibfm700Mount::error_t Asibfm700Mount::slewingImpl(bool slew_and_stop)
// if mount is already slewing then stop and re-slew // if mount is already slewing then stop and re-slew
if (_mountStatus->load() == mount_status_t::MOUNT_STATUS_SLEWING || if (_mountStatus->load() == mount_status_t::MOUNT_STATUS_SLEWING ||
_mountStatus->load() == mount_status_t::MOUNT_STATUS_ADJUSTING) { _mountStatus->load() == mount_status_t::MOUNT_STATUS_ADJUSTING) {
*_lastMountError = stoppingImpl(); // *_lastMountError = stoppingImpl();
if (_lastMountError->load()) { // if (_lastMountError->load()) {
return _lastMountError->load(); // return _lastMountError->load();
} // }
} }
*_stopMovementRequest = false; *_stopMovementRequest = false;
@@ -623,14 +623,17 @@ Asibfm700Mount::error_t Asibfm700Mount::slewingImpl(bool slew_and_stop)
typename hardware_t::hardware_state_t hw_state; typename hardware_t::hardware_state_t hw_state;
using ep_t = decltype(hw_state.XY.epoch()); using ep_t = decltype(hw_state.XY.epoch());
if (slew_and_stop){
hw_state.movementState = hardware_t::hardware_movement_state_t::HW_MOVE_SLEWING; hw_state.movementState = hardware_t::hardware_movement_state_t::HW_MOVE_SLEWING;
// hw_state.movementState = hardware_t::hardware_movement_state_t::HW_MOVE_ADJUSTING; } else { // set to "HW_MOVE_ADJUSTING" to call LibSidServo's 'correctTo' function
hw_state.movementState = hardware_t::hardware_movement_state_t::HW_MOVE_ADJUSTING;
}
hw_state.XY.setX(tdata.targetXY.x()); hw_state.XY.setX(tdata.targetXY.x());
hw_state.XY.setY(tdata.targetXY.y()); hw_state.XY.setY(tdata.targetXY.y());
hw_state.XY.setEpoch(ep_t::now()); hw_state.XY.setEpoch(ep_t::now());
// start slewing (LibSidServo.moveTo) ... // start slewing (LibSidServo.moveTo or LibSidServo.correctTo) ...
*_lastMountError = sendToHardware(hw_state); *_lastMountError = sendToHardware(hw_state);
@@ -981,6 +984,8 @@ Asibfm700Mount::error_t Asibfm700Mount::stoppingImpl()
typename AsibFM700ServoController::hardware_state_t hw_state; typename AsibFM700ServoController::hardware_state_t hw_state;
const auto timeout = _mountConfig.getValue<std::chrono::seconds>("stopTimeout").value();
hw_state.movementState = AsibFM700ServoController::hardware_movement_state_t::HW_MOVE_STOPPING; hw_state.movementState = AsibFM700ServoController::hardware_movement_state_t::HW_MOVE_STOPPING;
*_lastMountError = sendToHardware(hw_state); *_lastMountError = sendToHardware(hw_state);
@@ -992,15 +997,20 @@ Asibfm700Mount::error_t Asibfm700Mount::stoppingImpl()
*_lastMountError = _servolController.hardwareGetState(&hw_state); *_lastMountError = _servolController.hardwareGetState(&hw_state);
logDebug(" wait for mount stopping (timeout is {} seconds) ...", logDebug(" wait for mount stopping (timeout is {} seconds) ...", timeout.count());
_mountConfig.getValue<std::chrono::seconds>("stopTimeout").value().count()); // logDebug(" wait for mount stopping (timeout is {} seconds) ...",
// _mountConfig.getValue<std::chrono::seconds>("stopTimeout").value().count());
while (hw_state.movementState != AsibFM700ServoController::hardware_movement_state_t::HW_MOVE_STOPPED && while (hw_state.movementState != AsibFM700ServoController::hardware_movement_state_t::HW_MOVE_STOPPED &&
!_lastMountError->load()) { !_lastMountError->load()) {
if ((std::chrono::steady_clock::now() - start_tp) > if ((std::chrono::steady_clock::now() - start_tp) > timeout) {
_mountConfig.getValue<std::chrono::seconds>("stopTimeout").value()) {
*_lastMountError = mcc::impl::MccGenericMovementControlsErrorCode::ERROR_STOP_TIMEOUT; *_lastMountError = mcc::impl::MccGenericMovementControlsErrorCode::ERROR_STOP_TIMEOUT;
break; break;
} }
// if ((std::chrono::steady_clock::now() - start_tp) >
// _mountConfig.getValue<std::chrono::seconds>("stopTimeout").value()) {
// *_lastMountError = mcc::impl::MccGenericMovementControlsErrorCode::ERROR_STOP_TIMEOUT;
// break;
// }
std::this_thread::sleep_for(std::chrono::milliseconds(300)); std::this_thread::sleep_for(std::chrono::milliseconds(300));

View File

@@ -117,6 +117,8 @@ AsibFM700ServoController::error_t AsibFM700ServoController::hardwareSetState(har
if (state.movementState == hardware_movement_state_t::HW_MOVE_STOPPING) { // stop! if (state.movementState == hardware_movement_state_t::HW_MOVE_STOPPING) { // stop!
err = static_cast<AsibFM700ServoControllerErrorCode>(Mount.stop()); err = static_cast<AsibFM700ServoControllerErrorCode>(Mount.stop());
/*
if (err) { if (err) {
return err; return err;
} }
@@ -144,6 +146,7 @@ AsibFM700ServoController::error_t AsibFM700ServoController::hardwareSetState(har
std::this_thread::sleep_for(_hardwareConfig.pollingInterval); std::this_thread::sleep_for(_hardwareConfig.pollingInterval);
} }
*/
return err; return err;
} }