Commit 3da2d13b authored by Andrea Orlati's avatar Andrea Orlati
Browse files

#588

parent 8efeb38f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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"
+1 −0
Original line number Diff line number Diff line
@@ -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;
+6 −0
Original line number Diff line number Diff line
@@ -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");
+45 −29
Original line number Diff line number Diff line
@@ -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;
@@ -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;
}

@@ -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()",
@@ -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));
        }
    }
    /**
+5 −2
Original line number Diff line number Diff line
@@ -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, 
@@ -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){
@@ -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);
@@ -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,