#pragma once /* AstroSib FORK MOUNT FM-700 CONTROL LIBRARY */ /* COMMON LIBRARY DEFINITIONS */ #include #include #include #include #include "asibfm700_servocontroller.h" namespace asibfm700 { static constexpr mcc::MccMountType asibfm700MountType = mcc::MccMountType::FORK_TYPE; typedef mcc::MccDefaultPCM Asibfm700PCM; typedef mcc::MccPZoneContainer Asibfm700PZoneContainer; typedef mcc::utils::MccSpdlogLogger Asibfm700Logger; /* MOUNT CONFIGURATION CLASS */ struct Asibfm700MountConfig { std::chrono::milliseconds hardwarePollingPeriod{100}; // main cycle period // CCTE-related configuration mcc::MccAngle siteLatitude{43.646711_degs}; // in radians mcc::MccAngle siteLongitude{41.440732_degs}; // in radians double siteElevation{2070.0}; // in meters double refractWavelength{0.55}; // in mkm std::string leapSecondFilename{""}; // an empty filename means default precompiled string std::string bulletinAFilename{""}; // an empty filename means default precompiled string // PCM-related configuration (no B-spline term, all coefficients are zero) Asibfm700PCM::pcm_data_t pcmData{.type = mcc::MccDefaultPCMType::PCM_TYPE_GEOMETRY, .siteLatitude = siteLatitude, .geomCoefficients = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}}; // servo controller configuration AsibFM700ServoController::hardware_config_t servoControllerConfig{}; // slew and track parameters mcc::MccSimpleMovingModelParams movingModelParams{}; // prohibited zones parameters mcc::MccAngle pzMinAltitude{10.0_degs}; // in radians mcc::MccAngle pzLimitSwitchHAMin{}; // in radians mcc::MccAngle pzLimitSwitchHAMax{}; // in radians }; /* MOUNT CONFIGURATION FILE DEFAULTS */ struct Asibfm700MountConfigFileDefailts { std::string hardwarePollingPeriod{"100"}; // main cycle period in millisecs std::string siteLatitude{"43.646711"}; // site latitude in degrees or sexagesimal format std::string siteLongitude{"41.440732"}; // site longitude in degrees or sexagesimal format std::string siteElevation{"2070.0"}; // site elevation in meters std::string refractWavelength{"0.55"}; // wavelength at which refraction is calculated (in mkm) std::string leapSecondFilename{""}; // an empty filename means default precompiled string std::string bulletinAFilename{""}; // an empty filename means default precompiled string // pointing correction model std::string pcmType{"GEOMETRY"}; std::vector pcmGeomCoeffs{"0.0", "0.0", "0.0", "0.0", "0.0", "0.0", "0.0", "0.0", "0.0"}; std::vector pcmBsplineDegree{"3", "3"}; // [0, 360] std::vector pcmBsplineXknots{"0.0", "0.6981317", "1.3962634", "2.0943951", "2.7925268", "3.4906585", "4.1887902", "4.88692191", "5.58505361", "6.28318531"}; // [-30, 90] std::vector pcmBsplineYknots{"-0.52359878", "-0.29088821", "-0.05817764", "0.17453293", "0.40724349", "0.63995406", "0.87266463", "1.10537519", "1.33808576", "1.57079633"}; std::vector pcmBsplineXcoeffs{}; std::vector pcmBsplineYcoeffs{}; // slewing and tracking parameters std::string sideralRate{"15.0410686"}; // arcseconds per second std::string telemetryTimeout{"3"}; // timeout for telemetry updating in seconds std::string minTimeToPZone{"10"}; // minimal time in seconds to prohibited zone // a time interval to update prohibited zones related quantities std::string updatingPZoneInterval{"5000"}; // in millisecs std::string slewToleranceRadius{"5.0"}; // coordinates difference in arcsecs to stop slewing std::string adjustCoordDiff{"50.0"}; // target-mount coordinate difference in arcsecs to start adjusting of slewing std::string adjustCycleInterval{"300"}; // minimum time in millisecs between two successive adjustments std::string slewTimeout{"3600"}; // slew process timeout // a time shift into future to compute target position in future (UT1-scale time duration) std::string timeShiftToTargetPoint{"10000"}; // in millisecs std::string trackingCycleInterval{"300"}; // minimum time in millisecs between two successive tracking corrections // prohibited zones std::string pzMinAltitude{"10.0"}; // minimal altitude in degrees std::string pzLimitSwitchHAMin{""}; // HA-axis limit switch minimal value std::string pzLimitSwitchHAMaz{""}; // HA-axis limit switch maximal value // hardware std::string hwMaxRateHA{""}; // maximal moving rate along HA-axis (Y-axis of Sidereal servo microcontroller) std::string hwMaxRateDEC{""}; // maximal moving rate along DEC-axis (X-axis of Sidereal servo microcontroller) }; } // namespace asibfm700