Loading Medicina/Configuration/CDB/alma/MANAGEMENT/CalibrationTool/CalibrationTool.xml +1 −1 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ RepetitionExpireTime="10000000" TrackingFlagDutyCycle="100000" AntennaBossInterface="IDL:alma/Antenna/AntennaBoss:1.0" MinorServoBossInterface="" MinorServoBossInterface="IDL:alma/MinorServo/MinorServoBoss:1.0" SchedulerInterface="IDL:alma/Management/Scheduler:1.0" ObservatoryInterface="IDL:alma/Antenna/Observatory:1.0" GenerateFile="1" Loading Medicina/Servers/MedicinaMinorServo/include/MedMinorServoScan.hpp +1 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ class MedMinorServoScan private: MedMinorServoPosition m_central_position, m_start_position, m_stop_position; ACS::Time m_starting_time, m_total_time; ACS::TimeInterval m_interval_to_start_pos; double m_range, m_min_time, m_max_time, m_min_start_time; string m_axis_code; bool m_initialized, m_was_tracking, m_asap; Loading Medicina/Servers/MedicinaMinorServo/src/MedMinorServoGeometry.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -348,12 +348,18 @@ MedMinorServoGeometry::positionToAxes(const MedMinorServoPosition& position) command.pos_y_zp = _get_inverse_zp(position); break; case(MED_MINOR_SERVO_SECONDARY): cout << position.x << " " << position.z << " " << position.y << " " << position.theta_x << " " << position.theta_y << endl; command.mode = 1; command.pos_x_yp = _get_inverse_x(position); cout << command.pos_x_yp << endl; command.pos_y_zp = _get_inverse_y(position); cout << command.pos_y_zp << endl; command.pos_z1 = _get_inverse_z1(position); cout << command.pos_z1 << endl; command.pos_z2 = _get_inverse_z2(position); cout << command.pos_z2 << endl; command.pos_z3 = _get_inverse_z3(position); cout << command.pos_z3 << endl; break; default: throw MinorServoGeometryError("Invalid mode converting position to command"); Loading Medicina/Servers/MedicinaMinorServo/src/MedMinorServoScan.cpp +45 −29 Original line number Diff line number Diff line Loading @@ -34,15 +34,7 @@ MedMinorServoScan::init(const MedMinorServoPosition central_position, m_start_position = central_position; m_stop_position = central_position; m_was_tracking = was_tracking; if(starting_time == 0){ TIMEVALUE now; IRA::CIRATools::getTime(now); m_starting_time = now.value().value + START_SCAN_TOLERANCE; m_asap = true; }else{ m_starting_time = starting_time; m_asap = false; } m_range = range; m_total_time = total_time; m_axis_code = axis_code; Loading Loading @@ -82,6 +74,36 @@ MedMinorServoScan::init(const MedMinorServoPosition central_position, m_stop_position.theta_y += range/2; } } /** * Try to compute min and max times for the scan, errors if positions are * not valid or not within permissible ranges but we just checked for this */ m_min_time = MedMinorServoGeometry::min_time(m_start_position, m_stop_position); m_max_time = MedMinorServoGeometry::max_time(m_start_position, m_stop_position); /** * check that we can reach start position in time */ m_min_start_time = MedMinorServoGeometry::min_time(m_central_position, m_start_position); CUSTOM_LOG(LM_FULL_INFO, "MedMinorServoControl::MedMinorServoScan::check()",(LM_DEBUG, "min start time: %f", m_min_start_time)); IRA::CString out; m_interval_to_start_pos = MedMinorServoTime::deltaToACSTimeInterval(m_min_start_time); IRA::CIRATools::intervalToStr( m_interval_to_start_pos,out); cout << "interval : " << (const char *) out << endl; if(starting_time == 0){ TIMEVALUE now; IRA::CIRATools::getTime(now); m_starting_time = now.value().value + START_SCAN_TOLERANCE + m_interval_to_start_pos; IRA::CString out; IRA::CIRATools::timeToStr(m_starting_time,out); cout << "start time :" << (const char *)out << endl; m_asap = true; }else{ m_starting_time = starting_time; m_asap = false; } m_initialized = true; } Loading Loading @@ -114,29 +136,23 @@ throw (MinorServoErrors::ScanErrorEx) (LM_NOTICE, "Central position out of limits")); return false; } /** * Try to compute min and max times for the scan, errors if positions are * not valid or not within permissible ranges but we just checked for this */ m_min_time = MedMinorServoGeometry::min_time(m_start_position, m_stop_position); m_max_time = MedMinorServoGeometry::max_time(m_start_position, m_stop_position); /** * check that we can reach start position in time */ m_min_start_time = MedMinorServoGeometry::min_time(m_central_position, m_start_position); CUSTOM_LOG(LM_FULL_INFO, "MedMinorServoControl::MedMinorServoScan::check()", (LM_DEBUG, "min start time: %f", m_min_start_time)); /////// IRA::CString out; IRA::CIRATools::timeToStr(m_starting_time,out); cout << "time :" << (const char *)out << endl; if(!m_asap) { TIMEVALUE now; IRA::CIRATools::getTime(now); ACS::TimeInterval interval = MedMinorServoTime::deltaToACSTimeInterval(m_min_start_time); if(m_starting_time <= (now.value().value + interval + START_SCAN_TOLERANCE)) // ACS::TimeInterval interval = // MedMinorServoTime::deltaToACSTimeInterval(m_min_start_time); IRA::CIRATools::timeToStr(now.value().value + m_interval_to_start_pos,out); cout << "soglia :" << (const char *)out << endl; if(m_starting_time <= (now.value().value + m_interval_to_start_pos )) //if(m_starting_time <= (now.value().value + m_min_start_time * 10000000)) { CUSTOM_LOG(LM_FULL_INFO, "MedMinorServoControl::MedMinorServoScan::check()", Loading @@ -144,7 +160,7 @@ throw (MinorServoErrors::ScanErrorEx) return false; }else{ CUSTOM_LOG(LM_FULL_INFO, "MedMinorServoControl::MedMinorServoScan::check()", (LM_DEBUG, "Can reach start position in time: %llu", interval)); (LM_DEBUG, "Can reach start position in time: %llu", m_interval_to_start_pos)); } } /** Loading Medicina/Servers/MedicinaMinorServo/src/MinorServoBossImpl.cpp +5 −2 Original line number Diff line number Diff line Loading @@ -625,10 +625,11 @@ MinorServoBossImpl::checkScanImpl( ) throw (MinorServoErrors::MinorServoErrorsEx, ComponentErrors::ComponentErrorsEx) { cout << "checkScanImpl" << endl; minor_servo_parameters = new TRunTimeParameters; double center = 0; MedMinorServoPosition central_position = m_actual_config->get_position(antenna_parameters.elevation); m_actual_config->get_position(antenna_parameters.elevation,&m_offset); MedMinorServoScan scan(central_position, starting_time, Loading @@ -638,6 +639,7 @@ MinorServoBossImpl::checkScanImpl( isElevationTracking()); minor_servo_parameters->startEpoch = scan.getStartingTime(); try{ cout << "axis code: " << string(scan_parameters.axis_code) << endl; center = central_position.get_axis_position( scan_parameters.axis_code); }catch(const MinorServoAxisNameError& msane){ Loading Loading @@ -710,6 +712,7 @@ MinorServoBossImpl::startScanImpl( const Antenna::TRunTimeParameters& antenna_parameters ) throw (MinorServoErrors::MinorServoErrorsEx) { cout << "startScanImpl" << endl; if(!(m_control)) THROW_MINORSERVO_EX(CommunicationErrorEx, "Minor Servo Server is not connected", false); Loading @@ -721,7 +724,7 @@ MinorServoBossImpl::startScanImpl( bool was_elevation_tracking = isElevationTracking(); turnTrackingOff(); MedMinorServoPosition central_position = m_actual_config->get_position(antenna_parameters.elevation); m_actual_config->get_position(antenna_parameters.elevation,&m_offset); MedMinorServoScan scan(central_position, starting_time, scan_parameters.range, Loading Loading
Medicina/Configuration/CDB/alma/MANAGEMENT/CalibrationTool/CalibrationTool.xml +1 −1 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ RepetitionExpireTime="10000000" TrackingFlagDutyCycle="100000" AntennaBossInterface="IDL:alma/Antenna/AntennaBoss:1.0" MinorServoBossInterface="" MinorServoBossInterface="IDL:alma/MinorServo/MinorServoBoss:1.0" SchedulerInterface="IDL:alma/Management/Scheduler:1.0" ObservatoryInterface="IDL:alma/Antenna/Observatory:1.0" GenerateFile="1" Loading
Medicina/Servers/MedicinaMinorServo/include/MedMinorServoScan.hpp +1 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ class MedMinorServoScan private: MedMinorServoPosition m_central_position, m_start_position, m_stop_position; ACS::Time m_starting_time, m_total_time; ACS::TimeInterval m_interval_to_start_pos; double m_range, m_min_time, m_max_time, m_min_start_time; string m_axis_code; bool m_initialized, m_was_tracking, m_asap; Loading
Medicina/Servers/MedicinaMinorServo/src/MedMinorServoGeometry.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -348,12 +348,18 @@ MedMinorServoGeometry::positionToAxes(const MedMinorServoPosition& position) command.pos_y_zp = _get_inverse_zp(position); break; case(MED_MINOR_SERVO_SECONDARY): cout << position.x << " " << position.z << " " << position.y << " " << position.theta_x << " " << position.theta_y << endl; command.mode = 1; command.pos_x_yp = _get_inverse_x(position); cout << command.pos_x_yp << endl; command.pos_y_zp = _get_inverse_y(position); cout << command.pos_y_zp << endl; command.pos_z1 = _get_inverse_z1(position); cout << command.pos_z1 << endl; command.pos_z2 = _get_inverse_z2(position); cout << command.pos_z2 << endl; command.pos_z3 = _get_inverse_z3(position); cout << command.pos_z3 << endl; break; default: throw MinorServoGeometryError("Invalid mode converting position to command"); Loading
Medicina/Servers/MedicinaMinorServo/src/MedMinorServoScan.cpp +45 −29 Original line number Diff line number Diff line Loading @@ -34,15 +34,7 @@ MedMinorServoScan::init(const MedMinorServoPosition central_position, m_start_position = central_position; m_stop_position = central_position; m_was_tracking = was_tracking; if(starting_time == 0){ TIMEVALUE now; IRA::CIRATools::getTime(now); m_starting_time = now.value().value + START_SCAN_TOLERANCE; m_asap = true; }else{ m_starting_time = starting_time; m_asap = false; } m_range = range; m_total_time = total_time; m_axis_code = axis_code; Loading Loading @@ -82,6 +74,36 @@ MedMinorServoScan::init(const MedMinorServoPosition central_position, m_stop_position.theta_y += range/2; } } /** * Try to compute min and max times for the scan, errors if positions are * not valid or not within permissible ranges but we just checked for this */ m_min_time = MedMinorServoGeometry::min_time(m_start_position, m_stop_position); m_max_time = MedMinorServoGeometry::max_time(m_start_position, m_stop_position); /** * check that we can reach start position in time */ m_min_start_time = MedMinorServoGeometry::min_time(m_central_position, m_start_position); CUSTOM_LOG(LM_FULL_INFO, "MedMinorServoControl::MedMinorServoScan::check()",(LM_DEBUG, "min start time: %f", m_min_start_time)); IRA::CString out; m_interval_to_start_pos = MedMinorServoTime::deltaToACSTimeInterval(m_min_start_time); IRA::CIRATools::intervalToStr( m_interval_to_start_pos,out); cout << "interval : " << (const char *) out << endl; if(starting_time == 0){ TIMEVALUE now; IRA::CIRATools::getTime(now); m_starting_time = now.value().value + START_SCAN_TOLERANCE + m_interval_to_start_pos; IRA::CString out; IRA::CIRATools::timeToStr(m_starting_time,out); cout << "start time :" << (const char *)out << endl; m_asap = true; }else{ m_starting_time = starting_time; m_asap = false; } m_initialized = true; } Loading Loading @@ -114,29 +136,23 @@ throw (MinorServoErrors::ScanErrorEx) (LM_NOTICE, "Central position out of limits")); return false; } /** * Try to compute min and max times for the scan, errors if positions are * not valid or not within permissible ranges but we just checked for this */ m_min_time = MedMinorServoGeometry::min_time(m_start_position, m_stop_position); m_max_time = MedMinorServoGeometry::max_time(m_start_position, m_stop_position); /** * check that we can reach start position in time */ m_min_start_time = MedMinorServoGeometry::min_time(m_central_position, m_start_position); CUSTOM_LOG(LM_FULL_INFO, "MedMinorServoControl::MedMinorServoScan::check()", (LM_DEBUG, "min start time: %f", m_min_start_time)); /////// IRA::CString out; IRA::CIRATools::timeToStr(m_starting_time,out); cout << "time :" << (const char *)out << endl; if(!m_asap) { TIMEVALUE now; IRA::CIRATools::getTime(now); ACS::TimeInterval interval = MedMinorServoTime::deltaToACSTimeInterval(m_min_start_time); if(m_starting_time <= (now.value().value + interval + START_SCAN_TOLERANCE)) // ACS::TimeInterval interval = // MedMinorServoTime::deltaToACSTimeInterval(m_min_start_time); IRA::CIRATools::timeToStr(now.value().value + m_interval_to_start_pos,out); cout << "soglia :" << (const char *)out << endl; if(m_starting_time <= (now.value().value + m_interval_to_start_pos )) //if(m_starting_time <= (now.value().value + m_min_start_time * 10000000)) { CUSTOM_LOG(LM_FULL_INFO, "MedMinorServoControl::MedMinorServoScan::check()", Loading @@ -144,7 +160,7 @@ throw (MinorServoErrors::ScanErrorEx) return false; }else{ CUSTOM_LOG(LM_FULL_INFO, "MedMinorServoControl::MedMinorServoScan::check()", (LM_DEBUG, "Can reach start position in time: %llu", interval)); (LM_DEBUG, "Can reach start position in time: %llu", m_interval_to_start_pos)); } } /** Loading
Medicina/Servers/MedicinaMinorServo/src/MinorServoBossImpl.cpp +5 −2 Original line number Diff line number Diff line Loading @@ -625,10 +625,11 @@ MinorServoBossImpl::checkScanImpl( ) throw (MinorServoErrors::MinorServoErrorsEx, ComponentErrors::ComponentErrorsEx) { cout << "checkScanImpl" << endl; minor_servo_parameters = new TRunTimeParameters; double center = 0; MedMinorServoPosition central_position = m_actual_config->get_position(antenna_parameters.elevation); m_actual_config->get_position(antenna_parameters.elevation,&m_offset); MedMinorServoScan scan(central_position, starting_time, Loading @@ -638,6 +639,7 @@ MinorServoBossImpl::checkScanImpl( isElevationTracking()); minor_servo_parameters->startEpoch = scan.getStartingTime(); try{ cout << "axis code: " << string(scan_parameters.axis_code) << endl; center = central_position.get_axis_position( scan_parameters.axis_code); }catch(const MinorServoAxisNameError& msane){ Loading Loading @@ -710,6 +712,7 @@ MinorServoBossImpl::startScanImpl( const Antenna::TRunTimeParameters& antenna_parameters ) throw (MinorServoErrors::MinorServoErrorsEx) { cout << "startScanImpl" << endl; if(!(m_control)) THROW_MINORSERVO_EX(CommunicationErrorEx, "Minor Servo Server is not connected", false); Loading @@ -721,7 +724,7 @@ MinorServoBossImpl::startScanImpl( bool was_elevation_tracking = isElevationTracking(); turnTrackingOff(); MedMinorServoPosition central_position = m_actual_config->get_position(antenna_parameters.elevation); m_actual_config->get_position(antenna_parameters.elevation,&m_offset); MedMinorServoScan scan(central_position, starting_time, scan_parameters.range, Loading