From d6a9d1262ceeb427193cfdeffb81a6caa8ef888c Mon Sep 17 00:00:00 2001 From: marco-buttu Date: Wed, 26 Feb 2020 17:15:01 +0000 Subject: [PATCH] Fix issue #518 --- .../include/MFKBandBaseConf.h | 10 +++++++ .../include/MFKBandBaseCore.h | 20 ++++++------- .../src/MFKBandBaseCore.cpp | 28 +++++++++++++----- .../include/DevIOCryoTemperatureCoolHead.h | 5 ++-- .../DevIOCryoTemperatureCoolHeadWindow.h | 5 ++-- .../include/DevIOCryoTemperatureLNA.h | 5 ++-- .../include/DevIOCryoTemperatureLNAWindow.h | 5 ++-- .../include/DevIOEnvTemperature.h | 5 ++-- .../SRT7GHzReceiver/include/ComponentCore.h | 20 ++++++------- .../SRT7GHzReceiver/include/Configuration.h | 10 +++++++ .../include/DevIOCryoTemperatureCoolHead.h | 5 ++-- .../DevIOCryoTemperatureCoolHeadWindow.h | 5 ++-- .../include/DevIOCryoTemperatureLNA.h | 5 ++-- .../include/DevIOCryoTemperatureLNAWindow.h | 5 ++-- .../include/DevIOEnvTemperature.h | 5 ++-- .../SRT7GHzReceiver/src/ComponentCore.cpp | 27 +++++++++++++---- .../include/DevIOCryoTemperatureCoolHead.h | 8 +++-- .../DevIOCryoTemperatureCoolHeadWindow.h | 6 ++-- .../include/DevIOCryoTemperatureLNA.h | 6 ++-- .../include/DevIOCryoTemperatureLNAWindow.h | 6 ++-- .../include/DevIOEnvTemperature.h | 6 ++-- .../SRTLPBandReceiver/include/ComponentCore.h | 20 ++++++------- .../SRTLPBandReceiver/include/Configuration.h | 9 ++++++ .../include/DevIOCryoTemperatureCoolHead.h | 5 ++-- .../DevIOCryoTemperatureCoolHeadWindow.h | 5 ++-- .../include/DevIOCryoTemperatureLNA.h | 5 ++-- .../include/DevIOCryoTemperatureLNAWindow.h | 5 ++-- .../include/DevIOEnvTemperature.h | 5 ++-- .../SRTLPBandReceiver/src/ComponentCore.cpp | 29 +++++++++++++------ 29 files changed, 188 insertions(+), 92 deletions(-) diff --git a/Common/Servers/MFKBandBaseReceiver/include/MFKBandBaseConf.h b/Common/Servers/MFKBandBaseReceiver/include/MFKBandBaseConf.h index 90763060a..06a2bb210 100644 --- a/Common/Servers/MFKBandBaseReceiver/include/MFKBandBaseConf.h +++ b/Common/Servers/MFKBandBaseReceiver/include/MFKBandBaseConf.h @@ -22,6 +22,10 @@ #include #include "MFKBandBaseUtils.h" +// Temperature dummy value to use in case of Connection Error +#define CEDUMMY 100000 + + /** * This class implements the component configuration. The data inside this class are initialized at the startup from the * configuration database and then are used (read) inside the component. @@ -55,6 +59,12 @@ public: double relativePower; } TFeedValue; + typedef struct { + double temperature; + ACS::Time timestamp; + } BoardValue; + + /** * Default constructor */ diff --git a/Common/Servers/MFKBandBaseReceiver/include/MFKBandBaseCore.h b/Common/Servers/MFKBandBaseReceiver/include/MFKBandBaseCore.h index 3da354384..c60049b25 100644 --- a/Common/Servers/MFKBandBaseReceiver/include/MFKBandBaseCore.h +++ b/Common/Servers/MFKBandBaseReceiver/include/MFKBandBaseCore.h @@ -329,35 +329,35 @@ public: * This is getter method. No need to make it thread safe...... * @return the current value of the cryogenic temperature at cool head in °K */ - double getCryoCoolHead() const { return m_cryoCoolHead; } + CConfiguration::BoardValue getCryoCoolHead() const { return m_cryoCoolHead; } /** * This is getter method. No need to make it thread safe...... * @return the current value of the cryogenic temperature at cool head window in °K */ - double getCryoCoolHeadWin() const { return m_cryoCoolHeadWin; } + CConfiguration::BoardValue getCryoCoolHeadWin() const { return m_cryoCoolHeadWin; } /** * This is getter method. No need to make it thread safe...... * @return the current value of the cryogenic temperature at LNA in °K */ - double getCryoLNA() const { return m_cryoLNA; } + CConfiguration::BoardValue getCryoLNA() const { return m_cryoLNA; } /** * This is getter method. No need to make it thread safe...... * @return the current value of the cryogenic temperature at LNA window in °K */ - double getCryoLNAWin() const { return m_cryoLNAWin; } + CConfiguration::BoardValue getCryoLNAWin() const { return m_cryoLNAWin; } /** * This is getter method. No need to make it thread safe...... * @return the current vertex temperature in °K */ - double getVertexTemperature() const { return m_envTemperature; } + CConfiguration::BoardValue getVertexTemperature() const { return m_envTemperature; } /** @@ -547,12 +547,12 @@ protected: ACS::doubleSeq m_startFreq; ACS::doubleSeq m_bandwidth; IRA::CString m_setupMode; - double m_envTemperature; double m_vacuum; - double m_cryoCoolHead; - double m_cryoCoolHeadWin; - double m_cryoLNA; - double m_cryoLNAWin; + CConfiguration::BoardValue m_envTemperature; + CConfiguration::BoardValue m_cryoCoolHead; + CConfiguration::BoardValue m_cryoCoolHeadWin; + CConfiguration::BoardValue m_cryoLNA; + CConfiguration::BoardValue m_cryoLNAWin; double m_vacuumDefault; bool m_calDiode; diff --git a/Common/Servers/MFKBandBaseReceiver/src/MFKBandBaseCore.cpp b/Common/Servers/MFKBandBaseReceiver/src/MFKBandBaseCore.cpp index 365be3eb5..26a8818e5 100644 --- a/Common/Servers/MFKBandBaseReceiver/src/MFKBandBaseCore.cpp +++ b/Common/Servers/MFKBandBaseReceiver/src/MFKBandBaseCore.cpp @@ -22,8 +22,12 @@ void CComponentCore::initialize(maci::ContainerServices* services) m_control=NULL; m_localOscillatorDevice=Receivers::LocalOscillator::_nil(); m_localOscillatorFault=false; - m_cryoCoolHead=m_cryoCoolHeadWin= m_cryoLNA=m_cryoLNAWin=m_vacuum=0.0; - m_envTemperature=20.0; + m_cryoCoolHeadWin.temperature = 0.0; + m_cryoLNA.temperature = 0.0; + m_cryoLNAWin.temperature = 0.0; + m_cryoCoolHead.temperature = 0.0; + m_envTemperature.temperature = 20.0; + m_vacuum=0.0; m_fetValues.VDL=m_fetValues.IDL=m_fetValues.VGL=m_fetValues.VDR=m_fetValues.IDR=m_fetValues.VGR=0.0; m_statusWord=0; m_ioMarkError = false; @@ -1027,9 +1031,11 @@ void CComponentCore::updateCryoCoolHead() throw (ReceiversErrors::ReceiverContro { // Not under the mutex protection because the m_control object is thread safe (at the micro controller board stage) try { - m_cryoCoolHead=m_control->cryoTemperature(0,voltage2Kelvin); + m_cryoCoolHead.temperature = m_control->cryoTemperature(0,voltage2Kelvin); + m_cryoCoolHead.timestamp = getTimeStamp(); } catch (IRA::ReceiverControlEx& ex) { + m_cryoCoolHead.temperature = CEDUMMY; _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl,impl,"CComponentCore::updateCryoCoolHead()"); impl.setDetails(ex.what().c_str()); setStatusBit(CONNECTIONERROR); @@ -1043,9 +1049,11 @@ void CComponentCore::updateCryoCoolHeadWin() throw (ReceiversErrors::ReceiverCon { // Not under the mutex protection because the m_control object is thread safe (at the micro controller board stage) try { - m_cryoCoolHeadWin=m_control->cryoTemperature(1,voltage2Kelvin); + m_cryoCoolHeadWin.temperature = m_control->cryoTemperature(1,voltage2Kelvin); + m_cryoCoolHeadWin.timestamp = getTimeStamp(); } catch (IRA::ReceiverControlEx& ex) { + m_cryoCoolHeadWin.temperature = CEDUMMY; _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl,impl,"CComponentCore::updateCryoCoolHeadWin()"); impl.setDetails(ex.what().c_str()); setStatusBit(CONNECTIONERROR); @@ -1059,9 +1067,11 @@ void CComponentCore::updateCryoLNA() throw (ReceiversErrors::ReceiverControlBoar { // Not under the mutex protection because the m_control object is thread safe (at the micro controller board stage) try { - m_cryoLNA=m_control->cryoTemperature(3,voltage2Kelvin); + m_cryoLNA.temperature = m_control->cryoTemperature(3,voltage2Kelvin); + m_cryoLNA.timestamp = getTimeStamp(); } catch (IRA::ReceiverControlEx& ex) { + m_cryoLNA.temperature = CEDUMMY; _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl,impl,"CComponentCore::updateCryoLNA()"); impl.setDetails(ex.what().c_str()); setStatusBit(CONNECTIONERROR); @@ -1075,9 +1085,11 @@ void CComponentCore::updateCryoLNAWin() throw (ReceiversErrors::ReceiverControlB { // Not under the mutex protection because the m_control object is thread safe (at the micro controller board stage) try { - m_cryoLNAWin=m_control->cryoTemperature(4,voltage2Kelvin); + m_cryoLNAWin.temperature = m_control->cryoTemperature(4,voltage2Kelvin); + m_cryoLNAWin.timestamp = getTimeStamp(); } catch (IRA::ReceiverControlEx& ex) { + m_cryoLNAWin.temperature = CEDUMMY; _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl,impl,"CComponentCore::updateCryoLNAWin()"); impl.setDetails(ex.what().c_str()); setStatusBit(CONNECTIONERROR); @@ -1091,9 +1103,11 @@ void CComponentCore::updateVertexTemperature() throw (ReceiversErrors::ReceiverC { // Not under the mutex protection because the m_control object is thread safe (at the micro controller board stage) try { - m_envTemperature =m_control->vertexTemperature(voltage2Celsius); + m_envTemperature.temperature = m_control->vertexTemperature(voltage2Celsius); + m_envTemperature.timestamp = getTimeStamp(); } catch (IRA::ReceiverControlEx& ex) { + m_envTemperature.temperature = CEDUMMY; _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl,impl,"CComponentCore::updateVertexTemperature()"); impl.setDetails(ex.what().c_str()); setStatusBit(CONNECTIONERROR); diff --git a/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureCoolHead.h b/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureCoolHead.h index 3de389a51..dbe0ca39d 100644 --- a/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureCoolHead.h +++ b/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureCoolHead.h @@ -54,8 +54,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getCryoCoolHead(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getCryoCoolHead(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** diff --git a/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureCoolHeadWindow.h b/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureCoolHeadWindow.h index f7a7337b0..60926f013 100644 --- a/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureCoolHeadWindow.h +++ b/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureCoolHeadWindow.h @@ -54,8 +54,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getCryoCoolHeadWin(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getCryoCoolHeadWin(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** diff --git a/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureLNA.h b/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureLNA.h index cf8722777..23ec8fd12 100644 --- a/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureLNA.h +++ b/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureLNA.h @@ -56,8 +56,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getCryoLNA(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getCryoLNA(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** diff --git a/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureLNAWindow.h b/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureLNAWindow.h index 3ad24005e..a03d53720 100644 --- a/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureLNAWindow.h +++ b/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureLNAWindow.h @@ -54,8 +54,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getCryoLNAWin(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getCryoLNAWin(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** diff --git a/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOEnvTemperature.h b/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOEnvTemperature.h index 7bafa6fc1..3d4fe791b 100644 --- a/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOEnvTemperature.h +++ b/Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOEnvTemperature.h @@ -48,8 +48,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val = m_pCore->getVertexTemperature(); - timestamp = getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getVertexTemperature(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } diff --git a/SRT/Servers/SRT7GHzReceiver/include/ComponentCore.h b/SRT/Servers/SRT7GHzReceiver/include/ComponentCore.h index c090d68a0..36f3a4a35 100644 --- a/SRT/Servers/SRT7GHzReceiver/include/ComponentCore.h +++ b/SRT/Servers/SRT7GHzReceiver/include/ComponentCore.h @@ -268,31 +268,31 @@ public: * This is getter method. No need to make it thread safe...... * @return the current value of the cryogenic temperature at cool head in °K */ - double getCryoCoolHead() const { return m_cryoCoolHead; } + CConfiguration::BoardValue getCryoCoolHead() const { return m_cryoCoolHead; } /** * This is getter method. No need to make it thread safe...... * @return the current value of the cryogenic temperature at cool head window in °K */ - double getCryoCoolHeadWin() const { return m_cryoCoolHeadWin; } + CConfiguration::BoardValue getCryoCoolHeadWin() const { return m_cryoCoolHeadWin; } /** * This is getter method. No need to make it thread safe...... * @return the current value of the cryogenic temperature at LNA in °K */ - double getCryoLNA() const { return m_cryoLNA; } + CConfiguration::BoardValue getCryoLNA() const { return m_cryoLNA; } /** * This is getter method. No need to make it thread safe...... * @return the current value of the cryogenic temperature at LNA window in °K */ - double getCryoLNAWin() const { return m_cryoLNAWin; } + CConfiguration::BoardValue getCryoLNAWin() const { return m_cryoLNAWin; } /** * This is getter method. No need to make it thread safe...... * @return the current value of the vertex temperature */ - double getEnvironmentTemperature() const { return m_environmentTemperature; } + CConfiguration::BoardValue getEnvironmentTemperature() const { return m_environmentTemperature; } /** * This is getter method. No need to make it thread safe...... @@ -405,12 +405,12 @@ private: ACS::longSeq m_polarization; IRA::CString m_setupMode; double m_vacuum; - double m_cryoCoolHead; - double m_cryoCoolHeadWin; - double m_cryoLNA; - double m_cryoLNAWin; + CConfiguration::BoardValue m_cryoCoolHead; + CConfiguration::BoardValue m_cryoCoolHeadWin; + CConfiguration::BoardValue m_cryoLNA; + CConfiguration::BoardValue m_cryoLNAWin; + CConfiguration::BoardValue m_environmentTemperature; double m_vacuumDefault; - double m_environmentTemperature; bool m_calDiode; IRA::ReceiverControl::FetValues m_fetValues; DWORD m_statusWord; diff --git a/SRT/Servers/SRT7GHzReceiver/include/Configuration.h b/SRT/Servers/SRT7GHzReceiver/include/Configuration.h index 3105dbd2f..a3a59804c 100644 --- a/SRT/Servers/SRT7GHzReceiver/include/Configuration.h +++ b/SRT/Servers/SRT7GHzReceiver/include/Configuration.h @@ -15,6 +15,10 @@ #include #include +// Dummy value for a board connection error +#define CEDUMMY 100000 + + /** * This class implements the component configuration. The data inside this class are initialized at the startup from the * configuration database and then are used (read) inside the component. @@ -48,6 +52,12 @@ public: double relativePower; } TFeedValue; + typedef struct { + double temperature; + ACS::Time timestamp; + } BoardValue; + + /** * Default constructor */ diff --git a/SRT/Servers/SRT7GHzReceiver/include/DevIOCryoTemperatureCoolHead.h b/SRT/Servers/SRT7GHzReceiver/include/DevIOCryoTemperatureCoolHead.h index 3de389a51..dbe0ca39d 100644 --- a/SRT/Servers/SRT7GHzReceiver/include/DevIOCryoTemperatureCoolHead.h +++ b/SRT/Servers/SRT7GHzReceiver/include/DevIOCryoTemperatureCoolHead.h @@ -54,8 +54,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getCryoCoolHead(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getCryoCoolHead(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** diff --git a/SRT/Servers/SRT7GHzReceiver/include/DevIOCryoTemperatureCoolHeadWindow.h b/SRT/Servers/SRT7GHzReceiver/include/DevIOCryoTemperatureCoolHeadWindow.h index f7a7337b0..60926f013 100644 --- a/SRT/Servers/SRT7GHzReceiver/include/DevIOCryoTemperatureCoolHeadWindow.h +++ b/SRT/Servers/SRT7GHzReceiver/include/DevIOCryoTemperatureCoolHeadWindow.h @@ -54,8 +54,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getCryoCoolHeadWin(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getCryoCoolHeadWin(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** diff --git a/SRT/Servers/SRT7GHzReceiver/include/DevIOCryoTemperatureLNA.h b/SRT/Servers/SRT7GHzReceiver/include/DevIOCryoTemperatureLNA.h index 9f181b3ea..f53769873 100644 --- a/SRT/Servers/SRT7GHzReceiver/include/DevIOCryoTemperatureLNA.h +++ b/SRT/Servers/SRT7GHzReceiver/include/DevIOCryoTemperatureLNA.h @@ -54,8 +54,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getCryoLNA(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getCryoLNA(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** diff --git a/SRT/Servers/SRT7GHzReceiver/include/DevIOCryoTemperatureLNAWindow.h b/SRT/Servers/SRT7GHzReceiver/include/DevIOCryoTemperatureLNAWindow.h index 3ad24005e..a03d53720 100644 --- a/SRT/Servers/SRT7GHzReceiver/include/DevIOCryoTemperatureLNAWindow.h +++ b/SRT/Servers/SRT7GHzReceiver/include/DevIOCryoTemperatureLNAWindow.h @@ -54,8 +54,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getCryoLNAWin(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getCryoLNAWin(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** diff --git a/SRT/Servers/SRT7GHzReceiver/include/DevIOEnvTemperature.h b/SRT/Servers/SRT7GHzReceiver/include/DevIOEnvTemperature.h index aff44b89d..b92bc1f38 100644 --- a/SRT/Servers/SRT7GHzReceiver/include/DevIOEnvTemperature.h +++ b/SRT/Servers/SRT7GHzReceiver/include/DevIOEnvTemperature.h @@ -54,8 +54,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getEnvironmentTemperature(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getEnvironmentTemperature(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** diff --git a/SRT/Servers/SRT7GHzReceiver/src/ComponentCore.cpp b/SRT/Servers/SRT7GHzReceiver/src/ComponentCore.cpp index 5290ef93f..9839a49b3 100644 --- a/SRT/Servers/SRT7GHzReceiver/src/ComponentCore.cpp +++ b/SRT/Servers/SRT7GHzReceiver/src/ComponentCore.cpp @@ -21,7 +21,12 @@ void CComponentCore::initialize(maci::ContainerServices* services) m_control=NULL; m_localOscillatorDevice=Receivers::LocalOscillator::_nil(); m_localOscillatorFault=false; - m_cryoCoolHead=m_cryoCoolHeadWin= m_cryoLNA=m_cryoLNAWin=m_vacuum=0.0; + m_cryoCoolHead.temperature = 0.0; + m_cryoCoolHeadWin.temperature = 0.0; + m_cryoLNA.temperature = 0.0; + m_cryoLNAWin.temperature = 0.0; + m_environmentTemperature.temperature = 20.0; + m_vacuum=0.0; m_calDiode=false; m_fetValues.VDL=m_fetValues.IDL=m_fetValues.VGL=m_fetValues.VDR=m_fetValues.IDR=m_fetValues.VGR=0.0; m_statusWord=0; @@ -876,9 +881,11 @@ void CComponentCore::updateCryoCoolHead() throw (ReceiversErrors::ReceiverContro { // not under the mutex protection because the m_control object is thread safe (at the micro controller board stage) try { - m_cryoCoolHead=m_control->cryoTemperature(0,CComponentCore::voltage2Kelvin); + m_cryoCoolHead.temperature = m_control->cryoTemperature(0,CComponentCore::voltage2Kelvin); + m_cryoCoolHead.timestamp = getTimeStamp(); } catch (IRA::ReceiverControlEx& ex) { + m_cryoCoolHead.temperature = CEDUMMY; _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl,impl,"CComponentCore::updateCryoCoolHead()"); impl.setDetails(ex.what().c_str()); setStatusBit(CONNECTIONERROR); @@ -891,9 +898,11 @@ void CComponentCore::updateCryoCoolHeadWin() throw (ReceiversErrors::ReceiverCon { // not under the mutex protection because the m_control object is thread safe (at the micro controller board stage) try { - m_cryoCoolHeadWin=m_control->cryoTemperature(1,CComponentCore::voltage2Kelvin); + m_cryoCoolHeadWin.temperature = m_control->cryoTemperature(1,CComponentCore::voltage2Kelvin); + m_cryoCoolHeadWin.timestamp = getTimeStamp(); } catch (IRA::ReceiverControlEx& ex) { + m_cryoCoolHeadWin.temperature = CEDUMMY; _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl,impl,"CComponentCore::updateCryoCoolHeadWin()"); impl.setDetails(ex.what().c_str()); setStatusBit(CONNECTIONERROR); @@ -906,9 +915,11 @@ void CComponentCore::updateCryoLNA() throw (ReceiversErrors::ReceiverControlBoar { // not under the mutex protection because the m_control object is thread safe (at the micro controller board stage) try { - m_cryoLNA=m_control->cryoTemperature(3,CComponentCore::voltage2Kelvin); + m_cryoLNA.temperature = m_control->cryoTemperature(3,CComponentCore::voltage2Kelvin); + m_cryoLNA.timestamp = getTimeStamp(); } catch (IRA::ReceiverControlEx& ex) { + m_cryoLNA.temperature = CEDUMMY; _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl,impl,"CComponentCore::updateCryoLNA()"); impl.setDetails(ex.what().c_str()); setStatusBit(CONNECTIONERROR); @@ -921,9 +932,11 @@ void CComponentCore::updateCryoLNAWin() throw (ReceiversErrors::ReceiverControlB { // not under the mutex protection because the m_control object is thread safe (at the micro controller board stage) try { - m_cryoLNAWin=m_control->cryoTemperature(4,CComponentCore::voltage2Kelvin); + m_cryoLNAWin.temperature = m_control->cryoTemperature(4,CComponentCore::voltage2Kelvin); + m_cryoLNAWin.timestamp = getTimeStamp(); } catch (IRA::ReceiverControlEx& ex) { + m_cryoLNAWin.temperature = CEDUMMY; _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl,impl,"CComponentCore::updateCryoLNAWin()"); impl.setDetails(ex.what().c_str()); setStatusBit(CONNECTIONERROR); @@ -936,9 +949,11 @@ void CComponentCore::updateEnvironmentTemperature() throw (ReceiversErrors::Rece { // not under the mutex protection because the m_control object is thread safe (at the micro controller board stage) try { - m_environmentTemperature = m_control->vertexTemperature(CComponentCore::voltage2Celsius); + m_environmentTemperature.temperature = m_control->vertexTemperature(CComponentCore::voltage2Celsius); + m_environmentTemperature.timestamp = getTimeStamp(); } catch (IRA::ReceiverControlEx& ex) { + m_environmentTemperature.temperature = CEDUMMY; _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl,impl,"CComponentCore::updateEnvironmentTemperature()"); impl.setDetails(ex.what().c_str()); setStatusBit(CONNECTIONERROR); diff --git a/SRT/Servers/SRTKBandMFReceiver/include/DevIOCryoTemperatureCoolHead.h b/SRT/Servers/SRTKBandMFReceiver/include/DevIOCryoTemperatureCoolHead.h index 3de389a51..ea0baa5e2 100644 --- a/SRT/Servers/SRTKBandMFReceiver/include/DevIOCryoTemperatureCoolHead.h +++ b/SRT/Servers/SRTKBandMFReceiver/include/DevIOCryoTemperatureCoolHead.h @@ -12,6 +12,8 @@ #include #include +#include "MFKBandBaseConf.h" + /** * This class is derived from template DevIO and it is used by the cryoTemparatureCoolHead property of the component. @@ -54,8 +56,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getCryoCoolHead(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getCryoCoolHead(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** @@ -70,6 +73,7 @@ public: private: CComponentCore* m_pCore; double m_val; + ACS::Time m_timestamp_lc; // Timestamp of last connection }; #endif diff --git a/SRT/Servers/SRTKBandMFReceiver/include/DevIOCryoTemperatureCoolHeadWindow.h b/SRT/Servers/SRTKBandMFReceiver/include/DevIOCryoTemperatureCoolHeadWindow.h index f7a7337b0..f2489d672 100644 --- a/SRT/Servers/SRTKBandMFReceiver/include/DevIOCryoTemperatureCoolHeadWindow.h +++ b/SRT/Servers/SRTKBandMFReceiver/include/DevIOCryoTemperatureCoolHeadWindow.h @@ -54,8 +54,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getCryoCoolHeadWin(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getCryoCoolHeadWin(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** @@ -70,6 +71,7 @@ public: private: CComponentCore* m_pCore; double m_val; + ACS::Time m_timestamp_lc; // Timestamp of last connection }; #endif diff --git a/SRT/Servers/SRTKBandMFReceiver/include/DevIOCryoTemperatureLNA.h b/SRT/Servers/SRTKBandMFReceiver/include/DevIOCryoTemperatureLNA.h index cf8722777..6fbb0f7b9 100644 --- a/SRT/Servers/SRTKBandMFReceiver/include/DevIOCryoTemperatureLNA.h +++ b/SRT/Servers/SRTKBandMFReceiver/include/DevIOCryoTemperatureLNA.h @@ -56,8 +56,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getCryoLNA(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getCryoLNA(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** @@ -72,6 +73,7 @@ public: private: CComponentCore* m_pCore; double m_val; + ACS::Time m_timestamp_lc; // Timestamp of last connection }; #endif diff --git a/SRT/Servers/SRTKBandMFReceiver/include/DevIOCryoTemperatureLNAWindow.h b/SRT/Servers/SRTKBandMFReceiver/include/DevIOCryoTemperatureLNAWindow.h index 3ad24005e..6ac4c6038 100644 --- a/SRT/Servers/SRTKBandMFReceiver/include/DevIOCryoTemperatureLNAWindow.h +++ b/SRT/Servers/SRTKBandMFReceiver/include/DevIOCryoTemperatureLNAWindow.h @@ -54,8 +54,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getCryoLNAWin(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getCryoLNAWin(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** @@ -70,6 +71,7 @@ public: private: CComponentCore* m_pCore; double m_val; + ACS::Time m_timestamp_lc; // Timestamp of last connection }; #endif diff --git a/SRT/Servers/SRTKBandMFReceiver/include/DevIOEnvTemperature.h b/SRT/Servers/SRTKBandMFReceiver/include/DevIOEnvTemperature.h index 7bafa6fc1..538523f99 100644 --- a/SRT/Servers/SRTKBandMFReceiver/include/DevIOEnvTemperature.h +++ b/SRT/Servers/SRTKBandMFReceiver/include/DevIOEnvTemperature.h @@ -48,8 +48,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val = m_pCore->getVertexTemperature(); - timestamp = getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getVertexTemperature(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } @@ -66,6 +67,7 @@ public: private: CComponentCore* m_pCore; double m_val; + ACS::Time m_timestamp_lc; // Timestamp of last connection }; #endif diff --git a/SRT/Servers/SRTLPBandReceiver/include/ComponentCore.h b/SRT/Servers/SRTLPBandReceiver/include/ComponentCore.h index 3bb68f83f..a9e52ce1e 100755 --- a/SRT/Servers/SRTLPBandReceiver/include/ComponentCore.h +++ b/SRT/Servers/SRTLPBandReceiver/include/ComponentCore.h @@ -327,35 +327,35 @@ public: * This is getter method. No need to make it thread safe...... * @return the current value of the cryogenic temperature at cool head in °K */ - double getCryoCoolHead() const { return m_cryoCoolHead; } + CConfiguration::BoardValue getCryoCoolHead() const { return m_cryoCoolHead; } /** * This is getter method. No need to make it thread safe...... * @return the current value of the cryogenic temperature at cool head window in °K */ - double getCryoCoolHeadWin() const { return m_cryoCoolHeadWin; } + CConfiguration::BoardValue getCryoCoolHeadWin() const { return m_cryoCoolHeadWin; } /** * This is getter method. No need to make it thread safe...... * @return the current value of the cryogenic temperature at LNA in °K */ - double getCryoLNA() const { return m_cryoLNA; } + CConfiguration::BoardValue getCryoLNA() const { return m_cryoLNA; } /** * This is getter method. No need to make it thread safe...... * @return the current value of the cryogenic temperature at LNA window in °K */ - double getCryoLNAWin() const { return m_cryoLNAWin; } + CConfiguration::BoardValue getCryoLNAWin() const { return m_cryoLNAWin; } /** * This is getter method. No need to make it thread safe...... * @return the current vertex temperature in °K */ - double getVertexTemperature() const { return m_envTemperature; } + CConfiguration::BoardValue getVertexTemperature() const { return m_envTemperature; } /** @@ -595,12 +595,12 @@ private: bool m_localOscillatorFault; double m_localOscillatorValue; double m_vacuum; - double m_cryoCoolHead; - double m_cryoCoolHeadWin; - double m_cryoLNA; - double m_cryoLNAWin; + CConfiguration::BoardValue m_cryoCoolHead; + CConfiguration::BoardValue m_cryoCoolHeadWin; + CConfiguration::BoardValue m_cryoLNA; + CConfiguration::BoardValue m_cryoLNAWin; + CConfiguration::BoardValue m_envTemperature; double m_vacuumDefault; - double m_envTemperature; bool m_calDiode; IRA::ReceiverControl::FetValues m_fetValues; DWORD m_statusWord; diff --git a/SRT/Servers/SRTLPBandReceiver/include/Configuration.h b/SRT/Servers/SRTLPBandReceiver/include/Configuration.h index 9bfc1b8eb..e008e82e6 100755 --- a/SRT/Servers/SRTLPBandReceiver/include/Configuration.h +++ b/SRT/Servers/SRTLPBandReceiver/include/Configuration.h @@ -17,6 +17,9 @@ #include #include "utils.h" +// Dummy value for a board connection error +#define CEDUMMY 100000 + /** * This class implements the component configuration. The data inside this class are initialized at the startup from the @@ -53,6 +56,12 @@ public: double relativePower; } TFeedValue; + typedef struct { + double temperature; + ACS::Time timestamp; + } BoardValue; + + /** * Default constructor */ diff --git a/SRT/Servers/SRTLPBandReceiver/include/DevIOCryoTemperatureCoolHead.h b/SRT/Servers/SRTLPBandReceiver/include/DevIOCryoTemperatureCoolHead.h index 3de389a51..4980f46ba 100755 --- a/SRT/Servers/SRTLPBandReceiver/include/DevIOCryoTemperatureCoolHead.h +++ b/SRT/Servers/SRTLPBandReceiver/include/DevIOCryoTemperatureCoolHead.h @@ -54,8 +54,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getCryoCoolHead(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getCryoCoolHead(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** diff --git a/SRT/Servers/SRTLPBandReceiver/include/DevIOCryoTemperatureCoolHeadWindow.h b/SRT/Servers/SRTLPBandReceiver/include/DevIOCryoTemperatureCoolHeadWindow.h index f7a7337b0..60926f013 100755 --- a/SRT/Servers/SRTLPBandReceiver/include/DevIOCryoTemperatureCoolHeadWindow.h +++ b/SRT/Servers/SRTLPBandReceiver/include/DevIOCryoTemperatureCoolHeadWindow.h @@ -54,8 +54,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getCryoCoolHeadWin(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getCryoCoolHeadWin(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** diff --git a/SRT/Servers/SRTLPBandReceiver/include/DevIOCryoTemperatureLNA.h b/SRT/Servers/SRTLPBandReceiver/include/DevIOCryoTemperatureLNA.h index cf8722777..23ec8fd12 100755 --- a/SRT/Servers/SRTLPBandReceiver/include/DevIOCryoTemperatureLNA.h +++ b/SRT/Servers/SRTLPBandReceiver/include/DevIOCryoTemperatureLNA.h @@ -56,8 +56,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getCryoLNA(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getCryoLNA(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** diff --git a/SRT/Servers/SRTLPBandReceiver/include/DevIOCryoTemperatureLNAWindow.h b/SRT/Servers/SRTLPBandReceiver/include/DevIOCryoTemperatureLNAWindow.h index 3ad24005e..a03d53720 100755 --- a/SRT/Servers/SRTLPBandReceiver/include/DevIOCryoTemperatureLNAWindow.h +++ b/SRT/Servers/SRTLPBandReceiver/include/DevIOCryoTemperatureLNAWindow.h @@ -54,8 +54,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val=m_pCore->getCryoLNAWin(); - timestamp=getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getCryoLNAWin(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } /** diff --git a/SRT/Servers/SRTLPBandReceiver/include/DevIOEnvTemperature.h b/SRT/Servers/SRTLPBandReceiver/include/DevIOEnvTemperature.h index 7bafa6fc1..3d4fe791b 100755 --- a/SRT/Servers/SRTLPBandReceiver/include/DevIOEnvTemperature.h +++ b/SRT/Servers/SRTLPBandReceiver/include/DevIOEnvTemperature.h @@ -48,8 +48,9 @@ public: */ CORBA::Double read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl) { - m_val = m_pCore->getVertexTemperature(); - timestamp = getTimeStamp(); //Completion time + CConfiguration::BoardValue result = m_pCore->getVertexTemperature(); + m_val = result.temperature; + timestamp = result.timestamp; return m_val; } diff --git a/SRT/Servers/SRTLPBandReceiver/src/ComponentCore.cpp b/SRT/Servers/SRTLPBandReceiver/src/ComponentCore.cpp index f74619cbb..1e38dc136 100755 --- a/SRT/Servers/SRTLPBandReceiver/src/ComponentCore.cpp +++ b/SRT/Servers/SRTLPBandReceiver/src/ComponentCore.cpp @@ -15,10 +15,11 @@ void CComponentCore::initialize(maci::ContainerServices* services) { m_services = services; m_control = NULL; - m_cryoCoolHead = 0.0; - m_cryoCoolHeadWin = 0.0; - m_cryoLNA = 0.0; - m_cryoLNAWin = 0.0; + m_cryoCoolHead.temperature = 0.0; + m_cryoCoolHeadWin.temperature = 0.0; + m_cryoLNA.temperature = 0.0; + m_cryoLNAWin.temperature = 0.0; + m_envTemperature.temperature = 20.0; m_vacuum = 0.0; m_fetValues.VDL = 0.0; m_fetValues. IDL = 0.0; @@ -1129,9 +1130,11 @@ void CComponentCore::updateCryoCoolHead() throw (ReceiversErrors::ReceiverContro { // Not under the mutex protection because the m_control object is thread safe (at the micro controller board stage) try { - m_cryoCoolHead=m_control->cryoTemperature(0,CComponentCore::voltage2Kelvin); + m_cryoCoolHead.temperature = m_control->cryoTemperature(0,CComponentCore::voltage2Kelvin); + m_cryoCoolHead.timestamp = getTimeStamp(); } catch (IRA::ReceiverControlEx& ex) { + m_cryoCoolHead.temperature = CEDUMMY; _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl,impl,"CComponentCore::updateCryoCoolHead()"); impl.setDetails(ex.what().c_str()); setStatusBit(CONNECTIONERROR); @@ -1145,9 +1148,11 @@ void CComponentCore::updateCryoCoolHeadWin() throw (ReceiversErrors::ReceiverCon { // Not under the mutex protection because the m_control object is thread safe (at the micro controller board stage) try { - m_cryoCoolHeadWin=m_control->cryoTemperature(1,CComponentCore::voltage2Kelvin); + m_cryoCoolHeadWin.temperature = m_control->cryoTemperature(1,CComponentCore::voltage2Kelvin); + m_cryoCoolHeadWin.timestamp = getTimeStamp(); } catch (IRA::ReceiverControlEx& ex) { + m_cryoCoolHeadWin.temperature = CEDUMMY; _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl,impl,"CComponentCore::updateCryoCoolHeadWin()"); impl.setDetails(ex.what().c_str()); setStatusBit(CONNECTIONERROR); @@ -1161,9 +1166,11 @@ void CComponentCore::updateCryoLNA() throw (ReceiversErrors::ReceiverControlBoar { // Not under the mutex protection because the m_control object is thread safe (at the micro controller board stage) try { - m_cryoLNA=m_control->cryoTemperature(3,CComponentCore::voltage2Kelvin); + m_cryoLNA.temperature = m_control->cryoTemperature(3,CComponentCore::voltage2Kelvin); + m_cryoLNA.timestamp = getTimeStamp(); } catch (IRA::ReceiverControlEx& ex) { + m_cryoLNA.temperature = CEDUMMY; _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl,impl,"CComponentCore::updateCryoLNA()"); impl.setDetails(ex.what().c_str()); setStatusBit(CONNECTIONERROR); @@ -1177,9 +1184,11 @@ void CComponentCore::updateCryoLNAWin() throw (ReceiversErrors::ReceiverControlB { // Not under the mutex protection because the m_control object is thread safe (at the micro controller board stage) try { - m_cryoLNAWin=m_control->cryoTemperature(4,CComponentCore::voltage2Kelvin); + m_cryoLNAWin.temperature = m_control->cryoTemperature(4,CComponentCore::voltage2Kelvin); + m_cryoLNAWin.timestamp = getTimeStamp(); } catch (IRA::ReceiverControlEx& ex) { + m_cryoLNAWin.temperature = CEDUMMY; _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl,impl,"CComponentCore::updateCryoLNAWin()"); impl.setDetails(ex.what().c_str()); setStatusBit(CONNECTIONERROR); @@ -1193,9 +1202,11 @@ void CComponentCore::updateVertexTemperature() throw (ReceiversErrors::ReceiverC { // Not under the mutex protection because the m_control object is thread safe (at the micro controller board stage) try { - m_envTemperature = m_control->vertexTemperature(CComponentCore::voltage2Celsius); + m_envTemperature.temperature = m_control->vertexTemperature(CComponentCore::voltage2Celsius); + m_envTemperature.timestamp = getTimeStamp(); } catch (IRA::ReceiverControlEx& ex) { + m_envTemperature.temperature = CEDUMMY; _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl,impl,"CComponentCore::updateVertexTemperature()"); impl.setDetails(ex.what().c_str()); setStatusBit(CONNECTIONERROR); -- GitLab