Asibfm700Mount is now MccGenericMount (not MccGenericFsmMount)
fix mount initialization (add EEPROM reading, assign correponded mount config items) rewrite computing distance to pzones in slewing mode (add braking aceleration) add more informative errors description for serialization (network protocol)
This commit is contained in:
@@ -15,13 +15,19 @@ Asibfm700Mount::Asibfm700Mount(Asibfm700MountConfig const& config, std::shared_p
|
||||
.lon = config.siteLongitude(),
|
||||
.elev = config.siteElevation()}),
|
||||
Asibfm700PCM(config.pcmData()),
|
||||
base_gm_class_t(Asibfm700StartState{},
|
||||
std::make_tuple(config.servoControllerConfig()),
|
||||
std::make_tuple(this),
|
||||
std::make_tuple(),
|
||||
std::make_tuple(this),
|
||||
std::make_tuple(this),
|
||||
std::make_tuple(logger, Asibfm700Logger::LOGGER_DEFAULT_FORMAT)),
|
||||
gm_class_t(std::make_tuple(config.servoControllerConfig()),
|
||||
std::make_tuple(this),
|
||||
std::make_tuple(),
|
||||
std::make_tuple(this),
|
||||
std::make_tuple(this),
|
||||
std::make_tuple(logger, Asibfm700Logger::LOGGER_DEFAULT_FORMAT)),
|
||||
// base_gm_class_t(Asibfm700StartState{},
|
||||
// std::make_tuple(config.servoControllerConfig()),
|
||||
// std::make_tuple(this),
|
||||
// std::make_tuple(),
|
||||
// std::make_tuple(this),
|
||||
// std::make_tuple(this),
|
||||
// std::make_tuple(logger, Asibfm700Logger::LOGGER_DEFAULT_FORMAT)),
|
||||
_mountConfig(config),
|
||||
_mountConfigMutex(new std::mutex)
|
||||
{
|
||||
@@ -99,23 +105,6 @@ Asibfm700Mount::error_t Asibfm700Mount::initMount()
|
||||
|
||||
auto mpars = _mountConfig.movingModelParams();
|
||||
|
||||
logInfo("");
|
||||
logInfo("Setup slewing and tracking parameters ...");
|
||||
mpars.slewRateX = _mountConfig.getValue<mcc::MccAngle>("hwMaxRateHA").value_or(0.0);
|
||||
mpars.slewRateY = _mountConfig.getValue<mcc::MccAngle>("hwMaxRateDEC").value_or(0.0);
|
||||
auto st_err = setSlewingParams(mpars);
|
||||
if (st_err) {
|
||||
errorLogging(" An error occured while setting slewing parameters: ", st_err);
|
||||
} else {
|
||||
logInfo(" Max HA-axis speed: {} degs/s", mcc::MccAngle(mpars.slewRateX).degrees());
|
||||
logInfo(" Max DEC-axis speed: {} degs/s", mcc::MccAngle(mpars.slewRateY).degrees());
|
||||
}
|
||||
st_err = setTrackingParams(_mountConfig.movingModelParams());
|
||||
if (st_err) {
|
||||
errorLogging(" An error occured while setting tracking parameters: ", st_err);
|
||||
}
|
||||
logInfo("Slewing and tracking parameters have been set successfully");
|
||||
|
||||
using secs_t = std::chrono::duration<double>;
|
||||
auto to_msecs = [](double secs) {
|
||||
auto s = secs_t{secs};
|
||||
@@ -147,13 +136,76 @@ Asibfm700Mount::error_t Asibfm700Mount::initMount()
|
||||
logInfo(" YPIDV: [P: {}, I: {}, D: {}]", hw_cfg.devConfig.YPIDV.P, hw_cfg.devConfig.YPIDV.I,
|
||||
hw_cfg.devConfig.YPIDV.D);
|
||||
|
||||
// auto hw_err = hardwareInit();
|
||||
// if (hw_err) {
|
||||
// errorLogging("", hw_err);
|
||||
// }
|
||||
// actually, only set this->_hardwareConfig.devConfig part and paths!!!
|
||||
this->_hardwareConfig = hw_cfg;
|
||||
|
||||
logInfo("");
|
||||
logInfo(" EEPROM data:");
|
||||
|
||||
if (hw_cfg.devConfig.RunModel != 1) { // load EEPROM only in REAL HARDWARE mode
|
||||
// load EEPROM part
|
||||
auto cfg_err = this->hardwareUpdateConfig();
|
||||
if (cfg_err) {
|
||||
errorLogging("Cannot load EEPROM data:", cfg_err);
|
||||
return cfg_err;
|
||||
}
|
||||
|
||||
mcc::MccAngle ang{_hardwareConfig.hwConfig.Yconf.accel}; // Sidereal defines HA-axis as Y-axis
|
||||
|
||||
logInfo(" HA-axis accel: {} degs/s^2", ang.degrees());
|
||||
ang = _hardwareConfig.hwConfig.Xconf.accel; // Sidereal defines DEC-axis as X-axis
|
||||
logInfo(" DEC-axis accel: {} degs/s^2", ang.degrees());
|
||||
logInfo(" HA-axis backlash: {}", (double)_hardwareConfig.hwConfig.Yconf.backlash);
|
||||
logInfo(" DEC-axis backlash: {}", (double)_hardwareConfig.hwConfig.Xconf.backlash);
|
||||
|
||||
logInfo(" HA-axis encoder ticks per revolution: {}",
|
||||
_hardwareConfig.hwConfig.Ysetpr); // Sidereal defines HA-axis as Y-axis
|
||||
logInfo(" DEC-axis encoder ticks per revolution: {}",
|
||||
_hardwareConfig.hwConfig.Xsetpr); // Sidereal defines DEC-axis as X-axis
|
||||
logInfo(" HA-motor encoder ticks per revolution: {}",
|
||||
_hardwareConfig.hwConfig.Ymetpr); // Sidereal defines HA-axis as Y-axis
|
||||
logInfo(" DEC-motor encoder ticks per revolution: {}",
|
||||
_hardwareConfig.hwConfig.Xmetpr); // Sidereal defines DEC-axis as X-axis
|
||||
|
||||
ang = _hardwareConfig.hwConfig.Yslewrate; // Sidereal defines HA-axis as Y-axis
|
||||
logInfo(" HA-axis slew rate: {} degs/s", ang.degrees());
|
||||
ang = _hardwareConfig.hwConfig.Xslewrate; // Sidereal defines DEC-axis as X-axis
|
||||
logInfo(" DEC-axis slew rate: {} degs/s", ang.degrees());
|
||||
} else {
|
||||
logWarn(" MODEL-MODE, no EEPROM data!");
|
||||
}
|
||||
|
||||
logInfo("");
|
||||
logInfo("Setup slewing and tracking parameters ...");
|
||||
mpars.slewRateX = _mountConfig.getValue<mcc::MccAngle>("hwMaxRateHA").value_or(0.0);
|
||||
mpars.slewRateY = _mountConfig.getValue<mcc::MccAngle>("hwMaxRateDEC").value_or(0.0);
|
||||
if (hw_cfg.devConfig.RunModel != 1) {
|
||||
mpars.brakingAccelX = _hardwareConfig.hwConfig.Yconf.accel; // Sidereal defines HA-axis as Y-axis
|
||||
mpars.brakingAccelY = _hardwareConfig.hwConfig.Xconf.accel; // Sidereal defines DEC-axis as X-axis
|
||||
} else {
|
||||
mpars.brakingAccelX = MCC_Y_ACCELERATION; // Sidereal defines HA-axis as Y-axis
|
||||
mpars.brakingAccelY = MCC_X_ACCELERATION; // Sidereal defines DEC-axis as X-axis
|
||||
}
|
||||
auto st_err = setSlewingParams(mpars);
|
||||
if (st_err) {
|
||||
errorLogging(" An error occured while setting slewing parameters: ", st_err);
|
||||
} else {
|
||||
logInfo(" Max HA-axis speed: {} degs/s", mcc::MccAngle(mpars.slewRateX).degrees());
|
||||
logInfo(" Max DEC-axis speed: {} degs/s", mcc::MccAngle(mpars.slewRateY).degrees());
|
||||
logInfo(" HA-axis stop acceleration braking: {} degs/s^2", mcc::MccAngle(mpars.brakingAccelX).degrees());
|
||||
logInfo(" DEC-axis stop acceleration braking: {} degs/s^2", mcc::MccAngle(mpars.brakingAccelY).degrees());
|
||||
}
|
||||
st_err = setTrackingParams(_mountConfig.movingModelParams());
|
||||
if (st_err) {
|
||||
errorLogging(" An error occured while setting tracking parameters: ", st_err);
|
||||
}
|
||||
logInfo("Slewing and tracking parameters have been set successfully");
|
||||
|
||||
|
||||
|
||||
// call base class initMount method
|
||||
auto hw_err = base_gm_class_t::initMount();
|
||||
auto hw_err = gm_class_t::initMount();
|
||||
// auto hw_err = base_gm_class_t::initMount();
|
||||
if (hw_err) {
|
||||
errorLogging("", hw_err);
|
||||
return hw_err;
|
||||
|
||||
Reference in New Issue
Block a user