diff --git a/Medicina/Misc/MedScripts/src/med-vnc b/Medicina/Misc/MedScripts/src/med-vnc index 8f1bf2ca809f3ce413735e7d673cdc27c874254d..98adfec8e2a80d6be5f483837e5215d4abccffe4 100644 --- a/Medicina/Misc/MedScripts/src/med-vnc +++ b/Medicina/Misc/MedScripts/src/med-vnc @@ -91,7 +91,7 @@ else fi if ! hash vncviewer &>/dev/null; then - echo -e "'vncviewer' is not installed, this script is setting up the connection but won't automatically start vnc.\nA custom client should be manually started." + echo -e "'vncviewer' is not available, this script is setting up the connection but won't automatically start vnc.\nA custom vnc client will have to be manually started after the connection." vnc_avail="FALSE" fi diff --git a/Medicina/Servers/MedicinaMinorServo/config/CDB/schemas/MinorServoParameters.xsd b/Medicina/Servers/MedicinaMinorServo/config/CDB/schemas/MinorServoParameters.xsd index 3fca3614147293dc08643c54493519c96cc01eac..e60ee5791ecb6ee38a3f0640baad5e0884578659 100644 --- a/Medicina/Servers/MedicinaMinorServo/config/CDB/schemas/MinorServoParameters.xsd +++ b/Medicina/Servers/MedicinaMinorServo/config/CDB/schemas/MinorServoParameters.xsd @@ -25,13 +25,26 @@ <xs:element name="ZPaxis" type="xs:string" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType> - + + <xs:complexType name="TTableLimitsHeader"> + <xs:sequence> + <xs:element name="MINOR_SERVO_X" type="xs:string" minOccurs="0" maxOccurs="1"/> + <xs:element name="MINOR_SERVO_YP" type="xs:string" minOccurs="0" maxOccurs="1" /> + <xs:element name="MINOR_SERVO_Y" type="xs:string" minOccurs="0" maxOccurs="1" /> + <xs:element name="MINOR_SERVO_ZP" type="xs:string" minOccurs="0" maxOccurs="1" /> + <xs:element name="MINOR_SERVO_Z1" type="xs:string" minOccurs="0" maxOccurs="1" /> + <xs:element name="MINOR_SERVO_Z2" type="xs:string" minOccurs="0" maxOccurs="1" /> + <xs:element name="MINOR_SERVO_Z3" type="xs:string" minOccurs="0" maxOccurs="1" /> + </xs:sequence> + </xs:complexType> + <xs:complexType name="TTableMinorServo"> <xs:sequence> - <xs:element name="MinorServo" type="TTableHeader" minOccurs="1" maxOccurs="unbounded" /> + <xs:element name="MinorServoLimits" type="TTableLimitsHeader" minOccurs="1" maxOccurs="1"/> + <xs:element name="MinorServo" type="TTableHeader" minOccurs="1" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> - + <xs:element name="MinorServoParameters" type="TTableMinorServo"/> </xs:schema> diff --git a/Medicina/Servers/MedicinaMinorServo/include/MedMinorServoConstants.hpp b/Medicina/Servers/MedicinaMinorServo/include/MedMinorServoConstants.hpp index be5350e5fd9e25030c492e8ef89b92ae3fc3e51e..36cba26983682b3c840e5b7d462831452ee36dbf 100755 --- a/Medicina/Servers/MedicinaMinorServo/include/MedMinorServoConstants.hpp +++ b/Medicina/Servers/MedicinaMinorServo/include/MedMinorServoConstants.hpp @@ -13,12 +13,24 @@ struct MedMinorServoAxis_tag double speed_max; } MedMinorServoAxis; -const MedMinorServoAxis MINOR_SERVO_X = { "X", -80, 80, 0.0, 0.05, 0.01, 14.0 }; -const MedMinorServoAxis MINOR_SERVO_YP = { "YP", -5, 395, 0.0, 0.05, 0.01, 8.0 }; -const MedMinorServoAxis MINOR_SERVO_Y = { "Y", -80, 80, 0.0, 0.05, 0.01, 14.0 }; -const MedMinorServoAxis MINOR_SERVO_ZP = { "ZP", -5, 345, 0.0, 0.05, 0.01, 8.0 }; -const MedMinorServoAxis MINOR_SERVO_Z1 = { "Z1", -125, 125, 0.0, 0.05, 0.01, 14.0 }; -const MedMinorServoAxis MINOR_SERVO_Z2 = { "Z2", -125, 125, 0.0, 0.05, 0.01, 14.0 }; -const MedMinorServoAxis MINOR_SERVO_Z3 = { "Z3", -125, 125, 0.0, 0.05, 0.01, 14.0 }; +using namespace std; + +class MedMinorServoConstants { +public: + static MedMinorServoConstants *getInstance(); + MedMinorServoAxis MINOR_SERVO_X ; + MedMinorServoAxis MINOR_SERVO_YP ; + MedMinorServoAxis MINOR_SERVO_Y ; + MedMinorServoAxis MINOR_SERVO_ZP ; + MedMinorServoAxis MINOR_SERVO_Z1 ; + MedMinorServoAxis MINOR_SERVO_Z2 ; + MedMinorServoAxis MINOR_SERVO_Z3 ; + +private: + MedMinorServoConstants(); + static MedMinorServoConstants *instance; + +}; + #endif \ No newline at end of file diff --git a/Medicina/Servers/MedicinaMinorServo/include/MedMinorServoGeometry.hpp b/Medicina/Servers/MedicinaMinorServo/include/MedMinorServoGeometry.hpp index 6c43fdba41e27c84cf43bd2585d423ea69fad800..b10f2acfcd644f2a3a103771b9da5ba0d7767ac4 100755 --- a/Medicina/Servers/MedicinaMinorServo/include/MedMinorServoGeometry.hpp +++ b/Medicina/Servers/MedicinaMinorServo/include/MedMinorServoGeometry.hpp @@ -97,6 +97,9 @@ class MedMinorServoPosition double theta_y; MedMinorServoMode mode; ACS::Time time; + + private: + MedMinorServoConstants *medMinorServoConstants; }; /** diff --git a/Medicina/Servers/MedicinaMinorServo/include/MedMinorServoParameters.hpp b/Medicina/Servers/MedicinaMinorServo/include/MedMinorServoParameters.hpp index d1a6f240c563650c58efdec0a60897117b06a764..37600526bcd0d30932ed8829968b527d3baeb57d 100644 --- a/Medicina/Servers/MedicinaMinorServo/include/MedMinorServoParameters.hpp +++ b/Medicina/Servers/MedicinaMinorServo/include/MedMinorServoParameters.hpp @@ -14,6 +14,7 @@ #include "MedMinorServoGeometry.hpp" #include "MedMinorServoOffset.hpp" +#include "MedMinorServoConstants.hpp" class VirtualAxis { @@ -24,6 +25,8 @@ class VirtualAxis double min, double max); ~VirtualAxis(); + double get_min(){ return _min;}; + double get_max(){ return _max;}; std::string get_name(){ return _name;}; std::string get_unit(){ return _unit;}; std::vector<double> get_coefficients(){ return _coefficients;}; @@ -42,6 +45,8 @@ class VirtualAxis */ VirtualAxis parseAxisLine(const char* name, const char* line); +std::vector<double> parseLimitsLine(const char* line); + std::vector<std::string> split(const char* line, char delim = ','); class MedMinorServoParameters @@ -69,6 +74,7 @@ class MedMinorServoParameters std::string get_name(){ return _name;}; bool can_track_elevation(){ return _can_track_elevation;}; bool is_primary_focus(){ return _primary_focus;}; + std::vector<VirtualAxis> getAxesVector(){return _axes;}; std::vector<std::string> getAxes(){return _axes_names;}; std::vector<std::string> getUnits(){return _axes_units;}; int getAxisMapping(std::string axis_name); @@ -78,6 +84,7 @@ class MedMinorServoParameters std::vector<VirtualAxis> _axes; std::vector<std::string> _axes_names; std::vector<std::string> _axes_units; + }; typedef std::map<std::string, MedMinorServoParameters> MedMinorServoConfiguration; diff --git a/Medicina/Servers/MedicinaMinorServo/include/testutils.hpp b/Medicina/Servers/MedicinaMinorServo/include/testutils.hpp index d2758df0c47c0187b1f98f11d5c1fca6da7bd6f2..606a549dd232ef124d59e17a43f7c3ad2b80d9e5 100644 --- a/Medicina/Servers/MedicinaMinorServo/include/testutils.hpp +++ b/Medicina/Servers/MedicinaMinorServo/include/testutils.hpp @@ -8,6 +8,7 @@ #include "MedMinorServoProtocol.hpp" #include "MedMinorServoTime.hpp" #include "MedMinorServoGeometry.hpp" +#include "MedMinorServoConstants.hpp" MedMinorServoPosition get_random_position(); MedMinorServoPosition random_offset_position(MedMinorServoPosition); diff --git a/Medicina/Servers/MedicinaMinorServo/src/Makefile b/Medicina/Servers/MedicinaMinorServo/src/Makefile index b765ed0d41d2c9bb589c750278475fef4da5800e..2dba14fd6a5ed412764eb74f649a503874203bb7 100644 --- a/Medicina/Servers/MedicinaMinorServo/src/Makefile +++ b/Medicina/Servers/MedicinaMinorServo/src/Makefile @@ -16,7 +16,7 @@ LIBRARIES_L = # # <brief description of lllll library> -MedMinorServoControl_OBJECTS = MedMinorServoControl MedMinorServoGeometry \ +MedMinorServoControl_OBJECTS = MedMinorServoConstants MedMinorServoControl MedMinorServoGeometry \ MedMinorServoTime MedMinorServoModbus \ PositionQueue @@ -24,13 +24,13 @@ MedMinorServoControl_LIBS = baci acsnc IRALibrary ModbusChannel ManagmentDefin ManagementErrors \ ComponentErrors boost_thread-mt boost_system -MinorServoBossImpl_OBJECTS = MedMinorServoControl MedMinorServoGeometry \ +MinorServoBossImpl_OBJECTS = MedMinorServoConstants MedMinorServoControl MedMinorServoGeometry \ MedMinorServoStatus MedMinorServoParameters \ MedMinorServoTime MedMinorServoModbus \ MedMinorServoScan PositionQueue \ PositionMonitoringThread MSBossPublisher \ SetupThread ScanThread \ - MSBossTracker MedMinorServoOffset MinorServoBossImpl + MSBossTracker MedMinorServoOffset MinorServoBossImpl MinorServoBossImpl_LIBS = MedMinorServoBossStubs MinorServoBossStubs \ ManagmentDefinitionsStubs MinorServoDefinitionsStubs \ @@ -42,7 +42,7 @@ MinorServoBossImpl_LIBS = MedMinorServoBossStubs MinorServoBossStubs \ baci DiscosVersion EXECUTABLES_L = real_to_virtual# testclient testgeometry testprimary testsecondary testpassive real_to_virtual -real_to_virtual_OBJECTS = real_to_virtual testutils MedMinorServoGeometry MedMinorServoTime +real_to_virtual_OBJECTS = real_to_virtual testutils MedMinorServoConstants MedMinorServoGeometry MedMinorServoTime real_to_virtual_LIBS = IRALibrary #testclient_OBJECTS = testclient testutils MedMinorServoModbus MedMinorServoGeometry MedMinorServoTime MedMinorServoControl PositionQueue #testclient_LIBS = IRALibrary boost_thread ModbusChannel @@ -56,7 +56,7 @@ real_to_virtual_LIBS = IRALibrary #testgeometry_LIBS = IRALibrary boost_unit_test_framework boost_thread EXECUTABLES = scudisconnect -scudisconnect_OBJECTS = scudisconnect MedMinorServoModbus MedMinorServoGeometry MedMinorServoTime MedMinorServoControl PositionQueue +scudisconnect_OBJECTS = scudisconnect MedMinorServoModbus MedMinorServoConstants MedMinorServoGeometry MedMinorServoTime MedMinorServoControl PositionQueue scudisconnect_LIBS = IRALibrary ModbusChannel boost_thread-mt boost_system # diff --git a/Medicina/Servers/MedicinaMinorServo/src/MedMinorServoConstants.cpp b/Medicina/Servers/MedicinaMinorServo/src/MedMinorServoConstants.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a227bca025c81eda992ba47f98ed60976eaa5bf0 --- /dev/null +++ b/Medicina/Servers/MedicinaMinorServo/src/MedMinorServoConstants.cpp @@ -0,0 +1,14 @@ +#include "MedMinorServoConstants.hpp" + +MedMinorServoConstants* MedMinorServoConstants::instance = 0; + +MedMinorServoConstants* MedMinorServoConstants::getInstance() { + if (instance == 0) { + instance = new MedMinorServoConstants(); + } + return instance; +} + + +MedMinorServoConstants::MedMinorServoConstants(){ +} \ No newline at end of file diff --git a/Medicina/Servers/MedicinaMinorServo/src/MedMinorServoGeometry.cpp b/Medicina/Servers/MedicinaMinorServo/src/MedMinorServoGeometry.cpp index 3928ac373ceabdb3a76083b1196a1998bcdf40d0..eae921ec086ecb0bc24f84b00fb96a9abfeee03e 100755 --- a/Medicina/Servers/MedicinaMinorServo/src/MedMinorServoGeometry.cpp +++ b/Medicina/Servers/MedicinaMinorServo/src/MedMinorServoGeometry.cpp @@ -1,14 +1,13 @@ -#include "MedMinorServoConstants.hpp" #include "MedMinorServoGeometry.hpp" -MedMinorServoPosition::MedMinorServoPosition() : - x(0), - y(0), - z(0), - theta_x(0), - theta_y(0), - time(0) -{} +MedMinorServoPosition::MedMinorServoPosition() : x(0), + y(0), + z(0), + theta_x(0), + theta_y(0), + time(0) +{ +} MedMinorServoPosition::MedMinorServoPosition(double x, double y, @@ -16,20 +15,22 @@ MedMinorServoPosition::MedMinorServoPosition(double x, double theta_x, double theta_y, MedMinorServoMode mode, - ACS::Time time): - x(x), - y(y), - z(z), - theta_x(theta_x), - theta_y(theta_y), - mode(mode), - time(time) -{} + ACS::Time time) : x(x), + y(y), + z(z), + theta_x(theta_x), + theta_y(theta_y), + mode(mode), + time(time) +{ + medMinorServoConstants = MedMinorServoConstants::getInstance(); +} MedMinorServoPosition::~MedMinorServoPosition() -{} +{ +} -MedMinorServoPosition::MedMinorServoPosition(const MedMinorServoPosition& position) +MedMinorServoPosition::MedMinorServoPosition(const MedMinorServoPosition &position) { this->x = position.x; this->y = position.y; @@ -40,8 +41,8 @@ MedMinorServoPosition::MedMinorServoPosition(const MedMinorServoPosition& positi this->time = position.time; } -MedMinorServoPosition& -MedMinorServoPosition::operator=(const MedMinorServoPosition& position) +MedMinorServoPosition & +MedMinorServoPosition::operator=(const MedMinorServoPosition &position) { this->x = position.x; this->y = position.y; @@ -53,8 +54,7 @@ MedMinorServoPosition::operator=(const MedMinorServoPosition& position) return *this; } -bool -MedMinorServoPosition::operator==(const MedMinorServoPosition& position) +bool MedMinorServoPosition::operator==(const MedMinorServoPosition &position) { return ((this->x == position.x) && (this->y == position.y) && @@ -65,13 +65,13 @@ MedMinorServoPosition::operator==(const MedMinorServoPosition& position) (this->time == position.time)); } -MedMinorServoPosition& -MedMinorServoPosition::operator+=(const MedMinorServoPosition& position) +MedMinorServoPosition & +MedMinorServoPosition::operator+=(const MedMinorServoPosition &position) { - if((this->mode != position.mode) && - (this->mode != MED_MINOR_SERVO_OFFSET) && - (position.mode != MED_MINOR_SERVO_OFFSET)) - throw MinorServoGeometryError("addition of incompatible minor servo positions"); + if ((this->mode != position.mode) && + (this->mode != MED_MINOR_SERVO_OFFSET) && + (position.mode != MED_MINOR_SERVO_OFFSET)) + throw MinorServoGeometryError("addition of incompatible minor servo positions"); this->x += position.x; this->y += position.y; this->z += position.z; @@ -80,13 +80,13 @@ MedMinorServoPosition::operator+=(const MedMinorServoPosition& position) return *this; } -MedMinorServoPosition& -MedMinorServoPosition::operator-=(const MedMinorServoPosition& position) +MedMinorServoPosition & +MedMinorServoPosition::operator-=(const MedMinorServoPosition &position) { - if((this->mode != position.mode) && - (this->mode != MED_MINOR_SERVO_OFFSET) && - (position.mode != MED_MINOR_SERVO_OFFSET)) - throw MinorServoGeometryError("subtraction of incompatible minor servo positions"); + if ((this->mode != position.mode) && + (this->mode != MED_MINOR_SERVO_OFFSET) && + (position.mode != MED_MINOR_SERVO_OFFSET)) + throw MinorServoGeometryError("subtraction of incompatible minor servo positions"); this->x -= position.x; this->y -= position.y; this->z -= position.z; @@ -95,7 +95,7 @@ MedMinorServoPosition::operator-=(const MedMinorServoPosition& position) return *this; } -MedMinorServoPosition& +MedMinorServoPosition & MedMinorServoPosition::operator*=(double scale) { this->x *= scale; @@ -106,28 +106,26 @@ MedMinorServoPosition::operator*=(double scale) return *this; } -bool -MedMinorServoPosition::is_success_position() +bool MedMinorServoPosition::is_success_position() { - if((mode == MED_MINOR_SERVO_PRIMARY)|| - (mode == MED_MINOR_SERVO_SECONDARY)|| - (mode == MED_MINOR_SERVO_OFFSET)|| - (mode == MED_MINOR_SERVO_TRANSFER_TO_PRIMARY)|| - (mode == MED_MINOR_SERVO_TRANSFER_TO_SECONDARY)) + if ((mode == MED_MINOR_SERVO_PRIMARY) || + (mode == MED_MINOR_SERVO_SECONDARY) || + (mode == MED_MINOR_SERVO_OFFSET) || + (mode == MED_MINOR_SERVO_TRANSFER_TO_PRIMARY) || + (mode == MED_MINOR_SERVO_TRANSFER_TO_SECONDARY)) return true; else return false; } - MedMinorServoPosition -operator+(MedMinorServoPosition lhs, const MedMinorServoPosition& rhs) +operator+(MedMinorServoPosition lhs, const MedMinorServoPosition &rhs) { return lhs += rhs; } MedMinorServoPosition -operator-(MedMinorServoPosition lhs, const MedMinorServoPosition& rhs) +operator-(MedMinorServoPosition lhs, const MedMinorServoPosition &rhs) { return lhs -= rhs; } @@ -144,75 +142,71 @@ operator*(double scale, MedMinorServoPosition rhs) return rhs *= scale; } -bool -MedMinorServoPosition::earlier(const ACS::Time& time) const +bool MedMinorServoPosition::earlier(const ACS::Time &time) const { return (this->time < time); } -bool -MedMinorServoPosition::earlier(const MedMinorServoPosition& position) const +bool MedMinorServoPosition::earlier(const MedMinorServoPosition &position) const { return earlier(position.time); } -bool -MedMinorServoPosition::later(const ACS::Time& time) +bool MedMinorServoPosition::later(const ACS::Time &time) { return (this->time > time); } -bool -MedMinorServoPosition::later(const MedMinorServoPosition& position) +bool MedMinorServoPosition::later(const MedMinorServoPosition &position) { return later(position.time); } -const char* +const char * MedMinorServoPosition::getStatusString() { - switch(mode) + switch (mode) { - case(MED_MINOR_SERVO_LOCAL): - return "LOCAL"; - break; - case(MED_MINOR_SERVO_INTERLOCK): - return "INTERLOCK"; - break; - case(MED_MINOR_SERVO_SR_BLOCK): - return "SR BLOCK"; - break; - case(MED_MINOR_SERVO_PFR_BLOCK): - return "PFR BLOCK"; - break; - case(MED_MINOR_SERVO_SYSTEM_BLOCK): - return "SYSTEM BLOCK"; - break; - case(MED_MINOR_SERVO_PRIMARY_DISABLED): - return "PRIMARY DISABLED"; - break; - case(MED_MINOR_SERVO_SECONDARY_DISABLED): - return "SECONDARY DISABLED"; - break; - - case(MED_MINOR_SERVO_PRIMARY): - return "PRIMARY"; - break; - case(MED_MINOR_SERVO_SECONDARY): - return "SECONDARY"; - break; - case(MED_MINOR_SERVO_OFFSET): - return "OFFSET"; - break; - case(MED_MINOR_SERVO_TRANSFER_TO_PRIMARY): - return "TRANSFER TO PRIMARY"; - break; - case(MED_MINOR_SERVO_TRANSFER_TO_SECONDARY): - return "TRANSFER TO SECONDARY"; - break; - default: - return "UNDEINED"; - break; + case (MED_MINOR_SERVO_LOCAL): + return "LOCAL"; + break; + case (MED_MINOR_SERVO_INTERLOCK): + return "INTERLOCK"; + break; + case (MED_MINOR_SERVO_SR_BLOCK): + return "SR BLOCK"; + break; + case (MED_MINOR_SERVO_PFR_BLOCK): + return "PFR BLOCK"; + break; + case (MED_MINOR_SERVO_SYSTEM_BLOCK): + return "SYSTEM BLOCK"; + break; + case (MED_MINOR_SERVO_PRIMARY_DISABLED): + return "PRIMARY DISABLED"; + break; + case (MED_MINOR_SERVO_SECONDARY_DISABLED): + return "SECONDARY DISABLED"; + break; + + case (MED_MINOR_SERVO_PRIMARY): + return "PRIMARY"; + break; + case (MED_MINOR_SERVO_SECONDARY): + return "SECONDARY"; + break; + case (MED_MINOR_SERVO_OFFSET): + return "OFFSET"; + break; + case (MED_MINOR_SERVO_TRANSFER_TO_PRIMARY): + return "TRANSFER TO PRIMARY"; + break; + case (MED_MINOR_SERVO_TRANSFER_TO_SECONDARY): + return "TRANSFER TO SECONDARY"; + break; + default: + return "UNDEINED"; + break; } } @@ -220,12 +214,14 @@ std::vector<double> MedMinorServoPosition::get_axes_positions() { std::vector<double> res; - if((mode == MED_MINOR_SERVO_PRIMARY)|| - (mode == MED_MINOR_SERVO_TRANSFER_TO_PRIMARY)) + if ((mode == MED_MINOR_SERVO_PRIMARY) || + (mode == MED_MINOR_SERVO_TRANSFER_TO_PRIMARY)) { res.push_back(y); res.push_back(z); - }else{ + } + else + { res.push_back(x); res.push_back(y); res.push_back(z); @@ -235,261 +231,287 @@ MedMinorServoPosition::get_axes_positions() return res; } -double -MedMinorServoPosition::get_axis_position(const char* axis_name) -throw (MinorServoAxisNameError) +double +MedMinorServoPosition::get_axis_position(const char *axis_name) throw(MinorServoAxisNameError) { - if((mode == MED_MINOR_SERVO_PRIMARY)|| - (mode == MED_MINOR_SERVO_TRANSFER_TO_PRIMARY)) + if ((mode == MED_MINOR_SERVO_PRIMARY) || + (mode == MED_MINOR_SERVO_TRANSFER_TO_PRIMARY)) { - if((strcmp(axis_name, "yp") == 0) || - (strcmp(axis_name, "YP") ==0)) + if ((strcmp(axis_name, "yp") == 0) || + (strcmp(axis_name, "YP") == 0)) return y; - if((strcmp(axis_name, "zp") == 0) || - (strcmp(axis_name, "ZP") ==0)) + if ((strcmp(axis_name, "zp") == 0) || + (strcmp(axis_name, "ZP") == 0)) return z; throw MinorServoAxisNameError(axis_name); - }else{ - if((strcmp(axis_name, "x") == 0) || - (strcmp(axis_name, "X") ==0)) + } + else + { + if ((strcmp(axis_name, "x") == 0) || + (strcmp(axis_name, "X") == 0)) return x; - if((strcmp(axis_name, "y") == 0) || - (strcmp(axis_name, "Y") ==0)) + if ((strcmp(axis_name, "y") == 0) || + (strcmp(axis_name, "Y") == 0)) return y; - if((strcmp(axis_name, "z") == 0) || - (strcmp(axis_name, "Z") ==0)) + if ((strcmp(axis_name, "z") == 0) || + (strcmp(axis_name, "Z") == 0)) return z; - if((strcmp(axis_name, "theta_x") == 0) || - (strcmp(axis_name, "THETA_X") ==0)) + if ((strcmp(axis_name, "theta_x") == 0) || + (strcmp(axis_name, "THETA_X") == 0)) return theta_x; - if((strcmp(axis_name, "theta_y") == 0) || - (strcmp(axis_name, "THETA_Y") ==0)) + if ((strcmp(axis_name, "theta_y") == 0) || + (strcmp(axis_name, "THETA_Y") == 0)) return theta_y; throw MinorServoAxisNameError(axis_name); } } MedMinorServoPosition -MedMinorServoGeometry::interpolate(const MedMinorServoPosition& before_position, - const MedMinorServoPosition& after_position, +MedMinorServoGeometry::interpolate(const MedMinorServoPosition &before_position, + const MedMinorServoPosition &after_position, ACS::Time time) { - if(after_position.earlier(before_position)) - throw MinorServoGeometryError("cannot interpolate with previous time value"); - double linear_factor = (double)(time - before_position.time) / + if (after_position.earlier(before_position)) + throw MinorServoGeometryError("cannot interpolate with previous time value"); + double linear_factor = (double)(time - before_position.time) / (double)(after_position.time - before_position.time); MedMinorServoPosition difference = after_position - before_position; MedMinorServoPosition augment = linear_factor * difference; MedMinorServoPosition interpolation = before_position + augment; - //MedMinorServoPosition interpolation = before_position + - // (linear_factor * - // (after_position - before_position)); + // MedMinorServoPosition interpolation = before_position + + // (linear_factor * + // (after_position - before_position)); interpolation.time = time; interpolation.mode = after_position.mode; return interpolation; } -bool -MedMinorServoGeometry::check_axes_limits(const MedMinorServoPosition& position) +bool MedMinorServoGeometry::check_axes_limits(const MedMinorServoPosition &position) { - switch(position.mode) + switch (position.mode) { - case MED_MINOR_SERVO_PRIMARY: - try{ - _get_inverse_yp(position); - _get_inverse_zp(position); - }catch(MinorServoAxisLimitError& ex) - { - return false; - } - break; - case MED_MINOR_SERVO_SECONDARY: - try{ - _get_inverse_x(position); - _get_inverse_y(position); - _get_inverse_z1(position); - _get_inverse_z2(position); - _get_inverse_z3(position); - }catch(MinorServoAxisLimitError& ex) - { - return false; - } - break; - default: - return true; + case MED_MINOR_SERVO_PRIMARY: + try + { + _get_inverse_yp(position); + _get_inverse_zp(position); + } + catch (MinorServoAxisLimitError &ex) + { + return false; + } + break; + case MED_MINOR_SERVO_SECONDARY: + try + { + _get_inverse_x(position); + _get_inverse_y(position); + _get_inverse_z1(position); + _get_inverse_z2(position); + _get_inverse_z3(position); + } + catch (MinorServoAxisLimitError &ex) + { + return false; + } + break; + default: + return true; } return true; } -double +double MedMinorServoGeometry::_check_axis_limit(const double position, const MedMinorServoAxis axis) { - int iposition = (int)position; - - if(iposition < axis.position_min){ + if ((int)position < axis.position_min) + { throw MinorServoAxisLimitError("axis too low"); - //return axis.position_min; + /* + CUSTOM_LOG(LM_FULL_INFO, "MinorServo::MinorServoGeometry::_check_axis_limit", + (LM_DEBUG, "axis %s too low, setting to min position %f",axis.name,axis.position_min)); + return axis.position_min; + */ } - if(iposition > axis.position_max){ - std::cout<<axis.name<<" "<<iposition<<" " <<axis.position_max<< std::endl; + + if ((int)position > axis.position_max) + { throw MinorServoAxisLimitError("axis too high "); - //return axis.position_max; + /* + CUSTOM_LOG(LM_FULL_INFO, "MinorServo::MinorServoGeometry::_check_axis_limit", + (LM_DEBUG, "axis %s too high, setting to max position %f",axis.name,axis.position_max)); + return axis.position_max; + */ } return position; } MEDMINORSERVOSETPOS -MedMinorServoGeometry::positionToAxes(const MedMinorServoPosition& position) +MedMinorServoGeometry::positionToAxes(const MedMinorServoPosition &position) { MEDMINORSERVOSETPOS command; - switch(position.mode) + switch (position.mode) { - case(MED_MINOR_SERVO_PRIMARY): - command.mode = 0; + case (MED_MINOR_SERVO_PRIMARY): + try + { + command.mode = 0; command.pos_x_yp = _get_inverse_yp(position); command.pos_y_zp = _get_inverse_zp(position); - break; - case(MED_MINOR_SERVO_SECONDARY): - command.mode = 1; + } + catch (MinorServoAxisLimitError &ex) + { + throw MinorServoGeometryError("axis out of range"); + } + break; + case (MED_MINOR_SERVO_SECONDARY): + try + { + command.mode = 1; command.pos_x_yp = _get_inverse_x(position); command.pos_y_zp = _get_inverse_y(position); command.pos_z1 = _get_inverse_z1(position); command.pos_z2 = _get_inverse_z2(position); command.pos_z3 = _get_inverse_z3(position); - break; - default: - throw MinorServoGeometryError("Invalid mode converting position to command"); + } + catch (MinorServoAxisLimitError &ex) + { + throw MinorServoGeometryError("axis out of range"); + } + break; + default: + throw MinorServoGeometryError("Invalid mode converting position to command"); } + command.time = MedMinorServoTime::ACSToServoTime(position.time); return command; } - MedMinorServoPosition -MedMinorServoGeometry::positionFromAxes(const MEDMINORSERVOSTATUS& status) +MedMinorServoGeometry::positionFromAxes(const MEDMINORSERVOSTATUS &status) { MedMinorServoPosition result; - switch(status.system_status) + switch (status.system_status) { - case(MED_MINOR_SERVO_STATUS_PRIMARY): //PRIMARY FOCUS - result = MedMinorServoPosition( - 0, - _get_direct_yp(status), - _get_direct_zp(status), - 0, - 0, - MED_MINOR_SERVO_PRIMARY, - MedMinorServoTime::servoToACSTime(status.time)); - //IRA::CIRATools::getACSTime()); - break; - case(MED_MINOR_SERVO_STATUS_TRANSFER_TO_PRIMARY): //PRIMARY FOCUS - result = MedMinorServoPosition( - 0, - _get_direct_yp(status), - _get_direct_zp(status), - 0, - 0, - MED_MINOR_SERVO_TRANSFER_TO_PRIMARY, - MedMinorServoTime::servoToACSTime(status.time)); - //IRA::CIRATools::getACSTime()); - break; - case(MED_MINOR_SERVO_STATUS_PRIMARY_DISABLED): //PRIMARY FOCUS - result = MedMinorServoPosition( - 0, - _get_direct_yp(status), - _get_direct_zp(status), - 0, - 0, - MED_MINOR_SERVO_PRIMARY_DISABLED, - MedMinorServoTime::servoToACSTime(status.time)); - //IRA::CIRATools::getACSTime()); - break; - case(MED_MINOR_SERVO_STATUS_PFR_BLOCK): //PRIMARY FOCUS - result = MedMinorServoPosition( - 0, - _get_direct_yp(status), - _get_direct_zp(status), - 0, - 0, - MED_MINOR_SERVO_PFR_BLOCK, - MedMinorServoTime::servoToACSTime(status.time)); - //IRA::CIRATools::getACSTime()); - break; - case(MED_MINOR_SERVO_STATUS_SECONDARY): - result = MedMinorServoPosition( - _get_direct_x(status), - _get_direct_y(status), - _get_direct_z(status), - _get_direct_theta_x(status), - _get_direct_theta_y(status), - MED_MINOR_SERVO_SECONDARY, - MedMinorServoTime::servoToACSTime(status.time)); - //IRA::CIRATools::getACSTime()); - break; - case(MED_MINOR_SERVO_STATUS_TRANSFER_TO_SECONDARY): - result = MedMinorServoPosition( - _get_direct_x(status), - _get_direct_y(status), - _get_direct_z(status), - _get_direct_theta_x(status), - _get_direct_theta_y(status), - MED_MINOR_SERVO_TRANSFER_TO_SECONDARY, - MedMinorServoTime::servoToACSTime(status.time)); - //IRA::CIRATools::getACSTime()); - break; - case(MED_MINOR_SERVO_STATUS_SECONDARY_DISABLED): - result = MedMinorServoPosition( - _get_direct_x(status), - _get_direct_y(status), - _get_direct_z(status), - _get_direct_theta_x(status), - _get_direct_theta_y(status), - MED_MINOR_SERVO_SECONDARY_DISABLED, - MedMinorServoTime::servoToACSTime(status.time)); - //IRA::CIRATools::getACSTime()); - break; - case(MED_MINOR_SERVO_STATUS_SR_BLOCK): - result = MedMinorServoPosition( - _get_direct_x(status), - _get_direct_y(status), - _get_direct_z(status), - _get_direct_theta_x(status), - _get_direct_theta_y(status), - MED_MINOR_SERVO_SR_BLOCK, - MedMinorServoTime::servoToACSTime(status.time)); - //IRA::CIRATools::getACSTime()); - break; - case(MED_MINOR_SERVO_STATUS_SYSTEM_BLOCK): - result = MedMinorServoPosition( - _get_direct_x(status), - _get_direct_y(status), - _get_direct_z(status), - _get_direct_theta_x(status), - _get_direct_theta_y(status), - MED_MINOR_SERVO_SYSTEM_BLOCK, - MedMinorServoTime::servoToACSTime(status.time)); - //IRA::CIRATools::getACSTime()); - break; - case(MED_MINOR_SERVO_STATUS_LOCAL): - result = MedMinorServoPosition(0,0,0,0,0, MED_MINOR_SERVO_LOCAL, - MedMinorServoTime::servoToACSTime(status.time)); - //IRA::CIRATools::getACSTime()); - break; - case(MED_MINOR_SERVO_STATUS_INTERLOCK): - result = MedMinorServoPosition(0,0,0,0,0, MED_MINOR_SERVO_INTERLOCK, - MedMinorServoTime::servoToACSTime(status.time)); - //IRA::CIRATools::getACSTime()); - break; - default: - throw MinorServoGeometryError("Invalid system status converting status to position"); + case (MED_MINOR_SERVO_STATUS_PRIMARY): // PRIMARY FOCUS + result = MedMinorServoPosition( + 0, + _get_direct_yp(status), + _get_direct_zp(status), + 0, + 0, + MED_MINOR_SERVO_PRIMARY, + MedMinorServoTime::servoToACSTime(status.time)); + // IRA::CIRATools::getACSTime()); + break; + case (MED_MINOR_SERVO_STATUS_TRANSFER_TO_PRIMARY): // PRIMARY FOCUS + result = MedMinorServoPosition( + 0, + _get_direct_yp(status), + _get_direct_zp(status), + 0, + 0, + MED_MINOR_SERVO_TRANSFER_TO_PRIMARY, + MedMinorServoTime::servoToACSTime(status.time)); + // IRA::CIRATools::getACSTime()); + break; + case (MED_MINOR_SERVO_STATUS_PRIMARY_DISABLED): // PRIMARY FOCUS + result = MedMinorServoPosition( + 0, + _get_direct_yp(status), + _get_direct_zp(status), + 0, + 0, + MED_MINOR_SERVO_PRIMARY_DISABLED, + MedMinorServoTime::servoToACSTime(status.time)); + // IRA::CIRATools::getACSTime()); + break; + case (MED_MINOR_SERVO_STATUS_PFR_BLOCK): // PRIMARY FOCUS + result = MedMinorServoPosition( + 0, + _get_direct_yp(status), + _get_direct_zp(status), + 0, + 0, + MED_MINOR_SERVO_PFR_BLOCK, + MedMinorServoTime::servoToACSTime(status.time)); + // IRA::CIRATools::getACSTime()); + break; + case (MED_MINOR_SERVO_STATUS_SECONDARY): + result = MedMinorServoPosition( + _get_direct_x(status), + _get_direct_y(status), + _get_direct_z(status), + _get_direct_theta_x(status), + _get_direct_theta_y(status), + MED_MINOR_SERVO_SECONDARY, + MedMinorServoTime::servoToACSTime(status.time)); + // IRA::CIRATools::getACSTime()); + break; + case (MED_MINOR_SERVO_STATUS_TRANSFER_TO_SECONDARY): + result = MedMinorServoPosition( + _get_direct_x(status), + _get_direct_y(status), + _get_direct_z(status), + _get_direct_theta_x(status), + _get_direct_theta_y(status), + MED_MINOR_SERVO_TRANSFER_TO_SECONDARY, + MedMinorServoTime::servoToACSTime(status.time)); + // IRA::CIRATools::getACSTime()); + break; + case (MED_MINOR_SERVO_STATUS_SECONDARY_DISABLED): + result = MedMinorServoPosition( + _get_direct_x(status), + _get_direct_y(status), + _get_direct_z(status), + _get_direct_theta_x(status), + _get_direct_theta_y(status), + MED_MINOR_SERVO_SECONDARY_DISABLED, + MedMinorServoTime::servoToACSTime(status.time)); + // IRA::CIRATools::getACSTime()); + break; + case (MED_MINOR_SERVO_STATUS_SR_BLOCK): + result = MedMinorServoPosition( + _get_direct_x(status), + _get_direct_y(status), + _get_direct_z(status), + _get_direct_theta_x(status), + _get_direct_theta_y(status), + MED_MINOR_SERVO_SR_BLOCK, + MedMinorServoTime::servoToACSTime(status.time)); + // IRA::CIRATools::getACSTime()); + break; + case (MED_MINOR_SERVO_STATUS_SYSTEM_BLOCK): + result = MedMinorServoPosition( + _get_direct_x(status), + _get_direct_y(status), + _get_direct_z(status), + _get_direct_theta_x(status), + _get_direct_theta_y(status), + MED_MINOR_SERVO_SYSTEM_BLOCK, + MedMinorServoTime::servoToACSTime(status.time)); + // IRA::CIRATools::getACSTime()); + break; + case (MED_MINOR_SERVO_STATUS_LOCAL): + result = MedMinorServoPosition(0, 0, 0, 0, 0, MED_MINOR_SERVO_LOCAL, + MedMinorServoTime::servoToACSTime(status.time)); + // IRA::CIRATools::getACSTime()); + break; + case (MED_MINOR_SERVO_STATUS_INTERLOCK): + result = MedMinorServoPosition(0, 0, 0, 0, 0, MED_MINOR_SERVO_INTERLOCK, + MedMinorServoTime::servoToACSTime(status.time)); + // IRA::CIRATools::getACSTime()); + break; + default: + throw MinorServoGeometryError("Invalid system status converting status to position"); } return result; } MedMinorServoPosition -MedMinorServoGeometry::abs(const MedMinorServoPosition& position) +MedMinorServoGeometry::abs(const MedMinorServoPosition &position) { MedMinorServoPosition _abs_position = position; _abs_position.x = std::abs(position.x); @@ -500,99 +522,121 @@ MedMinorServoGeometry::abs(const MedMinorServoPosition& position) return _abs_position; } -double -MedMinorServoGeometry::min_time(const MedMinorServoPosition& start, - const MedMinorServoPosition& stop) +double +MedMinorServoGeometry::min_time(const MedMinorServoPosition &start, + const MedMinorServoPosition &stop) { double min = 0; MEDMINORSERVOSETPOS start_axes = positionToAxes(start); MEDMINORSERVOSETPOS stop_axes = positionToAxes(stop); - if(start.mode == MED_MINOR_SERVO_PRIMARY) + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); + + if (start.mode == MED_MINOR_SERVO_PRIMARY) { - if(start_axes.pos_x_yp != stop_axes.pos_x_yp) + if (start_axes.pos_x_yp != stop_axes.pos_x_yp) { - double t_yp = std::abs(start_axes.pos_x_yp - stop_axes.pos_x_yp) / MINOR_SERVO_YP.speed_max; - if(t_yp > min) min = t_yp; + double t_yp = std::abs(start_axes.pos_x_yp - stop_axes.pos_x_yp) / medMinorServoConstants->MINOR_SERVO_YP.speed_max; + if (t_yp > min) + min = t_yp; } - if(start_axes.pos_y_zp != stop_axes.pos_y_zp) + if (start_axes.pos_y_zp != stop_axes.pos_y_zp) { - double t_zp = std::abs(start_axes.pos_y_zp - stop_axes.pos_y_zp) / MINOR_SERVO_ZP.speed_max; - if(t_zp > min) min = t_zp; + double t_zp = std::abs(start_axes.pos_y_zp - stop_axes.pos_y_zp) / medMinorServoConstants->MINOR_SERVO_ZP.speed_max; + if (t_zp > min) + min = t_zp; } - }else{//MED_MINOR_SERVO_SECONDARY - if(start_axes.pos_x_yp != stop_axes.pos_x_yp) + } + else + { // MED_MINOR_SERVO_SECONDARY + if (start_axes.pos_x_yp != stop_axes.pos_x_yp) { - double t_x = std::abs(start_axes.pos_x_yp - stop_axes.pos_x_yp) / MINOR_SERVO_X.speed_max; - if(t_x > min) min = t_x; + double t_x = std::abs(start_axes.pos_x_yp - stop_axes.pos_x_yp) / medMinorServoConstants->MINOR_SERVO_X.speed_max; + if (t_x > min) + min = t_x; } - if(start_axes.pos_y_zp != stop_axes.pos_y_zp) + if (start_axes.pos_y_zp != stop_axes.pos_y_zp) { - double t_y = std::abs(start_axes.pos_y_zp - stop_axes.pos_y_zp) / MINOR_SERVO_Y.speed_max; - if(t_y > min) min = t_y; + double t_y = std::abs(start_axes.pos_y_zp - stop_axes.pos_y_zp) / medMinorServoConstants->MINOR_SERVO_Y.speed_max; + if (t_y > min) + min = t_y; } - if(start_axes.pos_z1 != stop_axes.pos_z1) + if (start_axes.pos_z1 != stop_axes.pos_z1) { - double t_z1 = std::abs(start_axes.pos_z1 - stop_axes.pos_z1) / MINOR_SERVO_Z1.speed_max; - if(t_z1 > min) min = t_z1; + double t_z1 = std::abs(start_axes.pos_z1 - stop_axes.pos_z1) / medMinorServoConstants->MINOR_SERVO_Z1.speed_max; + if (t_z1 > min) + min = t_z1; } - if(start_axes.pos_z2 != stop_axes.pos_z2) + if (start_axes.pos_z2 != stop_axes.pos_z2) { - double t_z2 = std::abs(start_axes.pos_z2 - stop_axes.pos_z2) / MINOR_SERVO_Z2.speed_max; - if(t_z2 > min) min = t_z2; + double t_z2 = std::abs(start_axes.pos_z2 - stop_axes.pos_z2) / medMinorServoConstants->MINOR_SERVO_Z2.speed_max; + if (t_z2 > min) + min = t_z2; } - if(start_axes.pos_z3 != stop_axes.pos_z3) + if (start_axes.pos_z3 != stop_axes.pos_z3) { - double t_z3 = std::abs(start_axes.pos_z3 - stop_axes.pos_z3) / MINOR_SERVO_Z3.speed_max; - if(t_z3 > min) min = t_z3; + double t_z3 = std::abs(start_axes.pos_z3 - stop_axes.pos_z3) / medMinorServoConstants->MINOR_SERVO_Z3.speed_max; + if (t_z3 > min) + min = t_z3; } } return min; } -double -MedMinorServoGeometry::max_time(const MedMinorServoPosition& start, - const MedMinorServoPosition& stop) +double +MedMinorServoGeometry::max_time(const MedMinorServoPosition &start, + const MedMinorServoPosition &stop) { double max = std::numeric_limits<double>::infinity(); MEDMINORSERVOSETPOS start_axes = positionToAxes(start); MEDMINORSERVOSETPOS stop_axes = positionToAxes(stop); - if(start.mode == MED_MINOR_SERVO_PRIMARY) + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); + + if (start.mode == MED_MINOR_SERVO_PRIMARY) { - if(start_axes.pos_x_yp != stop_axes.pos_x_yp) + if (start_axes.pos_x_yp != stop_axes.pos_x_yp) { - double t_yp = std::abs(start_axes.pos_x_yp - stop_axes.pos_x_yp) / MINOR_SERVO_YP.speed_min; - if(t_yp < max) max = t_yp; + double t_yp = std::abs(start_axes.pos_x_yp - stop_axes.pos_x_yp) / medMinorServoConstants->MINOR_SERVO_YP.speed_min; + if (t_yp < max) + max = t_yp; } - if(start_axes.pos_y_zp != stop_axes.pos_y_zp) + if (start_axes.pos_y_zp != stop_axes.pos_y_zp) { - double t_zp = std::abs(start_axes.pos_y_zp - stop_axes.pos_y_zp) / MINOR_SERVO_ZP.speed_min; - if(t_zp < max) max = t_zp; + double t_zp = std::abs(start_axes.pos_y_zp - stop_axes.pos_y_zp) / medMinorServoConstants->MINOR_SERVO_ZP.speed_min; + if (t_zp < max) + max = t_zp; } - }else{//MED_MINOR_SERVO_SECONDARY - if(start_axes.pos_x_yp != stop_axes.pos_x_yp) + } + else + { // MED_MINOR_SERVO_SECONDARY + if (start_axes.pos_x_yp != stop_axes.pos_x_yp) { - double t_x = std::abs(start_axes.pos_x_yp - stop_axes.pos_x_yp) / MINOR_SERVO_X.speed_min; - if(t_x < max) max = t_x; + double t_x = std::abs(start_axes.pos_x_yp - stop_axes.pos_x_yp) / medMinorServoConstants->MINOR_SERVO_X.speed_min; + if (t_x < max) + max = t_x; } - if(start_axes.pos_y_zp != stop_axes.pos_y_zp) + if (start_axes.pos_y_zp != stop_axes.pos_y_zp) { - double t_y = std::abs(start_axes.pos_y_zp - stop_axes.pos_y_zp) / MINOR_SERVO_Y.speed_min; - if(t_y < max) max = t_y; + double t_y = std::abs(start_axes.pos_y_zp - stop_axes.pos_y_zp) / medMinorServoConstants->MINOR_SERVO_Y.speed_min; + if (t_y < max) + max = t_y; } - if(start_axes.pos_z1 != stop_axes.pos_z1) + if (start_axes.pos_z1 != stop_axes.pos_z1) { - double t_z1 = std::abs(start_axes.pos_z1 - stop_axes.pos_z1) / MINOR_SERVO_Z1.speed_min; - if(t_z1 < max) max = t_z1; + double t_z1 = std::abs(start_axes.pos_z1 - stop_axes.pos_z1) / medMinorServoConstants->MINOR_SERVO_Z1.speed_min; + if (t_z1 < max) + max = t_z1; } - if(start_axes.pos_z2 != stop_axes.pos_z2) + if (start_axes.pos_z2 != stop_axes.pos_z2) { - double t_z2 = std::abs(start_axes.pos_z2 - stop_axes.pos_z2) / MINOR_SERVO_Z2.speed_min; - if(t_z2 < max) max = t_z2; + double t_z2 = std::abs(start_axes.pos_z2 - stop_axes.pos_z2) / medMinorServoConstants->MINOR_SERVO_Z2.speed_min; + if (t_z2 < max) + max = t_z2; } - if(start_axes.pos_z3 != stop_axes.pos_z3) + if (start_axes.pos_z3 != stop_axes.pos_z3) { - double t_z3 = std::abs(start_axes.pos_z3 - stop_axes.pos_z3) / MINOR_SERVO_Z3.speed_min; - if(t_z3 < max) max = t_z3; + double t_z3 = std::abs(start_axes.pos_z3 - stop_axes.pos_z3) / medMinorServoConstants->MINOR_SERVO_Z3.speed_min; + if (t_z3 < max) + max = t_z3; } } return max; @@ -601,11 +645,12 @@ MedMinorServoGeometry::max_time(const MedMinorServoPosition& start, MedMinorServoPosition MedMinorServoGeometry::get_primary_tolerance() { + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); MEDMINORSERVOSTATUS status; status.mode = 0; status.time = 0; - status.pos_x_yp = MINOR_SERVO_YP.position_error + MINOR_SERVO_YP.position_zero; - status.pos_y_zp = MINOR_SERVO_ZP.position_error + MINOR_SERVO_ZP.position_zero; + status.pos_x_yp = medMinorServoConstants->MINOR_SERVO_YP.position_error + medMinorServoConstants->MINOR_SERVO_YP.position_zero; + status.pos_y_zp = medMinorServoConstants->MINOR_SERVO_ZP.position_error + medMinorServoConstants->MINOR_SERVO_ZP.position_zero; status.system_status = MED_MINOR_SERVO_STATUS_PRIMARY; MedMinorServoPosition position = positionFromAxes(status); position.mode = MED_MINOR_SERVO_OFFSET; @@ -616,27 +661,28 @@ MedMinorServoGeometry::get_primary_tolerance() MedMinorServoPosition MedMinorServoGeometry::get_secondary_tolerance() { + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); MEDMINORSERVOSTATUS status; status.mode = 1; status.system_status = MED_MINOR_SERVO_STATUS_PRIMARY; status.time = 0; MedMinorServoPosition position; position.mode = MED_MINOR_SERVO_OFFSET; - status.pos_x_yp = MINOR_SERVO_X.position_error + MINOR_SERVO_X.position_zero; - status.pos_y_zp = MINOR_SERVO_Y.position_error + MINOR_SERVO_Y.position_zero; + status.pos_x_yp = medMinorServoConstants->MINOR_SERVO_X.position_error + medMinorServoConstants->MINOR_SERVO_X.position_zero; + status.pos_y_zp = medMinorServoConstants->MINOR_SERVO_Y.position_error + medMinorServoConstants->MINOR_SERVO_Y.position_zero; position.x = std::abs(_get_direct_x(status)); position.y = std::abs(_get_direct_y(status)); - status.pos_y_zp = MINOR_SERVO_Y.position_zero - MINOR_SERVO_Y.position_error; - status.pos_z1 = MINOR_SERVO_Z1.position_zero + MINOR_SERVO_Z1.position_error; - status.pos_z2 = MINOR_SERVO_Z2.position_zero + MINOR_SERVO_Z2.position_error; - status.pos_z3 = MINOR_SERVO_Z3.position_zero + MINOR_SERVO_Z3.position_error; + status.pos_y_zp = medMinorServoConstants->MINOR_SERVO_Y.position_zero - medMinorServoConstants->MINOR_SERVO_Y.position_error; + status.pos_z1 = medMinorServoConstants->MINOR_SERVO_Z1.position_zero + medMinorServoConstants->MINOR_SERVO_Z1.position_error; + status.pos_z2 = medMinorServoConstants->MINOR_SERVO_Z2.position_zero + medMinorServoConstants->MINOR_SERVO_Z2.position_error; + status.pos_z3 = medMinorServoConstants->MINOR_SERVO_Z3.position_zero + medMinorServoConstants->MINOR_SERVO_Z3.position_error; position.z = std::abs(_get_direct_z(status)); - status.pos_z1 = MINOR_SERVO_Z1.position_zero + MINOR_SERVO_Z1.position_error; - status.pos_z2 = MINOR_SERVO_Z2.position_zero - MINOR_SERVO_Z2.position_error; - status.pos_z3 = MINOR_SERVO_Z3.position_zero - MINOR_SERVO_Z3.position_error; + status.pos_z1 = medMinorServoConstants->MINOR_SERVO_Z1.position_zero + medMinorServoConstants->MINOR_SERVO_Z1.position_error; + status.pos_z2 = medMinorServoConstants->MINOR_SERVO_Z2.position_zero - medMinorServoConstants->MINOR_SERVO_Z2.position_error; + status.pos_z3 = medMinorServoConstants->MINOR_SERVO_Z3.position_zero - medMinorServoConstants->MINOR_SERVO_Z3.position_error; position.theta_x = std::abs(_get_direct_theta_x(status)); - status.pos_z2 = MINOR_SERVO_Z2.position_zero + MINOR_SERVO_Z2.position_error; - status.pos_z3 = MINOR_SERVO_Z3.position_zero - MINOR_SERVO_Z3.position_error; + status.pos_z2 = medMinorServoConstants->MINOR_SERVO_Z2.position_zero + medMinorServoConstants->MINOR_SERVO_Z2.position_error; + status.pos_z3 = medMinorServoConstants->MINOR_SERVO_Z3.position_zero - medMinorServoConstants->MINOR_SERVO_Z3.position_error; position.theta_y = std::abs(_get_direct_theta_y(status)); position.time = 0; return position; @@ -648,22 +694,28 @@ MedMinorServoGeometry::get_secondary_tolerance() double MedMinorServoGeometry::_get_direct_yp(const MEDMINORSERVOSTATUS actual_position) { - if(actual_position.mode == 1) //GREGORIAN - //TODO: raise exception? warning? - return actual_position.pos_x_yp - MINOR_SERVO_X.position_zero; - else{ - return actual_position.pos_x_yp - MINOR_SERVO_YP.position_zero; + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); + + if (actual_position.mode == 1) // GREGORIAN + // TODO: raise exception? warning? + return actual_position.pos_x_yp - medMinorServoConstants->MINOR_SERVO_X.position_zero; + else + { + return actual_position.pos_x_yp - medMinorServoConstants->MINOR_SERVO_YP.position_zero; } } double MedMinorServoGeometry::_get_direct_zp(const MEDMINORSERVOSTATUS actual_position) { - if(actual_position.mode == 1) //GREGORIAN - //TODO: raise exception? warning? - return 0.9903 * (actual_position.pos_y_zp - MINOR_SERVO_Y.position_zero); - else{ - return actual_position.pos_y_zp - MINOR_SERVO_ZP.position_zero; + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); + + if (actual_position.mode == 1) // GREGORIAN + // TODO: raise exception? warning? + return 0.9903 * (actual_position.pos_y_zp - medMinorServoConstants->MINOR_SERVO_Y.position_zero); + else + { + return actual_position.pos_y_zp - medMinorServoConstants->MINOR_SERVO_ZP.position_zero; } } @@ -674,36 +726,41 @@ MedMinorServoGeometry::_get_direct_zp(const MEDMINORSERVOSTATUS actual_position) double MedMinorServoGeometry::_get_direct_x(const MEDMINORSERVOSTATUS actual_position) { - if(actual_position.mode == 1) //GREGORIAN - return actual_position.pos_x_yp - MINOR_SERVO_X.position_zero; - else{ - //TODO: raise exception? warning? - return actual_position.pos_x_yp - MINOR_SERVO_YP.position_zero; + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); + + if (actual_position.mode == 1) // GREGORIAN + return actual_position.pos_x_yp - medMinorServoConstants->MINOR_SERVO_X.position_zero; + else + { + // TODO: raise exception? warning? + return actual_position.pos_x_yp - medMinorServoConstants->MINOR_SERVO_YP.position_zero; } } double MedMinorServoGeometry::_get_direct_y(const MEDMINORSERVOSTATUS actual_position) { - if(actual_position.mode == 1) //GREGORIAN - return 0.9903 * (actual_position.pos_y_zp - MINOR_SERVO_Y.position_zero); - else{ - //TODO: raise exception? warning? - return actual_position.pos_y_zp - MINOR_SERVO_ZP.position_zero; + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); + + if (actual_position.mode == 1) // GREGORIAN + return 0.9903 * (actual_position.pos_y_zp - medMinorServoConstants->MINOR_SERVO_Y.position_zero); + else + { + // TODO: raise exception? warning? + return actual_position.pos_y_zp - medMinorServoConstants->MINOR_SERVO_ZP.position_zero; } } double MedMinorServoGeometry::_get_direct_z(const MEDMINORSERVOSTATUS actual_position) { + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); double z = 0.0; - if(actual_position.mode == 1) //GREGORIAN - z = - 0.1392 * (actual_position.pos_y_zp - MINOR_SERVO_Y.position_zero) - + 0.3333 * (actual_position.pos_z1 - MINOR_SERVO_Z1.position_zero) - + 0.3333 * (actual_position.pos_z2 - MINOR_SERVO_Z2.position_zero) - + 0.3333 * (actual_position.pos_z3 - MINOR_SERVO_Z3.position_zero); - else{ - //TODO: raise exception? warning? + if (actual_position.mode == 1) // GREGORIAN + z = -0.1392 * (actual_position.pos_y_zp - medMinorServoConstants->MINOR_SERVO_Y.position_zero) + 0.3333 * (actual_position.pos_z1 - medMinorServoConstants->MINOR_SERVO_Z1.position_zero) + 0.3333 * (actual_position.pos_z2 - medMinorServoConstants->MINOR_SERVO_Z2.position_zero) + 0.3333 * (actual_position.pos_z3 - medMinorServoConstants->MINOR_SERVO_Z3.position_zero); + else + { + // TODO: raise exception? warning? } return z; } @@ -711,13 +768,13 @@ MedMinorServoGeometry::_get_direct_z(const MEDMINORSERVOSTATUS actual_position) double MedMinorServoGeometry::_get_direct_theta_x(const MEDMINORSERVOSTATUS actual_position) { + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); double theta_x = 0.0; - if(actual_position.mode == 1) //GREGORIAN - theta_x = (actual_position.pos_z1 - MINOR_SERVO_Z1.position_zero) / 1791 - -(actual_position.pos_z2 - MINOR_SERVO_Z2.position_zero) / 3582 - -(actual_position.pos_z3 - MINOR_SERVO_Z3.position_zero) / 3582; - else{ - //TODO: raise exception? warning? + if (actual_position.mode == 1) // GREGORIAN + theta_x = (actual_position.pos_z1 - medMinorServoConstants->MINOR_SERVO_Z1.position_zero) / 1791 - (actual_position.pos_z2 - medMinorServoConstants->MINOR_SERVO_Z2.position_zero) / 3582 - (actual_position.pos_z3 - medMinorServoConstants->MINOR_SERVO_Z3.position_zero) / 3582; + else + { + // TODO: raise exception? warning? } return theta_x; } @@ -725,12 +782,13 @@ MedMinorServoGeometry::_get_direct_theta_x(const MEDMINORSERVOSTATUS actual_posi double MedMinorServoGeometry::_get_direct_theta_y(const MEDMINORSERVOSTATUS actual_position) { + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); double theta_y = 0.0; - if(actual_position.mode == 1) //GREGORIAN - theta_y = (actual_position.pos_z2 - MINOR_SERVO_Z2.position_zero) / 2068 - -(actual_position.pos_z3 - MINOR_SERVO_Z3.position_zero) / 2068; - else{ - //TODO: raise exception? warning? + if (actual_position.mode == 1) // GREGORIAN + theta_y = (actual_position.pos_z2 - medMinorServoConstants->MINOR_SERVO_Z2.position_zero) / 2068 - (actual_position.pos_z3 - medMinorServoConstants->MINOR_SERVO_Z3.position_zero) / 2068; + else + { + // TODO: raise exception? warning? } return theta_y; } @@ -739,67 +797,62 @@ MedMinorServoGeometry::_get_direct_theta_y(const MEDMINORSERVOSTATUS actual_posi * INVERSE EQUATIONS FOR PRIMARY FOCUS AXES POSITIONS ****************************************************/ -double -MedMinorServoGeometry::_get_inverse_yp(const MedMinorServoPosition& position) +double +MedMinorServoGeometry::_get_inverse_yp(const MedMinorServoPosition &position) { - double yp = position.y + MINOR_SERVO_YP.position_zero; - return _check_axis_limit(yp, MINOR_SERVO_YP); + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); + double yp = position.y + medMinorServoConstants->MINOR_SERVO_YP.position_zero; + return _check_axis_limit(yp, medMinorServoConstants->MINOR_SERVO_YP); } -double -MedMinorServoGeometry::_get_inverse_zp(const MedMinorServoPosition& position) +double +MedMinorServoGeometry::_get_inverse_zp(const MedMinorServoPosition &position) { - double zp = position.z + MINOR_SERVO_ZP.position_zero; - return _check_axis_limit(zp, MINOR_SERVO_ZP); + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); + double zp = position.z + medMinorServoConstants->MINOR_SERVO_ZP.position_zero; + return _check_axis_limit(zp, medMinorServoConstants->MINOR_SERVO_ZP); } /****************************************************** * INVERSE EQUATIONS FOR SECONDARY FOCUS AXES POSITIONS ******************************************************/ -double -MedMinorServoGeometry::_get_inverse_x(const MedMinorServoPosition& position) +double +MedMinorServoGeometry::_get_inverse_x(const MedMinorServoPosition &position) { - double x = position.x + MINOR_SERVO_X.position_zero; - return _check_axis_limit(x, MINOR_SERVO_X); + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); + double x = position.x + medMinorServoConstants->MINOR_SERVO_X.position_zero; + return _check_axis_limit(x, medMinorServoConstants->MINOR_SERVO_X); } -double -MedMinorServoGeometry::_get_inverse_y(const MedMinorServoPosition& position) +double +MedMinorServoGeometry::_get_inverse_y(const MedMinorServoPosition &position) { - double y = 1.0098 * position.y + MINOR_SERVO_Y.position_zero; - return _check_axis_limit(y, MINOR_SERVO_Y); + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); + double y = 1.0098 * position.y + medMinorServoConstants->MINOR_SERVO_Y.position_zero; + return _check_axis_limit(y, medMinorServoConstants->MINOR_SERVO_Y); } -double -MedMinorServoGeometry::_get_inverse_z1(const MedMinorServoPosition& position) +double +MedMinorServoGeometry::_get_inverse_z1(const MedMinorServoPosition &position) { - double z1 = 0.1405 * position.y - + position.z - + 1194 * position.theta_x - + MINOR_SERVO_Z1.position_zero; - return _check_axis_limit(z1, MINOR_SERVO_Z1); + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); + double z1 = 0.1405 * position.y + position.z + 1194 * position.theta_x + medMinorServoConstants->MINOR_SERVO_Z1.position_zero; + return _check_axis_limit(z1, medMinorServoConstants->MINOR_SERVO_Z1); } -double -MedMinorServoGeometry::_get_inverse_z2(const MedMinorServoPosition& position) +double +MedMinorServoGeometry::_get_inverse_z2(const MedMinorServoPosition &position) { - double z2 = 0.1405 * position.y - + position.z - - 597 * position.theta_x - + 1034 * position.theta_y - + MINOR_SERVO_Z2.position_zero; - return _check_axis_limit(z2, MINOR_SERVO_Z2); + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); + double z2 = 0.1405 * position.y + position.z - 597 * position.theta_x + 1034 * position.theta_y + medMinorServoConstants->MINOR_SERVO_Z2.position_zero; + return _check_axis_limit(z2, medMinorServoConstants->MINOR_SERVO_Z2); } -double -MedMinorServoGeometry::_get_inverse_z3(const MedMinorServoPosition& position) +double +MedMinorServoGeometry::_get_inverse_z3(const MedMinorServoPosition &position) { - double z3 = 0.1405 * position.y - + position.z - - 597 * position.theta_x - - 1034 * position.theta_y - + MINOR_SERVO_Z3.position_zero; - return _check_axis_limit(z3, MINOR_SERVO_Z3); + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); + double z3 = 0.1405 * position.y + position.z - 597 * position.theta_x - 1034 * position.theta_y + medMinorServoConstants->MINOR_SERVO_Z3.position_zero; + return _check_axis_limit(z3, medMinorServoConstants->MINOR_SERVO_Z3); } - diff --git a/Medicina/Servers/MedicinaMinorServo/src/MedMinorServoParameters.cpp b/Medicina/Servers/MedicinaMinorServo/src/MedMinorServoParameters.cpp index 4a730fcd074fc09fb63142e7956bd954ea4f2dcc..f71ff12e2b13cf996ca514019f8f1d7a0ad09186 100644 --- a/Medicina/Servers/MedicinaMinorServo/src/MedMinorServoParameters.cpp +++ b/Medicina/Servers/MedicinaMinorServo/src/MedMinorServoParameters.cpp @@ -14,6 +14,17 @@ VirtualAxis::VirtualAxis(const char* name, _coefficients(coefficients) {} +std::vector<double> parseLimitsLine(const char* line) +{ + std::vector<double> limits; + std::vector<std::string> tokens = split(line); + for(int i=0; i<6; ++i) + { + limits.push_back(boost::lexical_cast<double>(tokens[i])); + } + return limits; +} + VirtualAxis parseAxisLine(const char* name, const char* line) { @@ -174,8 +185,30 @@ MedMinorServoConfiguration get_configuration_from_CDB(maci::ContainerServices* services) { MedMinorServoConfiguration configuration; + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); + IRA::CError error; error.Reset(); + + IRA::CDBTable minor_servo_limits_table(services, + "MinorServoLimits", + "DataBlock/MinorServoParameters"); + + if(!minor_servo_limits_table.addField(error, "MINOR_SERVO_X", IRA::CDataField::STRING)) + error.setExtra("code MINOR_SERVO_X not found", 0); + if(!minor_servo_limits_table.addField(error, "MINOR_SERVO_YP", IRA::CDataField::STRING)) + error.setExtra("code MINOR_SERVO_YP not found", 0); + if(!minor_servo_limits_table.addField(error, "MINOR_SERVO_Y", IRA::CDataField::STRING)) + error.setExtra("code MINOR_SERVO_Y not found", 0); + if(!minor_servo_limits_table.addField(error, "MINOR_SERVO_ZP", IRA::CDataField::STRING)) + error.setExtra("code MINOR_SERVO_ZP not found", 0); + if(!minor_servo_limits_table.addField(error, "MINOR_SERVO_Z1", IRA::CDataField::STRING)) + error.setExtra("code MINOR_SERVO_Z1 not found", 0); + if(!minor_servo_limits_table.addField(error, "MINOR_SERVO_Z2", IRA::CDataField::STRING)) + error.setExtra("code MINOR_SERVO_Z2 not found", 0); + if(!minor_servo_limits_table.addField(error, "MINOR_SERVO_Z3", IRA::CDataField::STRING)) + error.setExtra("code MINOR_SERVO_Z3 not found", 0); + IRA::CDBTable minor_servo_table(services, "MinorServo", "DataBlock/MinorServoParameters"); @@ -206,6 +239,78 @@ get_configuration_from_CDB(maci::ContainerServices* services) dummy.setDescription((const char*)error.getDescription()); throw dummy; } + + if(!minor_servo_limits_table.openTable(error)){ + _EXCPT_FROM_ERROR(ComponentErrors::CDBAccessExImpl, dummy, error); + throw dummy; + } + + minor_servo_limits_table.First(); + std::vector<double> limits; + + limits=parseLimitsLine ((const char*)minor_servo_limits_table["MINOR_SERVO_YP"]->asString()); + medMinorServoConstants->MINOR_SERVO_YP.name= "YP"; + medMinorServoConstants->MINOR_SERVO_YP.position_min= limits[0]; + medMinorServoConstants->MINOR_SERVO_YP.position_max= limits[1]; + medMinorServoConstants->MINOR_SERVO_YP.position_zero= limits[2]; + medMinorServoConstants->MINOR_SERVO_YP.position_error= limits[3]; + medMinorServoConstants->MINOR_SERVO_YP.speed_min= limits[4]; + medMinorServoConstants->MINOR_SERVO_YP.speed_max= limits[5]; + + limits=parseLimitsLine ((const char*)minor_servo_limits_table["MINOR_SERVO_ZP"]->asString()); + medMinorServoConstants->MINOR_SERVO_ZP.name= "ZP"; + medMinorServoConstants->MINOR_SERVO_ZP.position_min= limits[0]; + medMinorServoConstants->MINOR_SERVO_ZP.position_max= limits[1]; + medMinorServoConstants->MINOR_SERVO_ZP.position_zero= limits[2]; + medMinorServoConstants->MINOR_SERVO_ZP.position_error= limits[3]; + medMinorServoConstants->MINOR_SERVO_ZP.speed_min= limits[4]; + medMinorServoConstants->MINOR_SERVO_ZP.speed_max= limits[5]; + + limits=parseLimitsLine ((const char*)minor_servo_limits_table["MINOR_SERVO_X"]->asString()); + medMinorServoConstants->MINOR_SERVO_X.name= "X"; + medMinorServoConstants->MINOR_SERVO_X.position_min= limits[0]; + medMinorServoConstants->MINOR_SERVO_X.position_max= limits[1]; + medMinorServoConstants->MINOR_SERVO_X.position_zero= limits[2]; + medMinorServoConstants->MINOR_SERVO_X.position_error= limits[3]; + medMinorServoConstants->MINOR_SERVO_X.speed_min= limits[4]; + medMinorServoConstants->MINOR_SERVO_X.speed_max= limits[5]; + + limits=parseLimitsLine ((const char*)minor_servo_limits_table["MINOR_SERVO_Y"]->asString()); + medMinorServoConstants->MINOR_SERVO_Y.name= "Y"; + medMinorServoConstants->MINOR_SERVO_Y.position_min= limits[0]; + medMinorServoConstants->MINOR_SERVO_Y.position_max= limits[1]; + medMinorServoConstants->MINOR_SERVO_Y.position_zero= limits[2]; + medMinorServoConstants->MINOR_SERVO_Y.position_error= limits[3]; + medMinorServoConstants->MINOR_SERVO_Y.speed_min= limits[4]; + medMinorServoConstants->MINOR_SERVO_Y.speed_max= limits[5]; + + limits=parseLimitsLine ((const char*)minor_servo_limits_table["MINOR_SERVO_Z1"]->asString()); + medMinorServoConstants->MINOR_SERVO_Z1.name= "Z1"; + medMinorServoConstants->MINOR_SERVO_Z1.position_min= limits[0]; + medMinorServoConstants->MINOR_SERVO_Z1.position_max= limits[1]; + medMinorServoConstants->MINOR_SERVO_Z1.position_zero= limits[2]; + medMinorServoConstants->MINOR_SERVO_Z1.position_error= limits[3]; + medMinorServoConstants->MINOR_SERVO_Z1.speed_min= limits[4]; + medMinorServoConstants->MINOR_SERVO_Z1.speed_max= limits[5]; + + limits=parseLimitsLine ((const char*)minor_servo_limits_table["MINOR_SERVO_Z2"]->asString()); + medMinorServoConstants->MINOR_SERVO_Z2.name= "Z2"; + medMinorServoConstants->MINOR_SERVO_Z2.position_min= limits[0]; + medMinorServoConstants->MINOR_SERVO_Z2.position_max= limits[1]; + medMinorServoConstants->MINOR_SERVO_Z2.position_zero= limits[2]; + medMinorServoConstants->MINOR_SERVO_Z2.position_error= limits[3]; + medMinorServoConstants->MINOR_SERVO_Z2.speed_min= limits[4]; + medMinorServoConstants->MINOR_SERVO_Z2.speed_max= limits[5]; + + limits=parseLimitsLine ((const char*)minor_servo_limits_table["MINOR_SERVO_Z3"]->asString()); + medMinorServoConstants->MINOR_SERVO_Z3.name= "Z3"; + medMinorServoConstants->MINOR_SERVO_Z3.position_min= limits[0]; + medMinorServoConstants->MINOR_SERVO_Z3.position_max= limits[1]; + medMinorServoConstants->MINOR_SERVO_Z3.position_zero= limits[2]; + medMinorServoConstants->MINOR_SERVO_Z3.position_error= limits[3]; + medMinorServoConstants->MINOR_SERVO_Z3.speed_min= limits[4]; + medMinorServoConstants->MINOR_SERVO_Z3.speed_max= limits[5]; + if(!minor_servo_table.openTable(error)){ _EXCPT_FROM_ERROR(ComponentErrors::CDBAccessExImpl, dummy, error); throw dummy; @@ -230,12 +335,14 @@ get_configuration_from_CDB(maci::ContainerServices* services) (const char*)minor_servo_table["YPaxis"]->asString() ) ); + parameters.add_axis( parseAxisLine( "ZP", (const char*)minor_servo_table["ZPaxis"]->asString() ) ); + }else{ //secondary focus parameters.add_axis( parseAxisLine( @@ -243,12 +350,14 @@ get_configuration_from_CDB(maci::ContainerServices* services) (const char*)minor_servo_table["Xaxis"]->asString() ) ); + parameters.add_axis( parseAxisLine( "Y", (const char*)minor_servo_table["Yaxis"]->asString() ) ); + parameters.add_axis( parseAxisLine( "Z", diff --git a/Medicina/Servers/MedicinaMinorServo/src/testutils.cpp b/Medicina/Servers/MedicinaMinorServo/src/testutils.cpp index 476ef2aa6f3fa254c99f2afbb8e557d879ce6a52..27934eea5f1b2979a14989a96099131ce514825a 100644 --- a/Medicina/Servers/MedicinaMinorServo/src/testutils.cpp +++ b/Medicina/Servers/MedicinaMinorServo/src/testutils.cpp @@ -26,6 +26,8 @@ get_random_axis_value(const MedMinorServoAxis& axis) MEDMINORSERVOSTATUS get_random_status() { + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); + MEDMINORSERVOSTATUS status; int mode = std::rand() % 2; if(mode == 0) @@ -33,8 +35,8 @@ get_random_status() status.mode = 0; status.time = MedMinorServoTime::ACSToServoNow(); status.system_status = MED_MINOR_SERVO_STATUS_PRIMARY; - status.pos_x_yp = get_random_axis_value(MINOR_SERVO_YP); - status.pos_y_zp = get_random_axis_value(MINOR_SERVO_ZP); + status.pos_x_yp = get_random_axis_value(medMinorServoConstants->MINOR_SERVO_YP); + status.pos_y_zp = get_random_axis_value(medMinorServoConstants->MINOR_SERVO_ZP); status.pos_z1 = 0.0; status.pos_z2 = 0.0; status.pos_z3 = 0.0; @@ -42,11 +44,11 @@ get_random_status() status.mode = 1; status.time = MedMinorServoTime::ACSToServoNow(); status.system_status = MED_MINOR_SERVO_STATUS_SECONDARY; - status.pos_x_yp = get_random_axis_value(MINOR_SERVO_X); - status.pos_y_zp = get_random_axis_value(MINOR_SERVO_Y); - status.pos_z1 = get_random_axis_value(MINOR_SERVO_Z1); - status.pos_z2 = get_random_axis_value(MINOR_SERVO_Z2); - status.pos_z3 = get_random_axis_value(MINOR_SERVO_Z3); + status.pos_x_yp = get_random_axis_value(medMinorServoConstants->MINOR_SERVO_X); + status.pos_y_zp = get_random_axis_value(medMinorServoConstants->MINOR_SERVO_Y); + status.pos_z1 = get_random_axis_value(medMinorServoConstants->MINOR_SERVO_Z1); + status.pos_z2 = get_random_axis_value(medMinorServoConstants->MINOR_SERVO_Z2); + status.pos_z3 = get_random_axis_value(medMinorServoConstants->MINOR_SERVO_Z3); } return status; } @@ -54,12 +56,13 @@ get_random_status() MedMinorServoPosition get_random_primary_position() { + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); MEDMINORSERVOSTATUS status; status.mode = 0; status.time = MedMinorServoTime::ACSToServoNow(); status.system_status = MED_MINOR_SERVO_STATUS_PRIMARY; - status.pos_x_yp = get_random_axis_value(MINOR_SERVO_YP); - status.pos_y_zp = get_random_axis_value(MINOR_SERVO_ZP); + status.pos_x_yp = get_random_axis_value(medMinorServoConstants->MINOR_SERVO_YP); + status.pos_y_zp = get_random_axis_value(medMinorServoConstants->MINOR_SERVO_ZP); status.pos_z1 = 0.0; status.pos_z2 = 0.0; status.pos_z3 = 0.0; @@ -69,15 +72,16 @@ get_random_primary_position() MedMinorServoPosition get_random_secondary_position() { + MedMinorServoConstants *medMinorServoConstants = MedMinorServoConstants::getInstance(); MEDMINORSERVOSTATUS status; status.mode = 1; status.time = MedMinorServoTime::ACSToServoNow(); status.system_status = MED_MINOR_SERVO_STATUS_SECONDARY; - status.pos_x_yp = get_random_axis_value(MINOR_SERVO_X); - status.pos_y_zp = get_random_axis_value(MINOR_SERVO_Y); - status.pos_z1 = get_random_axis_value(MINOR_SERVO_Z1); - status.pos_z2 = get_random_axis_value(MINOR_SERVO_Z2); - status.pos_z3 = get_random_axis_value(MINOR_SERVO_Z3); + status.pos_x_yp = get_random_axis_value(medMinorServoConstants->MINOR_SERVO_X); + status.pos_y_zp = get_random_axis_value(medMinorServoConstants->MINOR_SERVO_Y); + status.pos_z1 = get_random_axis_value(medMinorServoConstants->MINOR_SERVO_Z1); + status.pos_z2 = get_random_axis_value(medMinorServoConstants->MINOR_SERVO_Z2); + status.pos_z3 = get_random_axis_value(medMinorServoConstants->MINOR_SERVO_Z3); return MedMinorServoGeometry::positionFromAxes(status); } diff --git a/Noto/CDB/alma/DataBlock/MMC/NormalModeSetup/NormalModeSetup.xml b/Noto/CDB/alma/DataBlock/MMC/NormalModeSetup/NormalModeSetup.xml index 234122febc550ece553b3b836b3bde6be3d8d627..c4b0eece4184934766370b21fea6ea365225a743 100644 --- a/Noto/CDB/alma/DataBlock/MMC/NormalModeSetup/NormalModeSetup.xml +++ b/Noto/CDB/alma/DataBlock/MMC/NormalModeSetup/NormalModeSetup.xml @@ -18,7 +18,7 @@ Feeds="1" IFs="2" Polarization="L R" - DefaultLO="6956.0 6956.0" + DefaultLO="6936.0 6936.0" LOMultiplier="1 1" FixedLO2="0.0 0.0" LOMin="5000.0 5000.0" diff --git a/Noto/CDB/alma/DataBlock/MinorServoParameters/MinorServoParameters.xml b/Noto/CDB/alma/DataBlock/MinorServoParameters/MinorServoParameters.xml index 923bdda5d46047318b3d14186986ae26d51817f9..366203c9aa2df06a39a67d11097f520ce8fb2bd9 100644 --- a/Noto/CDB/alma/DataBlock/MinorServoParameters/MinorServoParameters.xml +++ b/Noto/CDB/alma/DataBlock/MinorServoParameters/MinorServoParameters.xml @@ -8,12 +8,26 @@ xmlns:cdb="urn:schemas-cosylab-com:CDB:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <!-- + for each axis we specify name and characteristics as: + <NAME>position_min,position_max,position_zero,position_error,speed_min,speed_max</NAME> + --> + <MinorServoLimits> + <MINOR_SERVO_X>-80,80,0.0,0.05,0.01,14</MINOR_SERVO_X> + <MINOR_SERVO_YP>-5,395,0.0,0.05,0.01,8</MINOR_SERVO_YP> + <MINOR_SERVO_Y>-80,80,0.0,0.05,0.01,14</MINOR_SERVO_Y> + <MINOR_SERVO_ZP>-5,345,0.0,0.05,0.01,8</MINOR_SERVO_ZP> + <MINOR_SERVO_Z1>-125,125,0.0,0.05,0.01,14</MINOR_SERVO_Z1> + <MINOR_SERVO_Z2>-125,125,0.0,0.05,0.01,14</MINOR_SERVO_Z2> + <MINOR_SERVO_Z3>-125,125,0.0,0.05,0.01,14</MINOR_SERVO_Z3> + </MinorServoLimits> + <MinorServo> <code>SEC</code> <primary>0</primary> <trackel>1</trackel> <!-- - for each axis we sepcify name an scharacteristics as: + for each axis we specify name and characteristics as: <NAME>unit,min,max,pol0,pol1,pol2,pol3,pol4</NAME> diff --git a/Noto/Configuration/CDB/alma/DataBlock/MinorServoParameters/MinorServoParameters.xml b/Noto/Configuration/CDB/alma/DataBlock/MinorServoParameters/MinorServoParameters.xml index 923bdda5d46047318b3d14186986ae26d51817f9..366203c9aa2df06a39a67d11097f520ce8fb2bd9 100644 --- a/Noto/Configuration/CDB/alma/DataBlock/MinorServoParameters/MinorServoParameters.xml +++ b/Noto/Configuration/CDB/alma/DataBlock/MinorServoParameters/MinorServoParameters.xml @@ -8,12 +8,26 @@ xmlns:cdb="urn:schemas-cosylab-com:CDB:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <!-- + for each axis we specify name and characteristics as: + <NAME>position_min,position_max,position_zero,position_error,speed_min,speed_max</NAME> + --> + <MinorServoLimits> + <MINOR_SERVO_X>-80,80,0.0,0.05,0.01,14</MINOR_SERVO_X> + <MINOR_SERVO_YP>-5,395,0.0,0.05,0.01,8</MINOR_SERVO_YP> + <MINOR_SERVO_Y>-80,80,0.0,0.05,0.01,14</MINOR_SERVO_Y> + <MINOR_SERVO_ZP>-5,345,0.0,0.05,0.01,8</MINOR_SERVO_ZP> + <MINOR_SERVO_Z1>-125,125,0.0,0.05,0.01,14</MINOR_SERVO_Z1> + <MINOR_SERVO_Z2>-125,125,0.0,0.05,0.01,14</MINOR_SERVO_Z2> + <MINOR_SERVO_Z3>-125,125,0.0,0.05,0.01,14</MINOR_SERVO_Z3> + </MinorServoLimits> + <MinorServo> <code>SEC</code> <primary>0</primary> <trackel>1</trackel> <!-- - for each axis we sepcify name an scharacteristics as: + for each axis we specify name and characteristics as: <NAME>unit,min,max,pol0,pol1,pol2,pol3,pol4</NAME> diff --git a/Noto/Errors/NotoActiveSurfaceErrors/ChangeLog b/Noto/Errors/NotoActiveSurfaceErrors/ChangeLog deleted file mode 100644 index a6bf091b522213900a055a4eb1a126d8732a01fb..0000000000000000000000000000000000000000 --- a/Noto/Errors/NotoActiveSurfaceErrors/ChangeLog +++ /dev/null @@ -1 +0,0 @@ -"@(#) $Id$" diff --git a/Noto/Errors/NotoActiveSurfaceErrors/idl/ASErrors.xml b/Noto/Errors/NotoActiveSurfaceErrors/idl/ASErrors.xml deleted file mode 100644 index b6edadb30b592e36acf4c1b7940438d0ac40d4c2..0000000000000000000000000000000000000000 --- a/Noto/Errors/NotoActiveSurfaceErrors/idl/ASErrors.xml +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0" encoding="ISO-8859-1"?> -<!-- - - $Id: ASErrors.xml,v 1.1 2011-03-24 09:01:20 c.migoni Exp $ - - Author: Giuseppe Maccaferri - - - - History: - - 18-01-2005 Created - - 14-09-2005 Added error memebers - - 12-05-2008 Added TrackingNotStarted error code - - 16-07-2008 Modified for ACS7.0.1 ---> - -<Type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns="Alma/ACSError" xsi:noNamespaceSchemaLocation="Alma/ACSError ACSError.xsd" - name="ASErrors" type="2003" _prefix="alma"> - - <Code name="NoError" shortDescription="No error" description="No error condition found"/> - <ErrorCode name="USDCalibrated" shortDescription=" " description="USD succesful calibrated"> - <Member name="CammaLen" type="double" description="Length of camma-on window"/> - <Member name="CammaPos" type="double" description="Distance from top edge of the middle camma-on window"/> - </ErrorCode> - <ErrorCode name="LibrarySocketError" shortDescription="Socket error. Critical" description="Error encountered while creating or accessing socket resource" /> - <ErrorCode name="SocketReconn" shortDescription="Socket reconnected. Warning" description="Socket was broken. Reconnected successfully"/> - <ErrorCode name="SocketFail" shortDescription="Unrecoverable socket problems. Critical" description="The socket connection could not be re established"/> - <ErrorCode name="SocketTOut" shortDescription="Time out writing to socket. Critical" description="Time out writing to socket. Critical"/> - <ErrorCode name="SocketNotRdy" shortDescription="Unable to allocate socket resource. Error" description="Unable to allocate socket resource. Error"/> - <ErrorCode name="MemoryAllocation" shortDescription="Buffer can't be allocated. Error" description="Buffer can't be allocated. Error"/> - <ErrorCode name="LANConnectionError" shortDescription="LAN/485 converter is not reachable or disconnected" description="LAN/485 converter is not reachable or disconnected"/> - <ErrorCode name="LAN_Unavailable" shortDescription="The LAN component is unavailable" description="The LAN component is unavailable"/> - <ErrorCode name="sendCmdErr" shortDescription="sendCmd() returned a wrong code. Error" description="sendCmd() returned a wrong code. Error"/> - <ErrorCode name="Incomplete" shortDescription="Incomplete reply from USD. Warning" description="Incomplete reply from USD. Warning"/> - <ErrorCode name="InvalidResponse" shortDescription="USD returned an invalid acknowledge code. Error" description="USD returned an invalid acknowledge code. Error"/> - <ErrorCode name="Nak" shortDescription="USD does not acknowledge last command.Warning" description="USD does not acknowledge last command.Warning"/> - <ErrorCode name="CDBAccessError" shortDescription="Error while accessing the Configuration Database.Error" description="Error while accessing the Configuration Database.Error"> - <Member name="FieldName" type="string" description="FiledName"/> - </ErrorCode> - <ErrorCode name="USDConnectionError" shortDescription="USD is not reachable or disconnected.Critical" description="USD is not reachable or disconnected.Critical"/> - <ErrorCode name="USDTimeout" shortDescription=" " description="Timeout on receive data from USD.Critical"> - <Member name="which" type="string" description="the usd location"/> - </ErrorCode> - <ErrorCode name="USDUnavailable" shortDescription="USD no more available.Warning" description="USD no more available.Warning"/> - <ErrorCode name="USDError" shortDescription="generic USD error executing an action.Error" description="generic USD error executing an action.Error"/> - <ErrorCode name="DevIOError" shortDescription="USD error reading or writing a property.Error" description="USD error reading or writing a property.Error"> - <Member name="property" type="string" description="Name of the property"/> -</ErrorCode> - <ErrorCode name="corbaError" shortDescription="CORBA system exception executing an action.Error" description="CORBA system exception executing an action.Error"/> - <ErrorCode name="USDStillRunning" shortDescription="USD still running while shouldn't be!.Error" description="USD still running while shouldn't be!.Error"/> - <ErrorCode name="USDunCalibrated" shortDescription="USD not calibrated.Warning" description="USD not calibrated.Warning"/> - <ErrorCode name="CannotGetUSD" shortDescription="USD not activated.Warning" description="USD not activated.Warning"/> - </Type> diff --git a/Noto/Errors/NotoActiveSurfaceErrors/src/Makefile b/Noto/Errors/NotoActiveSurfaceErrors/src/Makefile deleted file mode 100644 index 1459ae3e49f5080c708016ea842052596df0605d..0000000000000000000000000000000000000000 --- a/Noto/Errors/NotoActiveSurfaceErrors/src/Makefile +++ /dev/null @@ -1,249 +0,0 @@ -#******************************************************************************* -# E.S.O. - ACS project -# -# "@(#) $Id: Makefile,v 1.1 2011-03-24 09:01:32 c.migoni Exp $" -# -# Makefile of lan -# -# who when what -# -------- -------- ---------------------------------------------- -# almaprog 04/08/04 created -# - -#******************************************************************************* -# This Makefile follows VLT Standards (see Makefile(5) for more). -#******************************************************************************* -# REMARKS -# None -#------------------------------------------------------------------------ - -# -# user definable C-compilation flags -#USER_CFLAGS = - -# -# additional include and library search paths -#USER_INC = -#USER_LIB = -USER_LIB = -lACE \ - -lTAO \ - -lTAO_DsLogAdmin \ - -lTAO_CosNaming \ - -lTAO_IORTable \ - -lTAO_PortableServer \ - -lTAO_Svc_Utils \ - -lTAO_CosTrading \ - -lTAO_CosNotification \ - -lTAO_DynamicAny \ - -lTAO_IFR_Client \ - -lTAO_CosProperty \ - -lacsutil \ - -lcdb \ - -llogging \ - -lacscomponent \ - -lbaci \ - -lmaci \ - -lmaciClient \ - -lacserr \ - -lm \ - -lloki \ - -lACSErrTypeCommon - - -# -# MODULE CODE DESCRIPTION: -# ------------------------ -# As a general rule: public file are "cleaned" and "installed" -# local (_L) are not "installed". - -# -# C programs (public and local) -# ----------------------------- -EXECUTABLES = -EXECUTABLES_L = - -# -# <brief description of xxxxx program> -xxxxx_LDFLAGS = - -# -# special compilation flags for single c sources -#yyyyy_CFLAGS = - -# -# Includes (.h) files (public only) -# ---------------------------------lanSocket.h -INCLUDES = - -# -# Libraries (public and local) -# ---------------------------- -LIBRARIES = -LIBRARIES_L = -# -# <brief description of lllll library> -#lanImpl_OBJECTS = lanImpl lanSocket -#lanImpl_LIBS= lanStubs IRALibrary ASErrors -# -# error file -# ---------------------------- -ACSERRDEF= ASErrors - -# -# Scripts (public and local) -# ---------------------------- -SCRIPTS = -SCRIPTS_L = - -# -# TCL scripts (public and local) -# ------------------------------ -TCL_SCRIPTS = -TCL_SCRIPTS_L = - -# -# Python stuff (public and local) -# ---------------------------- -PY_SCRIPTS = -PY_SCRIPTS_L = - -PY_MODULES = -PY_MODULES_L = - -PY_PACKAGES = -PY_PACKAGES_L = -pppppp_MODULES = - -# -# <brief description of tttttt tcl-script> -tttttt_OBJECTS = -tttttt_TCLSH = -tttttt_LIBS = - -# -# TCL libraries (public and local) -# ------------------------------ -TCL_LIBRARIES = -TCL_LIBRARIES_L = - -# -# <brief description of tttlll library> -tttlll_OBJECTS = - -# -# Configuration Database Files -# ---------------------------- -CDB_SCHEMAS = - -# -# IDL Files and flags -# -IDL_FILES = -IDL_TAO_FLAGS = -USER_IDL = -# -# Jarfiles and their directories -# - -JARFILES= -jjj_DIRS= -jjj_EXTRAS= -# -# java sources in Jarfile on/off -DEBUG= -# -# ACS XmlIdl generation on/off -# -XML_IDL= -# -# Java Component Helper Classes generation on/off -# -COMPONENT_HELPERS= -# -# Java Entity Classes generation on/off -# -XSDBIND= -# -# Schema Config files for the above -# -XSDBIND_INCLUDE= -# man pages to be done -# -------------------- -MANSECTIONS = -MAN1 = -MAN3 = -MAN5 = -MAN7 = -MAN8 = - -# -# local man pages -# --------------- -MANl = - -# -# ASCII file to be converted into Framemaker-MIF -# -------------------- -ASCII_TO_MIF = - -# -# other files to be installed -#---------------------------- -INSTALL_FILES = - -# -# list of all possible C-sources (used to create automatic dependencies) -# ------------------------------ -CSOURCENAMES = \ - $(foreach exe, $(EXECUTABLES) $(EXECUTABLES_L), $($(exe)_OBJECTS)) \ - $(foreach rtos, $(RTAI_MODULES) , $($(rtos)_OBJECTS)) \ - $(foreach lib, $(LIBRARIES) $(LIBRARIES_L), $($(lib)_OBJECTS)) - -# -#>>>>> END OF standard rules - -# -# INCLUDE STANDARDS -# ----------------- - -ifdef ACSROOT - MAKEDIR = $(shell if [ -f $(INTROOT)/include/acsMakefile ]; then \ - echo $(INTROOT)/include; \ - else \ - echo $(ACSROOT)/include; \ - fi;) - include $(MAKEDIR)/acsMakefile -else - MAKEDIR = $(shell if [ -f $(INTROOT)/include/vltMakefile ]; then \ - echo $(INTROOT)/include; \ - else \ - echo $(VLTROOT)/include; \ - fi;) - include $(MAKEDIR)/vltMakefile -endif - -# -# TARGETS -# ------- -all: do_all - @echo " . . . 'all' done" - -clean : clean_all - @echo " . . . clean done" - -clean_dist : clean_all clean_dist_all - @echo " . . . clean_dist done" - -man : do_man - @echo " . . . man page(s) done" - -install : install_all - @echo " . . . installation done" - -db : db_all - @echo " . . . ../DB done" - -cln~ : - find ../ -name "*~" -exec rm '{}' \; - -#___oOo___ diff --git a/Noto/Interfaces/NotoActiveSurfaceInterface/idl/lan.idl b/Noto/Interfaces/NotoActiveSurfaceInterface/idl/lan.idl deleted file mode 100644 index 9d683eb67309dbadf062d94c6adf1e5918f47413..0000000000000000000000000000000000000000 --- a/Noto/Interfaces/NotoActiveSurfaceInterface/idl/lan.idl +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef _lan_IDL_ -#define _lan_IDL_ -/** -* $Id: lan.idl,v 1.1 2009-05-21 15:31:12 c.migoni Exp $ -*/ - -#include <baci.idl> -#include <ASErrors.idl> - - -#pragma prefix "alma" - - -module ActiveSurface -{ - /** @interface lan - * This interface rappresents the module converting comunications from serial to lan. - * A chain of AS actuator device are linked toghether by a serial 485 line.The serial stream is converted to lan packets. - * A chain rappresents a radius of paraboloid. - * the component is istantiated the first time is requested. The a pointer to itself is passed to all the subsequent USD requiring it. - */ - interface lan : ACS::CharacteristicComponent - { - - /** - * send a command to adressed USD. - * @param cmd(in) the command. - * @param addr(in) the serial address. - * @param param(in) the optional parameters(max 4 byte). - * @param nBytes(in) the lenght of param. - * - * @return a completion w/o the errors - */ - ACSErr::Completion sendUSDCmd(in long cmd,in long addr, in long param, in long nBytes); - - /** - * retrive a parameter from adressed USD. - * @param cmd(in) the command. - * @param addr(in) the serial address. - * @param nBytes(in) the lenght of param. - * @param param(out) the optional parameters(max 4 byte). - * - * @throw ASErrors::ASErrorsEx in case of error. - */ - void recUSDPar(in long cmd,in long addr,in long nBytes,out long param) raises (ASErrors::ASErrorsEx); - - readonly attribute ACS::RWdouble delay ; - readonly attribute ACS::ROlong status; - }; - -}; -#endif /* _lan_ */ diff --git a/Noto/Interfaces/NotoActiveSurfaceInterface/idl/usd.idl b/Noto/Interfaces/NotoActiveSurfaceInterface/idl/usd.idl deleted file mode 100644 index 046d7840fa90cfe936c593621293da81aa72dfa8..0000000000000000000000000000000000000000 --- a/Noto/Interfaces/NotoActiveSurfaceInterface/idl/usd.idl +++ /dev/null @@ -1,191 +0,0 @@ -#ifndef _USD_IDL_ -#define _USD_IDL_ - -/******************************************************************************* -* "@(#) $Id: usd.idl,v 1.2 2010-07-26 12:34:49 c.migoni Exp $" -* -* who when what -* -------- -------- ---------------------------------------------- -* GMM sept 2005 creation -* CM jan 2013 ACS 8.0.1 adaptions -* CM jan 2013 All code revised and adapted to be used from SRTActiveSurfaceBoss component -* CM jan 2013 calibrate and calVer routines transformed to oneway -*/ - -#include <baci.idl> -#include <ASErrors.idl> - -#pragma prefix "alma" - -module ActiveSurface -{ - - /** @interface USD - * This interface rappresents a single AS actuator device. - * It provides property rapresenting all the actuators variable and methods - * implementing the most usefull action that an actuator (USD) can do. - */ - interface USD : ACS::CharacteristicComponent - { - - /** - * the on-reply delay. - * Usd has a timer for the delay between the last received byte and the transmitter activation. The default is often not enaugh. - */ - readonly attribute ACS::RWlong delay; - - /** - * the last commanded absolute position (ustep) - */ - readonly attribute ACS::RWlong cmdPos; - - - /** - * the starting velocity (Hz, means step/sec) - */ - readonly attribute ACS::RWlong Fmin; - - /** - * the duty velocity (Hz, means step/sec) - * the max speed is 10KHZ - */ - readonly attribute ACS::RWlong Fmax; - - /** - * the acceleration factor. - * Usd has a minimal internal acceleration ramp of ~100KHz/sec. - * This number relax the base ramp of factor+1 times, - * i.e. 99 means an acceleration of 1KHz/sec - */ - readonly attribute ACS::RWlong acc; - - /** - * configure the USD users bits - */ - readonly attribute ACS::RWlong uBits; - - /** - * last minute correction - */ - readonly attribute ACS::RWdouble lmCorr; - - /** - * the actual absolute position (ustep) - */ - readonly attribute ACS::ROlong actPos; - - /** - * the status of USD. - * byte 2: unused.\n - * byte 1: n.u.(MSB),DIO2,DIO1,DIO0,n.u.,fault,driv_on,zero. \n - * byte 0: run(MSB),differ_exec,ready,stnby,auto,RS2,RS1,RS0. \n - */ - readonly attribute ACS::ROpattern status; - - /** - * the USD software version (must be 1.3). - * this command is often use to check the USD availability - */ - readonly attribute ACS::ROlong softVer; - - /** - * the USD type (must be 0x21 USD60xxx) - */ - readonly attribute ACS::ROlong type; - - /** - * gravity correction - */ - readonly attribute ACS::RWdouble gravCorr; - - /** - * user offset - */ - readonly attribute ACS::RWdouble userOffset; - - /** - * stop immediate with ramp - */ - oneway void stop(); - - /** - * soft reset of USD. - * The position counter will be resetted and the link will restart at 9600bps - */ - void reset(); - - /** - * move up(out) and down(in) the actuator untill a stop. - * the command must be sent only when motor is stopped - */ - oneway void up(); - oneway void down(); - - /** - * move relative to actual position of an amount of ustep. - * @param incr the amount to move in ustep. negative number means move down(in). - */ - oneway void move(in long incr); - - /** - * makes the scale calibration. USD must be against the upper edge. - * @return - */ - //ACSErr::Completion calibrate() raises (ASErrors::ASErrorsEx); - oneway void calibrate(); - - /** - * makes the scale verification. - * @return a completion with the result of verification - * @throw ASErrors::USDUnavailableEx or ASErrors::USDunCalibratedEx if the USD is not available or calibrated. - */ - //ACSErr::Completion calVer() raises (ASErrors::ASErrorsEx); - oneway void calVer(); - - /** - * writes calibration results into CDB - */ - void writeCalibration(out double cammaLenD, out double cammaPosD, out boolean calibrate) raises (ASErrors::ASErrorsEx); - - /** - * sets actuators corrections table - */ - void posTable (in ACS::doubleSeq actuatorsCorrections, in long parPositions, in double deltaEL, in long threshold); - - /** - * go to reference position. - * @return - */ - oneway void refPos(); - - /** - * set the profile, 0 shaped, 1 parabolic, 2 parabolic fixed. - */ - void setProfile(in long prof) raises (ASErrors::ASErrorsEx); - - /** - * set the last minute corrections. - */ - oneway void correction(in double corr); - - /** - * recalculates the gravity and user corrections based on antenna elevation. - */ - oneway void update(in double elev); - /* oneway void update(in long position); */ - - /** - * stow and setup - */ - oneway void stow(); - oneway void setup(); - - /** - * move to most top or bottom positions. These are reached in subsequent movements of maxRun lenght - */ - oneway void top(); - oneway void bottom(); - }; - -}; -#endif /* _USD_ */ diff --git a/Noto/Interfaces/NotoActiveSurfaceInterface/src/Makefile b/Noto/Interfaces/NotoActiveSurfaceInterface/src/Makefile index bd5ef11443ec465ee0433f29e9660e95bde3a08a..68dbbaf59573277205d58899c4b75b2746754d41 100644 --- a/Noto/Interfaces/NotoActiveSurfaceInterface/src/Makefile +++ b/Noto/Interfaces/NotoActiveSurfaceInterface/src/Makefile @@ -130,13 +130,12 @@ CDB_SCHEMAS = # # IDL Files and flags # -#IDL_FILES = lan usd SRTActiveSurfaceBoss IDL_FILES = NotoActiveSurfaceBoss IDL_TAO_FLAGS = USER_IDL = NotoActiveSurfaceBossStubs_LIBS = baciStubs ComponentErrorsStubs ASErrorsStubs \ - ManagmentDefinitionsStubs ActiveSurfaceBossStubs + ManagmentDefinitionsStubs ActiveSurfaceBossStubs ActiveSurfaceCommonStubs # # Jarfiles and their directories