Loading CHANGELOG.md +4 −0 Original line number Diff line number Diff line Loading @@ -85,5 +85,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/ ## [discos1.0.5] - ## Added issue #504 - added credits clause (regarding INAF data ownership) to fits files headers issue #518 - KBand receivers cryo temperature read wrongly with connection problems. More information: https://github.com/discos/discos/issues/518#issuecomment-590838480 ## Fixed issue #518 - In case of communication error we set a dummy value (100000) for the temperature properties, and the related timestamp keeps the value of the last communication timestamp. ## Changed Common/Servers/MFKBandBaseReceiver/include/MFKBandBaseConf.h +10 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,10 @@ #include <ReceiversDefinitionsC.h> #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. Loading Loading @@ -55,6 +59,12 @@ public: double relativePower; } TFeedValue; typedef struct { double temperature; ACS::Time timestamp; } BoardValue; /** * Default constructor */ Loading Common/Servers/MFKBandBaseReceiver/include/MFKBandBaseCore.h +10 −10 Original line number Diff line number Diff line Loading @@ -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; } /** Loading Loading @@ -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; Loading Common/Servers/MFKBandBaseReceiver/src/MFKBandBaseCore.cpp +21 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureCoolHead.h +3 −2 Original line number Diff line number Diff line Loading @@ -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; } /** Loading Loading
CHANGELOG.md +4 −0 Original line number Diff line number Diff line Loading @@ -85,5 +85,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/ ## [discos1.0.5] - ## Added issue #504 - added credits clause (regarding INAF data ownership) to fits files headers issue #518 - KBand receivers cryo temperature read wrongly with connection problems. More information: https://github.com/discos/discos/issues/518#issuecomment-590838480 ## Fixed issue #518 - In case of communication error we set a dummy value (100000) for the temperature properties, and the related timestamp keeps the value of the last communication timestamp. ## Changed
Common/Servers/MFKBandBaseReceiver/include/MFKBandBaseConf.h +10 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,10 @@ #include <ReceiversDefinitionsC.h> #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. Loading Loading @@ -55,6 +59,12 @@ public: double relativePower; } TFeedValue; typedef struct { double temperature; ACS::Time timestamp; } BoardValue; /** * Default constructor */ Loading
Common/Servers/MFKBandBaseReceiver/include/MFKBandBaseCore.h +10 −10 Original line number Diff line number Diff line Loading @@ -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; } /** Loading Loading @@ -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; Loading
Common/Servers/MFKBandBaseReceiver/src/MFKBandBaseCore.cpp +21 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading
Medicina/Servers/MedicinaKBandDualFReceiver/include/DevIOCryoTemperatureCoolHead.h +3 −2 Original line number Diff line number Diff line Loading @@ -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; } /** Loading