diff --git a/SRT/CDB/alma/MINORSERVO/GFR/GFR.xml b/SRT/CDB/alma/MINORSERVO/GFR/GFR.xml index f34f6a21c21e6608d46e5421bf2782bb21615b6b..4e5b1329417bdfb5efa0185d772c00605fa82972 100644 --- a/SRT/CDB/alma/MINORSERVO/GFR/GFR.xml +++ b/SRT/CDB/alma/MINORSERVO/GFR/GFR.xml @@ -27,7 +27,7 @@ <virtual_offsets description="Sequence, sum of user and system virtual axis offsets" /> <virtual_user_offsets description="Sequence, virtual user axes offsets" /> <virtual_system_offsets description="Sequence, virtual system axes offsets" /> - <commanded_virtual_positions description="Sequence, latest commanded (via preset) virtual positions" /> + <commanded_plain_virtual_positions description="Sequence, latest commanded plain virtual positions" /> <in_use description="Boolean indicating whether the servo is in use in the current configuration" /> <current_setup description="The name of the current configuration" /> <error_code description="The type of error encountered" /> diff --git a/SRT/CDB/alma/MINORSERVO/M3R/M3R.xml b/SRT/CDB/alma/MINORSERVO/M3R/M3R.xml index 8dfa3aa1c8f945f231acdedde0dd77c726517f2b..15d5e2db41d24dff1e80442608eb82f75bf0a3ee 100644 --- a/SRT/CDB/alma/MINORSERVO/M3R/M3R.xml +++ b/SRT/CDB/alma/MINORSERVO/M3R/M3R.xml @@ -27,7 +27,7 @@ <virtual_offsets description="Sequence, sum of user and system virtual axis offsets" /> <virtual_user_offsets description="Sequence, virtual user axes offsets" /> <virtual_system_offsets description="Sequence, virtual system axes offsets" /> - <commanded_virtual_positions description="Sequence, latest commanded (via preset) virtual positions" /> + <commanded_plain_virtual_positions description="Sequence, latest commanded plain virtual positions" /> <in_use description="Boolean indicating whether the servo is in use in the current configuration" /> <current_setup description="The name of the current configuration" /> <error_code description="The type of error encountered" /> diff --git a/SRT/CDB/alma/MINORSERVO/SRP/SRP.xml b/SRT/CDB/alma/MINORSERVO/SRP/SRP.xml index d783896b4853eac3afbc8e7ddf75cf141c2931a7..53e1c5438a06ca33e4418da3913a320673dc2514 100644 --- a/SRT/CDB/alma/MINORSERVO/SRP/SRP.xml +++ b/SRT/CDB/alma/MINORSERVO/SRP/SRP.xml @@ -28,7 +28,7 @@ <virtual_offsets description="Sequence, sum of user and system virtual axis offsets" /> <virtual_user_offsets description="Sequence, virtual user axes offsets" /> <virtual_system_offsets description="Sequence, virtual system axes offsets" /> - <commanded_virtual_positions description="Sequence, latest commanded (via preset) virtual positions" /> + <commanded_plain_virtual_positions description="Sequence, latest commanded plain virtual positions" /> <in_use description="Boolean indicating whether the servo is in use in the current configuration" /> <current_setup description="The name of the current configuration" /> <error_code description="The type of error encountered" /> diff --git a/SRT/Configuration/CDB/alma/MINORSERVO/GFR/GFR.xml b/SRT/Configuration/CDB/alma/MINORSERVO/GFR/GFR.xml index f34f6a21c21e6608d46e5421bf2782bb21615b6b..4e5b1329417bdfb5efa0185d772c00605fa82972 100644 --- a/SRT/Configuration/CDB/alma/MINORSERVO/GFR/GFR.xml +++ b/SRT/Configuration/CDB/alma/MINORSERVO/GFR/GFR.xml @@ -27,7 +27,7 @@ <virtual_offsets description="Sequence, sum of user and system virtual axis offsets" /> <virtual_user_offsets description="Sequence, virtual user axes offsets" /> <virtual_system_offsets description="Sequence, virtual system axes offsets" /> - <commanded_virtual_positions description="Sequence, latest commanded (via preset) virtual positions" /> + <commanded_plain_virtual_positions description="Sequence, latest commanded plain virtual positions" /> <in_use description="Boolean indicating whether the servo is in use in the current configuration" /> <current_setup description="The name of the current configuration" /> <error_code description="The type of error encountered" /> diff --git a/SRT/Configuration/CDB/alma/MINORSERVO/M3R/M3R.xml b/SRT/Configuration/CDB/alma/MINORSERVO/M3R/M3R.xml index 8dfa3aa1c8f945f231acdedde0dd77c726517f2b..15d5e2db41d24dff1e80442608eb82f75bf0a3ee 100644 --- a/SRT/Configuration/CDB/alma/MINORSERVO/M3R/M3R.xml +++ b/SRT/Configuration/CDB/alma/MINORSERVO/M3R/M3R.xml @@ -27,7 +27,7 @@ <virtual_offsets description="Sequence, sum of user and system virtual axis offsets" /> <virtual_user_offsets description="Sequence, virtual user axes offsets" /> <virtual_system_offsets description="Sequence, virtual system axes offsets" /> - <commanded_virtual_positions description="Sequence, latest commanded (via preset) virtual positions" /> + <commanded_plain_virtual_positions description="Sequence, latest commanded plain virtual positions" /> <in_use description="Boolean indicating whether the servo is in use in the current configuration" /> <current_setup description="The name of the current configuration" /> <error_code description="The type of error encountered" /> diff --git a/SRT/Configuration/CDB/alma/MINORSERVO/SRP/SRP.xml b/SRT/Configuration/CDB/alma/MINORSERVO/SRP/SRP.xml index d783896b4853eac3afbc8e7ddf75cf141c2931a7..53e1c5438a06ca33e4418da3913a320673dc2514 100644 --- a/SRT/Configuration/CDB/alma/MINORSERVO/SRP/SRP.xml +++ b/SRT/Configuration/CDB/alma/MINORSERVO/SRP/SRP.xml @@ -28,7 +28,7 @@ <virtual_offsets description="Sequence, sum of user and system virtual axis offsets" /> <virtual_user_offsets description="Sequence, virtual user axes offsets" /> <virtual_system_offsets description="Sequence, virtual system axes offsets" /> - <commanded_virtual_positions description="Sequence, latest commanded (via preset) virtual positions" /> + <commanded_plain_virtual_positions description="Sequence, latest commanded plain virtual positions" /> <in_use description="Boolean indicating whether the servo is in use in the current configuration" /> <current_setup description="The name of the current configuration" /> <error_code description="The type of error encountered" /> diff --git a/SRT/Interfaces/SRTMinorServoInterface/idl/SRTMinorServo.idl b/SRT/Interfaces/SRTMinorServoInterface/idl/SRTMinorServo.idl index 6cd48ffbe58ef99d9bd1923e8bf2689062e8749f..1d6018ae4507e283dbea35a019cbef3e2b70523b 100644 --- a/SRT/Interfaces/SRTMinorServoInterface/idl/SRTMinorServo.idl +++ b/SRT/Interfaces/SRTMinorServoInterface/idl/SRTMinorServo.idl @@ -31,9 +31,8 @@ module MinorServo /** * This property returns the latest virtual positions commanded with a preset command. - * Offsets are not taken into account since they are added by the LDO system. */ - readonly attribute ACS::ROdoubleSeq commanded_virtual_positions; + readonly attribute ACS::ROdoubleSeq commanded_plain_virtual_positions; /** * This property indicates whether the servo is in use in the current configuration diff --git a/SRT/Outdated/CDB/alma/MINORSERVO/PFP/PFP.xml b/SRT/Outdated/CDB/alma/MINORSERVO/PFP/PFP.xml index 5503ee2fd943b7591bda5e05d2c3a118a987e09c..067ee1b189b116a0fc61adc88003c525da501c07 100644 --- a/SRT/Outdated/CDB/alma/MINORSERVO/PFP/PFP.xml +++ b/SRT/Outdated/CDB/alma/MINORSERVO/PFP/PFP.xml @@ -28,7 +28,7 @@ <virtual_offsets description="Sequence, sum of user and system virtual axis offsets" /> <virtual_user_offsets description="Sequence, virtual user axes offsets" /> <virtual_system_offsets description="Sequence, virtual system axes offsets" /> - <commanded_virtual_positions description="Sequence, latest commanded (via preset) virtual positions" /> + <commanded_plain_virtual_positions description="Sequence, latest commanded plain virtual positions" /> <in_use description="Boolean indicating whether the servo is in use in the current configuration" /> <current_setup description="The name of the current configuration" /> <error_code description="The type of error encountered" /> diff --git a/SRT/Servers/SRTMinorServo/config/CDB/schemas/SRTMinorServo.xsd b/SRT/Servers/SRTMinorServo/config/CDB/schemas/SRTMinorServo.xsd index 34ec4318201e86f03a0b4734136a6aca74b3dd51..6ac34e2178a5bcb15bb1bb5488e65c8cc34fc29b 100644 --- a/SRT/Servers/SRTMinorServo/config/CDB/schemas/SRTMinorServo.xsd +++ b/SRT/Servers/SRTMinorServo/config/CDB/schemas/SRTMinorServo.xsd @@ -51,7 +51,7 @@ <xs:sequence> <xs:element name="virtual_user_offsets" type="baci:ROdoubleSeq" /> <xs:element name="virtual_system_offsets" type="baci:ROdoubleSeq" /> - <xs:element name="commanded_virtual_positions" type="baci:ROdoubleSeq" /> + <xs:element name="commanded_plain_virtual_positions" type="baci:ROdoubleSeq" /> <xs:element name="in_use" type="mng:BooleanType" /> <xs:element name="current_setup" type="baci:ROstring" /> <xs:element name="error_code" type="ms:SRTMinorServoErrorType" /> diff --git a/SRT/Servers/SRTMinorServo/include/SRTMinorServoImpl.h b/SRT/Servers/SRTMinorServo/include/SRTMinorServoImpl.h index a664462c010fc810284a98ebaf5cbe5ea8f0a8fc..4304d05fb8a0ea8a869d2b5cf1e679b58c335eeb 100644 --- a/SRT/Servers/SRTMinorServo/include/SRTMinorServoImpl.h +++ b/SRT/Servers/SRTMinorServo/include/SRTMinorServoImpl.h @@ -283,10 +283,10 @@ public: virtual ACS::ROdoubleSeq_ptr virtual_system_offsets(); /** - * Returns a reference to the commanded_virtual_positions property implementation of the IDL interface. - * @return pointer to the read-only double sequence property commanded_virtual_positions. + * Returns a reference to the commanded_plain_virtual_positions property implementation of the IDL interface. + * @return pointer to the read-only double sequence property commanded_plain_virtual_positions. */ - virtual ACS::ROdoubleSeq_ptr commanded_virtual_positions(); + virtual ACS::ROdoubleSeq_ptr commanded_plain_virtual_positions(); /** * Returns a reference to the in_use property implementation of the IDL interface. @@ -388,12 +388,12 @@ protected: std::vector<double> m_system_offsets; /** - * Latest commanded virtual positions. It only takes into account the preset command. + * Latest commanded virtual positions. */ - std::vector<double> m_commanded_virtual_positions; + std::vector<double> m_commanded_plain_virtual_positions; /** - * Queue of positions assumed by the servo system in time. + * Queue of positions assumed by the servo system in time, they comprehend the LDO offsets. */ SRTMinorServoPositionsQueue m_positions_queue; @@ -503,9 +503,9 @@ private: baci::SmartPropertyPointer<baci::ROdoubleSeq> m_virtual_system_offsets_ptr; /** - * Pointer to the commanded_virtual_positions property. + * Pointer to the commanded_plain_virtual_positions property. */ - baci::SmartPropertyPointer<baci::ROdoubleSeq> m_commanded_virtual_positions_ptr; + baci::SmartPropertyPointer<baci::ROdoubleSeq> m_commanded_plain_virtual_positions_ptr; /** * Pointer to the in_use property. @@ -584,7 +584,7 @@ protected: virtual ACS::ROdoubleSeq_ptr virtual_offsets() { return SRTBaseMinorServoImpl::virtual_offsets(); }\ virtual ACS::ROdoubleSeq_ptr virtual_user_offsets() { return SRTBaseMinorServoImpl::virtual_user_offsets(); }\ virtual ACS::ROdoubleSeq_ptr virtual_system_offsets() { return SRTBaseMinorServoImpl::virtual_system_offsets(); }\ - virtual ACS::ROdoubleSeq_ptr commanded_virtual_positions() { return SRTBaseMinorServoImpl::commanded_virtual_positions(); }\ + virtual ACS::ROdoubleSeq_ptr commanded_plain_virtual_positions() { return SRTBaseMinorServoImpl::commanded_plain_virtual_positions(); }\ virtual Management::ROTBoolean_ptr in_use() { return SRTBaseMinorServoImpl::in_use(); }\ virtual ACS::ROstring_ptr current_setup() { return SRTBaseMinorServoImpl::current_setup(); }\ virtual ROSRTMinorServoError_ptr error_code() { return SRTBaseMinorServoImpl::error_code(); } diff --git a/SRT/Servers/SRTMinorServo/src/SRTBaseMinorServoImpl.cpp b/SRT/Servers/SRTMinorServo/src/SRTBaseMinorServoImpl.cpp index ce3eca5c2ced82f96efe2bb6eb92b2d84b9689c7..2e384ca0c805596b76b09d2872812be27b6fe09f 100644 --- a/SRT/Servers/SRTMinorServo/src/SRTBaseMinorServoImpl.cpp +++ b/SRT/Servers/SRTMinorServo/src/SRTBaseMinorServoImpl.cpp @@ -20,7 +20,7 @@ SRTBaseMinorServoImpl::SRTBaseMinorServoImpl(const ACE_CString& component_name, m_error_code(ERROR_NO_ERROR), m_user_offsets(m_virtual_axes, 0.0), m_system_offsets(m_virtual_axes, 0.0), - m_commanded_virtual_positions(m_virtual_axes, 0.0), + m_commanded_plain_virtual_positions(m_virtual_axes, 0.0), m_positions_queue(5 * 60 * int(1 / getCDBValue<double>(container_services, "status_thread_period", "/MINORSERVO/Boss")), m_virtual_axes), m_min(SRTBaseMinorServoImpl::getMotionConstant(*this, "min_range")), m_max(SRTBaseMinorServoImpl::getMotionConstant(*this, "max_range")), @@ -43,7 +43,7 @@ SRTBaseMinorServoImpl::SRTBaseMinorServoImpl(const ACE_CString& component_name, m_virtual_offsets_ptr(this), m_virtual_user_offsets_ptr(this), m_virtual_system_offsets_ptr(this), - m_commanded_virtual_positions_ptr(this), + m_commanded_plain_virtual_positions_ptr(this), m_in_use_ptr(this), m_current_setup_ptr(this), m_error_code_ptr(this), @@ -89,8 +89,8 @@ void SRTBaseMinorServoImpl::initialize() new MSGenericDevIO<ACS::doubleSeq, std::vector<double>>(m_user_offsets), true); m_virtual_system_offsets_ptr = new baci::ROdoubleSeq((m_component_name + ":virtual_system_offsets").c_str(), getComponent(), new MSGenericDevIO<ACS::doubleSeq, std::vector<double>>(m_system_offsets), true); - m_commanded_virtual_positions_ptr = new baci::ROdoubleSeq((m_component_name + ":commanded_virtual_positions").c_str(), getComponent(), - new MSGenericDevIO<ACS::doubleSeq, std::vector<double>>(m_commanded_virtual_positions), true); + m_commanded_plain_virtual_positions_ptr = new baci::ROdoubleSeq((m_component_name + ":commanded_plain_virtual_positions").c_str(), getComponent(), + new MSGenericDevIO<ACS::doubleSeq, std::vector<double>>(m_commanded_plain_virtual_positions), true); m_in_use_ptr = new ROEnumImpl<ACS_ENUM_T(Management::TBoolean), POA_Management::ROTBoolean>((m_component_name + ":in_use").c_str(), getComponent(), new MSGenericDevIO<Management::TBoolean, std::atomic<Management::TBoolean>>(m_in_use), true); m_current_setup_ptr = new baci::ROstring((m_component_name + ":current_setup").c_str(), getComponent(), @@ -142,7 +142,7 @@ bool SRTBaseMinorServoImpl::status() { m_socket.sendCommand(SRTMinorServoCommandLibrary::status(m_servo_name), m_status); - ACS::doubleSeq current_point = m_status.getVirtualPositions(); + ACS::doubleSeq current_point = m_status.getPlainVirtualPositions(); // Calculate the current speed of the axes try @@ -215,8 +215,8 @@ void SRTBaseMinorServoImpl::preset(const ACS::doubleSeq& virtual_coords) if(virtual_coordinates.length() == 0) { // It means we want to command the latest coordinates again, to apply the offset in the LDO servo system - virtual_coordinates.length(m_commanded_virtual_positions.size()); - std::copy(m_commanded_virtual_positions.begin(), m_commanded_virtual_positions.end(), virtual_coordinates.begin()); + virtual_coordinates.length(m_commanded_plain_virtual_positions.size()); + std::copy(m_commanded_plain_virtual_positions.begin(), m_commanded_plain_virtual_positions.end(), virtual_coordinates.begin()); } if(virtual_coordinates.length() != m_virtual_axes) @@ -251,7 +251,7 @@ void SRTBaseMinorServoImpl::preset(const ACS::doubleSeq& virtual_coords) throw ex.getMinorServoErrorsEx(); } - std::copy(coordinates.begin(), coordinates.end(), m_commanded_virtual_positions.begin()); + std::copy(coordinates.begin(), coordinates.end(), m_commanded_plain_virtual_positions.begin()); } bool SRTBaseMinorServoImpl::setup(const char* configuration_name, CORBA::Boolean as_off) @@ -353,7 +353,7 @@ bool SRTBaseMinorServoImpl::setup(const char* configuration_name, CORBA::Boolean // The positions tables inside the Leonardo minor servo systems are calculated with an elevation of 45 degrees. // We need to be sure the values are correct otherwise there will be a discrepancy. ACS::doubleSeq commanded_coordinates = *calcCoordinates(45); - std::copy(commanded_coordinates.begin(), commanded_coordinates.end(), m_commanded_virtual_positions.begin()); + std::copy(commanded_coordinates.begin(), commanded_coordinates.end(), m_commanded_plain_virtual_positions.begin()); return true; } else @@ -641,10 +641,24 @@ ACS::TimeInterval SRTBaseMinorServoImpl::getTravelTime(const ACS::doubleSeq& _s_ ACS::doubleSeq s_p(_s_p); - // No starting coordinates, it means we have to start from the current position taking into account the current speed + if(d_p.length() != m_virtual_axes) + { + _EXCPT(MinorServoErrors::StatusErrorExImpl, ex, (m_servo_name + "getTravelTime()").c_str()); + ex.setReason("Wrong number of axes for destination_position."); + ex.log(LM_DEBUG); + throw ex.getMinorServoErrorsEx(); + } + + // No starting coordinates, it means we have to start from the current position taking into account the current speed. if(_s_p.length() == 0) { s_p = *getAxesPositions(0); + + // Subtract the offsets since the destination coordinates are pure virtual + for(size_t i = 0; i < m_virtual_axes; i++) + { + s_p[i] -= m_user_offsets[i] + m_system_offsets[i]; + } } else if(_s_p.length() != m_virtual_axes) { @@ -653,13 +667,6 @@ ACS::TimeInterval SRTBaseMinorServoImpl::getTravelTime(const ACS::doubleSeq& _s_ ex.log(LM_DEBUG); throw ex.getMinorServoErrorsEx(); } - if(d_p.length() != m_virtual_axes) - { - _EXCPT(MinorServoErrors::StatusErrorExImpl, ex, (m_servo_name + "getTravelTime()").c_str()); - ex.setReason("Wrong number of axes for destination_position."); - ex.log(LM_DEBUG); - throw ex.getMinorServoErrorsEx(); - } // d = delta/distance std::vector<double> d(m_virtual_axes); @@ -891,7 +898,7 @@ GET_PROPERTY_REFERENCE(ACS::ROdoubleSeq, SRTBaseMinorServoImpl, m_virtual_positi GET_PROPERTY_REFERENCE(ACS::ROdoubleSeq, SRTBaseMinorServoImpl, m_virtual_offsets_ptr, virtual_offsets); GET_PROPERTY_REFERENCE(ACS::ROdoubleSeq, SRTBaseMinorServoImpl, m_virtual_user_offsets_ptr, virtual_user_offsets); GET_PROPERTY_REFERENCE(ACS::ROdoubleSeq, SRTBaseMinorServoImpl, m_virtual_system_offsets_ptr, virtual_system_offsets); -GET_PROPERTY_REFERENCE(ACS::ROdoubleSeq, SRTBaseMinorServoImpl, m_commanded_virtual_positions_ptr, commanded_virtual_positions); +GET_PROPERTY_REFERENCE(ACS::ROdoubleSeq, SRTBaseMinorServoImpl, m_commanded_plain_virtual_positions_ptr, commanded_plain_virtual_positions); GET_PROPERTY_REFERENCE(Management::ROTBoolean, SRTBaseMinorServoImpl, m_in_use_ptr, in_use); GET_PROPERTY_REFERENCE(ACS::ROstring, SRTBaseMinorServoImpl, m_current_setup_ptr, current_setup); GET_PROPERTY_REFERENCE(ROSRTMinorServoError, SRTBaseMinorServoImpl, m_error_code_ptr, error_code); diff --git a/SRT/Servers/SRTMinorServo/src/SRTProgramTrackMinorServoImpl.cpp b/SRT/Servers/SRTMinorServo/src/SRTProgramTrackMinorServoImpl.cpp index 925881a89c035f9acab68fbd919400d9492af788..ec4bfdadaeb515808db919f77e3ea1a77ae8c470 100644 --- a/SRT/Servers/SRTMinorServo/src/SRTProgramTrackMinorServoImpl.cpp +++ b/SRT/Servers/SRTMinorServo/src/SRTProgramTrackMinorServoImpl.cpp @@ -55,7 +55,7 @@ bool SRTProgramTrackMinorServoImpl::status() { bool status = SRTBaseMinorServoImpl::status(); - ACS::doubleSeq virtual_positions = m_status.getVirtualPositions(); + ACS::doubleSeq virtual_positions = m_status.getPlainVirtualPositions(); std::vector<double> commanded_positions; SRTMinorServoOperativeMode operative_mode = m_status.getOperativeMode(); @@ -69,6 +69,7 @@ bool SRTProgramTrackMinorServoImpl::status() // The tracking timestamp is interpolated instead std::pair<ACS::Time, std::vector<double>> tracking_point = m_tracking_queue.get(last_timestamp); commanded_positions = tracking_point.second; + m_commanded_plain_virtual_positions = commanded_positions; m_remaining_trajectory_points.store(m_tracking_queue.getRemainingPoints(last_timestamp)); @@ -92,7 +93,11 @@ bool SRTProgramTrackMinorServoImpl::status() } else if(operative_mode == OPERATIVE_MODE_SETUP || operative_mode == OPERATIVE_MODE_PRESET) { - commanded_positions = m_commanded_virtual_positions; + commanded_positions = m_commanded_plain_virtual_positions; + for(size_t i = 0; i < m_virtual_axes; i++) + { + commanded_positions[i] += m_user_offsets[i] + m_system_offsets[i]; + } } else { @@ -149,11 +154,12 @@ void SRTProgramTrackMinorServoImpl::programTrack(CORBA::Long trajectory_id, CORB std::vector<double> coordinates(virtual_coordinates.get_buffer(), virtual_coordinates.get_buffer() + virtual_coordinates.length()); ACS::doubleSeq offsets = m_status.getVirtualOffsets(); + std::vector<double> coordinates_and_offsets = coordinates; for(size_t i = 0; i < m_virtual_axes; i++) { - double coordinate = coordinates[i] + offsets[i]; - if(coordinate < m_min[i] || coordinate > m_max[i]) + coordinates_and_offsets[i] += offsets[i]; + if(coordinates_and_offsets[i] < m_min[i] || coordinates_and_offsets[i] > m_max[i]) { _EXCPT(MinorServoErrors::TrackingErrorExImpl, ex, (m_servo_name + "::programTrack()").c_str()); ex.addData("Reason", "Resulting position out of range, check the offsets!"); @@ -178,7 +184,7 @@ void SRTProgramTrackMinorServoImpl::programTrack(CORBA::Long trajectory_id, CORB // Clear the tracking queue to avoid interpolation between 2 different trajectories m_tracking_queue.clear(); } - m_tracking_queue.put(point_time, coordinates); + m_tracking_queue.put(point_time, coordinates_and_offsets); }