rewrite Asibfm700Mount::initMount
This commit is contained in:
@@ -60,8 +60,47 @@ Asibfm700Mount::error_t Asibfm700Mount::initMount()
|
|||||||
logInfo(" leap seconds filename: {}", _mountConfig.leapSecondFilename());
|
logInfo(" leap seconds filename: {}", _mountConfig.leapSecondFilename());
|
||||||
logInfo(" IERS Bulletin A filename: {}", _mountConfig.bulletinAFilename());
|
logInfo(" IERS Bulletin A filename: {}", _mountConfig.bulletinAFilename());
|
||||||
|
|
||||||
|
logInfo("{:-^80}", "Initializing ERFA-engine with values above:");
|
||||||
|
auto ccte_state = mcc::impl::MccSkyPoint::cctEngine.getStateERFA();
|
||||||
|
mcc::impl::MccSkyPoint::cctEngine.setStateERFA({.meteo = ccte_state.meteo, // just use of previous values
|
||||||
|
.wavelength = _mountConfig.refractWavelength(),
|
||||||
|
.lat = _mountConfig.siteLatitude(),
|
||||||
|
.lon = _mountConfig.siteLongitude(),
|
||||||
|
.elev = _mountConfig.siteElevation()});
|
||||||
|
|
||||||
|
if (_mountConfig.leapSecondFilename().size()) { // load leap seconds file
|
||||||
|
logInfo("Loading leap second file: '{}' ...", _mountConfig.leapSecondFilename());
|
||||||
|
bool ok = ccte_state._leapSeconds.load(_mountConfig.leapSecondFilename());
|
||||||
|
if (ok) {
|
||||||
|
logInfo("Leap second file was loaded successfully (expire date: {})", ccte_state._leapSeconds.expireDate());
|
||||||
|
} else {
|
||||||
|
logError("Leap second file loading failed! Using hardcoded defauls (expire date: {})",
|
||||||
|
ccte_state._leapSeconds.expireDate());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logInfo("Using hardcoded leap seconds defauls (expire date: {})", ccte_state._leapSeconds.expireDate());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_mountConfig.bulletinAFilename().size()) { // load IERS Bulletin A file
|
||||||
|
logInfo("Loading IERS Bulletin A file: '{}' ...", _mountConfig.bulletinAFilename());
|
||||||
|
bool ok = ccte_state._bulletinA.load(_mountConfig.bulletinAFilename());
|
||||||
|
if (ok) {
|
||||||
|
logInfo("IERS Bulletin A file was loaded successfully (date range: {} - {})",
|
||||||
|
ccte_state._bulletinA.dateRange().begin, ccte_state._bulletinA.dateRange().end);
|
||||||
|
} else {
|
||||||
|
logError("IERS Bulletin A file loading failed! Using hardcoded defauls (date range: {} - {})",
|
||||||
|
ccte_state._bulletinA.dateRange().begin, ccte_state._bulletinA.dateRange().end);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logInfo("Using hardcoded IERS Bulletin A defauls (date range: {} - {})",
|
||||||
|
ccte_state._bulletinA.dateRange().begin, ccte_state._bulletinA.dateRange().end);
|
||||||
|
}
|
||||||
|
|
||||||
|
logInfo("{:-^80}", "ERFA-engine was initialized");
|
||||||
|
|
||||||
|
|
||||||
logInfo("");
|
logInfo("");
|
||||||
logDebug("Delete previously defined prohobited zones");
|
logDebug("Delete previously defined prohibited zones");
|
||||||
clearPZones();
|
clearPZones();
|
||||||
logInfo("Add prohibited zones ...");
|
logInfo("Add prohibited zones ...");
|
||||||
|
|
||||||
@@ -88,9 +127,11 @@ Asibfm700Mount::error_t Asibfm700Mount::initMount()
|
|||||||
};
|
};
|
||||||
|
|
||||||
auto hw_cfg = _mountConfig.servoControllerConfig();
|
auto hw_cfg = _mountConfig.servoControllerConfig();
|
||||||
|
auto eeprom_cfg = hw_cfg.hwConfig;
|
||||||
|
|
||||||
logInfo("");
|
logInfo("");
|
||||||
logInfo("Hardware initialization ...");
|
logInfo("Hardware initialization ...");
|
||||||
logInfo(" set hardware configuration:");
|
logInfo(" set encoder device paths, PIDs configuration and rough encoder zero-points:");
|
||||||
logInfo(" RunModel: {}", hw_cfg.devConfig.RunModel == 1 ? "MODEL-MODE" : "REAL-MODE");
|
logInfo(" RunModel: {}", hw_cfg.devConfig.RunModel == 1 ? "MODEL-MODE" : "REAL-MODE");
|
||||||
logInfo(" mount dev path: {}", hw_cfg.MountDevPath);
|
logInfo(" mount dev path: {}", hw_cfg.MountDevPath);
|
||||||
logInfo(" encoder dev path: {}", hw_cfg.EncoderDevPath);
|
logInfo(" encoder dev path: {}", hw_cfg.EncoderDevPath);
|
||||||
@@ -117,13 +158,21 @@ Asibfm700Mount::error_t Asibfm700Mount::initMount()
|
|||||||
logInfo(" XEncZero: {}", hw_cfg.devConfig.XEncZero);
|
logInfo(" XEncZero: {}", hw_cfg.devConfig.XEncZero);
|
||||||
logInfo(" YEncZero: {}", hw_cfg.devConfig.YEncZero);
|
logInfo(" YEncZero: {}", hw_cfg.devConfig.YEncZero);
|
||||||
|
|
||||||
// actually, only set this->_hardwareConfig.devConfig part and paths!!!
|
// actually, only set _servolController._hardwareConfig.devConfig part and paths!!!
|
||||||
// this->_hardwareConfig = hw_cfg;
|
|
||||||
_servolController.hardwareUpdateConfig(hw_cfg.devConfig);
|
_servolController.hardwareUpdateConfig(hw_cfg.devConfig);
|
||||||
|
|
||||||
logInfo("");
|
auto hw_ini_err = _servolController.hardwareInit();
|
||||||
logInfo(" EEPROM data:");
|
if (hw_ini_err) {
|
||||||
|
errorLogging(" cannot initialize hardware (paths, PIDs, zeros): ", hw_ini_err);
|
||||||
|
return hw_ini_err;
|
||||||
|
}
|
||||||
|
|
||||||
|
logInfo(" paths, PIDs, zeros were initialized successfully!");
|
||||||
|
|
||||||
|
logInfo("");
|
||||||
|
logInfo(" current hardware EEPROM data:");
|
||||||
|
|
||||||
|
mcc::impl::MccAngle ang;
|
||||||
if (hw_cfg.devConfig.RunModel != 1) { // load EEPROM only in REAL HARDWARE mode
|
if (hw_cfg.devConfig.RunModel != 1) { // load EEPROM only in REAL HARDWARE mode
|
||||||
// load EEPROM part
|
// load EEPROM part
|
||||||
auto cfg_err = _servolController.hardwareUpdateConfig();
|
auto cfg_err = _servolController.hardwareUpdateConfig();
|
||||||
@@ -134,7 +183,7 @@ Asibfm700Mount::error_t Asibfm700Mount::initMount()
|
|||||||
|
|
||||||
hw_cfg = _servolController.getHardwareConfig();
|
hw_cfg = _servolController.getHardwareConfig();
|
||||||
|
|
||||||
mcc::impl::MccAngle ang{hw_cfg.hwConfig.Yconf.accel}; // Sidereal defines HA-axis as Y-axis
|
ang = hw_cfg.hwConfig.Yconf.accel; // Sidereal defines HA-axis as Y-axis
|
||||||
|
|
||||||
logInfo(" HA-axis accel: {} degs/s^2", ang.degrees());
|
logInfo(" HA-axis accel: {} degs/s^2", ang.degrees());
|
||||||
ang = hw_cfg.hwConfig.Xconf.accel; // Sidereal defines DEC-axis as X-axis
|
ang = hw_cfg.hwConfig.Xconf.accel; // Sidereal defines DEC-axis as X-axis
|
||||||
@@ -159,13 +208,52 @@ Asibfm700Mount::error_t Asibfm700Mount::initMount()
|
|||||||
logWarn(" MODEL-MODE, no EEPROM data!");
|
logWarn(" MODEL-MODE, no EEPROM data!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logInfo("");
|
||||||
|
logInfo(" new hardware EEPROM data:");
|
||||||
|
|
||||||
|
|
||||||
|
eeprom_cfg.Xslewrate = _mountConfig.getValue<mcc::impl::MccAngle>("hwMaxRateDEC").value_or(0.0);
|
||||||
|
eeprom_cfg.Yslewrate = _mountConfig.getValue<mcc::impl::MccAngle>("hwMaxRateHA").value_or(0.0);
|
||||||
|
|
||||||
|
ang = eeprom_cfg.Yconf.accel; // Sidereal defines HA-axis as Y-axis
|
||||||
|
|
||||||
|
logInfo(" HA-axis accel: {} degs/s^2", ang.degrees());
|
||||||
|
ang = eeprom_cfg.Xconf.accel; // Sidereal defines DEC-axis as X-axis
|
||||||
|
logInfo(" DEC-axis accel: {} degs/s^2", ang.degrees());
|
||||||
|
logInfo(" HA-axis backlash: {}", (double)eeprom_cfg.Yconf.backlash);
|
||||||
|
logInfo(" DEC-axis backlash: {}", (double)eeprom_cfg.Xconf.backlash);
|
||||||
|
|
||||||
|
logInfo(" HA-axis encoder ticks per revolution: {}",
|
||||||
|
eeprom_cfg.Ysetpr); // Sidereal defines HA-axis as Y-axis
|
||||||
|
logInfo(" DEC-axis encoder ticks per revolution: {}",
|
||||||
|
eeprom_cfg.Xsetpr); // Sidereal defines DEC-axis as X-axis
|
||||||
|
logInfo(" HA-motor encoder ticks per revolution: {}",
|
||||||
|
eeprom_cfg.Ymetpr); // Sidereal defines HA-axis as Y-axis
|
||||||
|
logInfo(" DEC-motor encoder ticks per revolution: {}",
|
||||||
|
eeprom_cfg.Xmetpr); // Sidereal defines DEC-axis as X-axis
|
||||||
|
|
||||||
|
ang = eeprom_cfg.Yslewrate; // Sidereal defines HA-axis as Y-axis
|
||||||
|
logInfo(" HA-axis slew rate: {} degs/s", ang.degrees());
|
||||||
|
ang = eeprom_cfg.Xslewrate; // Sidereal defines DEC-axis as X-axis
|
||||||
|
logInfo(" DEC-axis slew rate: {} degs/s", ang.degrees());
|
||||||
|
|
||||||
|
// 03.03.2026: still do not save EEPROM!!!
|
||||||
|
// hw_ini_err = _servolController.hardwareUpdateConfig(eeprom_cfg);
|
||||||
|
// if (hw_ini_err) {
|
||||||
|
// errorLogging(" cannot initialize hardware (EEPROM data)!");
|
||||||
|
|
||||||
|
// return hw_ini_err;
|
||||||
|
// }
|
||||||
|
|
||||||
|
logInfo("{:-^80}", "Hardware initialization was performed successfully!");
|
||||||
|
|
||||||
logInfo("");
|
logInfo("");
|
||||||
logInfo("Setup slewing and tracking parameters ...");
|
logInfo("Setup slewing and tracking parameters ...");
|
||||||
mpars.slewRateX = _mountConfig.getValue<mcc::impl::MccAngle>("hwMaxRateHA").value_or(0.0);
|
mpars.slewRateX = _mountConfig.getValue<mcc::impl::MccAngle>("hwMaxRateHA").value_or(0.0);
|
||||||
mpars.slewRateY = _mountConfig.getValue<mcc::impl::MccAngle>("hwMaxRateDEC").value_or(0.0);
|
mpars.slewRateY = _mountConfig.getValue<mcc::impl::MccAngle>("hwMaxRateDEC").value_or(0.0);
|
||||||
if (hw_cfg.devConfig.RunModel != 1) {
|
if (hw_cfg.devConfig.RunModel != 1) {
|
||||||
mpars.brakingAccelX = hw_cfg.hwConfig.Yconf.accel; // Sidereal defines HA-axis as Y-axis
|
mpars.brakingAccelX = eeprom_cfg.Yconf.accel; // Sidereal defines HA-axis as Y-axis
|
||||||
mpars.brakingAccelY = hw_cfg.hwConfig.Xconf.accel; // Sidereal defines DEC-axis as X-axis
|
mpars.brakingAccelY = eeprom_cfg.Xconf.accel; // Sidereal defines DEC-axis as X-axis
|
||||||
//
|
//
|
||||||
} else { // set model's default values
|
} else { // set model's default values
|
||||||
mpars.brakingAccelX = 0.165806; // Sidereal defines HA-axis as Y-axis
|
mpars.brakingAccelX = 0.165806; // Sidereal defines HA-axis as Y-axis
|
||||||
@@ -236,15 +324,10 @@ Asibfm700Mount::error_t Asibfm700Mount::initMount()
|
|||||||
logInfo("Slewing and tracking parameters have been set successfully");
|
logInfo("Slewing and tracking parameters have been set successfully");
|
||||||
|
|
||||||
|
|
||||||
// update Eddy's LibSidServo internal config
|
|
||||||
_servolController.hardwareUpdateConfig(hw_cfg.hwConfig);
|
|
||||||
|
|
||||||
coordpair_t cp;
|
coordpair_t cp;
|
||||||
Mount.getMaxSpeed(&cp);
|
Mount.getMaxSpeed(&cp);
|
||||||
logInfo("Check mount max speed: {} {}", cp.Y, cp.X);
|
logInfo("Check mount max speed: {} {}", cp.Y, cp.X);
|
||||||
|
|
||||||
_servolController.hardwareInit();
|
|
||||||
|
|
||||||
// call base class initMount method
|
// call base class initMount method
|
||||||
auto hw_err = gm_class_t::initMount();
|
auto hw_err = gm_class_t::initMount();
|
||||||
// auto hw_err = base_gm_class_t::initMount();
|
// auto hw_err = base_gm_class_t::initMount();
|
||||||
@@ -255,63 +338,12 @@ Asibfm700Mount::error_t Asibfm700Mount::initMount()
|
|||||||
logInfo("Hardware initialization was performed sucessfully!");
|
logInfo("Hardware initialization was performed sucessfully!");
|
||||||
}
|
}
|
||||||
|
|
||||||
logInfo("ERFA engine initialization ...");
|
|
||||||
|
|
||||||
|
|
||||||
auto ccte_state = mcc::impl::MccSkyPoint::cctEngine.getStateERFA();
|
|
||||||
mcc::impl::MccSkyPoint::cctEngine.setStateERFA({.meteo = ccte_state.meteo, // just use of previous values
|
|
||||||
.wavelength = _mountConfig.refractWavelength(),
|
|
||||||
.lat = _mountConfig.siteLatitude(),
|
|
||||||
.lon = _mountConfig.siteLongitude(),
|
|
||||||
.elev = _mountConfig.siteElevation()});
|
|
||||||
|
|
||||||
// set ERFA state
|
|
||||||
// Asibfm700CCTE::engine_state_t ccte_state{
|
|
||||||
// .meteo = Asibfm700CCTE::_currentState.meteo, // just use of previous values
|
|
||||||
// .wavelength = _mountConfig.refractWavelength(),
|
|
||||||
// .lat = _mountConfig.siteLatitude(),
|
|
||||||
// .lon = _mountConfig.siteLongitude(),
|
|
||||||
// .elev = _mountConfig.siteElevation()};
|
|
||||||
|
|
||||||
|
|
||||||
if (_mountConfig.leapSecondFilename().size()) { // load leap seconds file
|
|
||||||
logInfo("Loading leap second file: '{}' ...", _mountConfig.leapSecondFilename());
|
|
||||||
bool ok = ccte_state._leapSeconds.load(_mountConfig.leapSecondFilename());
|
|
||||||
if (ok) {
|
|
||||||
logInfo("Leap second file was loaded successfully (expire date: {})", ccte_state._leapSeconds.expireDate());
|
|
||||||
} else {
|
|
||||||
logError("Leap second file loading failed! Using hardcoded defauls (expire date: {})",
|
|
||||||
ccte_state._leapSeconds.expireDate());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
logInfo("Using hardcoded leap seconds defauls (expire date: {})", ccte_state._leapSeconds.expireDate());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_mountConfig.bulletinAFilename().size()) { // load IERS Bulletin A file
|
|
||||||
logInfo("Loading IERS Bulletin A file: '{}' ...", _mountConfig.bulletinAFilename());
|
|
||||||
bool ok = ccte_state._bulletinA.load(_mountConfig.bulletinAFilename());
|
|
||||||
if (ok) {
|
|
||||||
logInfo("IERS Bulletin A file was loaded successfully (date range: {} - {})",
|
|
||||||
ccte_state._bulletinA.dateRange().begin, ccte_state._bulletinA.dateRange().end);
|
|
||||||
} else {
|
|
||||||
logError("IERS Bulletin A file loading failed! Using hardcoded defauls (date range: {} - {})",
|
|
||||||
ccte_state._bulletinA.dateRange().begin, ccte_state._bulletinA.dateRange().end);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
logInfo("Using hardcoded IERS Bulletin A defauls (date range: {} - {})",
|
|
||||||
ccte_state._bulletinA.dateRange().begin, ccte_state._bulletinA.dateRange().end);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// setTelemetryDataUpdateInterval(_mountConfig.hardwarePollingPeriod());
|
|
||||||
setTelemetryDataTimeout(_mountConfig.movingModelParams().telemetryTimeout);
|
setTelemetryDataTimeout(_mountConfig.movingModelParams().telemetryTimeout);
|
||||||
|
|
||||||
// std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
|
||||||
|
|
||||||
telemetry_data_t tdata;
|
telemetry_data_t tdata;
|
||||||
auto t_err = telemetryData(&tdata);
|
auto t_err = telemetryData(&tdata);
|
||||||
if (t_err) {
|
if (t_err) {
|
||||||
logError(gm_class_t::formatError(t_err, "Cannot update telemetry data: "));
|
logError(gm_class_t::formatError(t_err, "Cannot get initial telemetry data: "));
|
||||||
|
|
||||||
return t_err;
|
return t_err;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user