Skip to content
Snippets Groups Projects
Unverified Commit 894c177d authored by Fabio Vitello's avatar Fabio Vitello Committed by GitHub
Browse files

Merge pull request #692 from discos/fix-issue-655

Fix issue 655
parents 16df0940 f46a2148
Branches
Tags
No related merge requests found
Showing
with 197 additions and 42 deletions
...@@ -97,6 +97,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/ ...@@ -97,6 +97,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/
## [next release] ## [next release]
## Added ## Added
issue #655 - ACU Component for Noto and Medicina is now capble to prevent seldom mode changes coming from ACU reset
issue #653 - added a couple of scriptsto ease vnc conection from remote a file copying. The scripts support issue #653 - added a couple of scriptsto ease vnc conection from remote a file copying. The scripts support
linux and macos linux and macos
## Fixed ## Fixed
......
...@@ -560,17 +560,24 @@ CExternalClientsSocketServer::cmdToScheduler () ...@@ -560,17 +560,24 @@ CExternalClientsSocketServer::cmdToScheduler ()
printf("dentro ans==false\n"); printf("dentro ans==false\n");
}*/ }*/
} }
out.ReplaceAll('\n','-');
/*out.Replace('\n','-');
out.Replace('\n','-'); out.Replace('\n','-');
out.Replace('\n','-');
out.Replace('\n','-');*/
Len = out.GetLength (); Len = out.GetLength ();
int i; int i;
for (i = 0; i < Len; i++) for (i = 0; i < Len; i++) {
{ //if (out.CharAt(i)=='\n')
// break;
outBuffer[i] = out.CharAt (i); outBuffer[i] = out.CharAt (i);
} }
out.Empty(); out.Empty();
outBuffer[Len] = '\n'; outBuffer[Len] = '\n';
//outBuffer[i] = '\n';
//printf ("Command returned = %s", outBuffer); //printf ("Command returned = %s", outBuffer);
Res = sendBuffer (outBuffer, Len + 1); Res = sendBuffer (outBuffer, Len + 1);
//Res = sendBuffer (outBuffer, i + 1);
if (Res == WOULDBLOCK || Res == FAIL) if (Res == WOULDBLOCK || Res == FAIL)
{ {
_EXCPT (SocketErrorExImpl, impl, _EXCPT (SocketErrorExImpl, impl,
......
...@@ -139,6 +139,8 @@ class PyCalmuxImpl(CalMux, cc, services, lcycle): ...@@ -139,6 +139,8 @@ class PyCalmuxImpl(CalMux, cc, services, lcycle):
""" """
s.sendall(command) s.sendall(command)
# time.sleep(0.1)
response = s.recv(1024) response = s.recv(1024)
response = response.strip().split() response = response.strip().split()
if len(response) == 1: if len(response) == 1:
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
ControlThreadPeriod="200000" ControlThreadPeriod="200000"
RepetitionCacheTime="2000000" RepetitionCacheTime="2000000"
RepetitionExpireTime="5000000" RepetitionExpireTime="5000000"
CheckMode="false"
CheckOscillation="true" CheckOscillation="true"
OscillationThreshold="0.01" OscillationThreshold="0.01"
OscillationAlarmDuration="2000000" OscillationAlarmDuration="2000000"
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
ControlThreadPeriod="200000" ControlThreadPeriod="200000"
RepetitionCacheTime="2000000" RepetitionCacheTime="2000000"
RepetitionExpireTime="5000000" RepetitionExpireTime="5000000"
CheckMode="false"
CheckOscillation="true" CheckOscillation="true"
OscillationThreshold="0.01" OscillationThreshold="0.01"
OscillationAlarmDuration="2000000" OscillationAlarmDuration="2000000"
......
...@@ -325,11 +325,15 @@ double ...@@ -325,11 +325,15 @@ double
MedMinorServoGeometry::_check_axis_limit(const double position, MedMinorServoGeometry::_check_axis_limit(const double position,
const MedMinorServoAxis axis) const MedMinorServoAxis axis)
{ {
if(position < axis.position_min){ int iposition = (int)position;
if(iposition < axis.position_min){
throw MinorServoAxisLimitError("axis too low"); throw MinorServoAxisLimitError("axis too low");
//return axis.position_min; //return axis.position_min;
} }
if(position > axis.position_max){ if(iposition > axis.position_max){
std::cout<<axis.name<<" "<<iposition<<" " <<axis.position_max<< std::endl;
throw MinorServoAxisLimitError("axis too high "); throw MinorServoAxisLimitError("axis too high ");
//return axis.position_max; //return axis.position_max;
} }
......
...@@ -101,6 +101,8 @@ ...@@ -101,6 +101,8 @@
<xs:attribute name="RepetitionCacheTime" type="xs:unsignedLong" use="required" /> <xs:attribute name="RepetitionCacheTime" type="xs:unsignedLong" use="required" />
<!-- the expire time (microseconds) for logging repetition filter --> <!-- the expire time (microseconds) for logging repetition filter -->
<xs:attribute name="RepetitionExpireTime" type="xs:unsignedLong" use="required" /> <xs:attribute name="RepetitionExpireTime" type="xs:unsignedLong" use="required" />
<!-- This flag is "true" or "false" to enable the check of the ACU mode -->
<xs:attribute name="CheckMode" type="xs:boolean" use="required" />
<!-- This flag is "true" or "false" to control the oscillattion check is active or not --> <!-- This flag is "true" or "false" to control the oscillattion check is active or not -->
<xs:attribute name="CheckOscillation" type="xs:boolean" use="required" /> <xs:attribute name="CheckOscillation" type="xs:boolean" use="required" />
<!-- the oscillation threshold as azimuth tracking error (degrees) --> <!-- the oscillation threshold as azimuth tracking error (degrees) -->
......
...@@ -83,6 +83,9 @@ public: ...@@ -83,6 +83,9 @@ public:
/** Returns the section which the antenna is located in, at present */ /** Returns the section which the antenna is located in, at present */
CACUInterface::TAntennaSection getSection() const; CACUInterface::TAntennaSection getSection() const;
/** Return true if the driver power is on */
bool getDrivePower() const;
/**Returns the number of free stack slots reserved for time tagged program track positions */ /**Returns the number of free stack slots reserved for time tagged program track positions */
WORD getFreeStackPositions() const; WORD getFreeStackPositions() const;
......
...@@ -186,10 +186,15 @@ public: ...@@ -186,10 +186,15 @@ public:
static TAxeModes getMode(BYTE mode); static TAxeModes getMode(BYTE mode);
/** /**
* This function returns the antenna presnt section given the control word * This function returns the antenna present section given the control word
*/ */
static TAntennaSection getSection(WORD controlWord); static TAntennaSection getSection(WORD controlWord);
/**
* This function returns true i drive power is on, false otherwise
*/
static bool getDrivePower(WORD controlWord);
}; };
#endif #endif
...@@ -99,9 +99,12 @@ public: ...@@ -99,9 +99,12 @@ public:
/** Gets the number of times the oscillation has to be hit before an oscillation is declared*/ /** Gets the number of times the oscillation has to be hit before an oscillation is declared*/
inline DWORD oscillationNumberThreashold() const { return m_dwoscNumberThreshold; } inline DWORD oscillationNumberThreashold() const { return m_dwoscNumberThreshold; }
/** Flag that indicates whether the oscillation chek must performed or not. */ /** Flag that indicates whether the oscillation check must performed or not. */
inline bool checkForOscillation() const { return m_checkOsc; } inline bool checkForOscillation() const { return m_checkOsc; }
/** Flag that indicates whether the ACU check mode must performed or not. */
inline bool checkForMode() const { return m_checkMode; }
/** /**
* This member function is used to configure component by reading the configuration parameter from the CDB. * This member function is used to configure component by reading the configuration parameter from the CDB.
* This must be the first call before using any other function of this class. * This must be the first call before using any other function of this class.
...@@ -139,9 +142,9 @@ private: ...@@ -139,9 +142,9 @@ private:
DWORD m_dwcontrolThreadPeriod; DWORD m_dwcontrolThreadPeriod;
/** This is the precision (degree) of the antenna */ /** This is the precision (degree) of the antenna */
//double m_dtrackingPrecision; //double m_dtrackingPrecision;
/** This indicates the cache time for the repetion log filter */ /** This indicates the cache time for the repetition log filter */
DDWORD m_dwrepetitionCacheTime; DDWORD m_dwrepetitionCacheTime;
/** This indicates the expire time for the repetion log filter */ /** This indicates the expire time for the repetition log filter */
DDWORD m_dwexpireCacheTime; DDWORD m_dwexpireCacheTime;
/** this number is the separation value between the CW and CCW, if the azimuth is greater than this the section is CW */ /** this number is the separation value between the CW and CCW, if the azimuth is greater than this the section is CW */
double m_cwLimit; double m_cwLimit;
...@@ -151,6 +154,7 @@ private: ...@@ -151,6 +154,7 @@ private:
WORD m_dwoscNumberThreshold; WORD m_dwoscNumberThreshold;
DDWORD m_dwoscRecoverTime; DDWORD m_dwoscRecoverTime;
bool m_checkOsc; bool m_checkOsc;
bool m_checkMode;
}; };
......
...@@ -447,10 +447,33 @@ public: ...@@ -447,10 +447,33 @@ public:
* 1) if the tracking error is beyond a threashold an alarm condition is triggered. This condition has a certain validity time. * 1) if the tracking error is beyond a threashold an alarm condition is triggered. This condition has a certain validity time.
* 2) If more than a number of direction changes (of the tracking error with respect to the zero error) are detected during the alarm time window, the oscillation is declared- * 2) If more than a number of direction changes (of the tracking error with respect to the zero error) are detected during the alarm time window, the oscillation is declared-
* 3) The alarm condition is cleared if the time validity window of the alarm elapsed and the tracking error is again under the threshold. * 3) The alarm condition is cleared if the time validity window of the alarm elapsed and the tracking error is again under the threshold.
* In case of detection counter mesures are immediately taken. * In case of detection counter measures are immediately taken.
*/ */
void detectOscillation() throw (AntennaErrors::ConnectionExImpl,ComponentErrors::SocketErrorExImpl,ComponentErrors::TimeoutExImpl,AntennaErrors::NakExImpl,AntennaErrors::AntennaBusyExImpl); void detectOscillation() throw (AntennaErrors::ConnectionExImpl,ComponentErrors::SocketErrorExImpl,ComponentErrors::TimeoutExImpl,AntennaErrors::NakExImpl,AntennaErrors::AntennaBusyExImpl);
/**
* This method has been added to detect the event the ACU mode differs from previously commanded. In case it tries to
* recover from this event by commanding the correct mode.
* @throw AntennaErrors::ConnectionExImpl
* @throw ComponentErrors::SocketErrorExImpl
* @throw ComponentErrors::TimeoutExImpl
* @throw AntennaErrors::NakExImpl
* @throw AntennaErrors::AntennaBusyExImpl
*/
void checkCommandedMode() throw (AntennaErrors::ConnectionExImpl,ComponentErrors::SocketErrorExImpl,
ComponentErrors::TimeoutExImpl,AntennaErrors::NakExImpl,AntennaErrors::AntennaBusyExImpl);
/**
* This method has been added to detect a power failure in the servo system. In case it tries to
* recover from this event by reseting the servo.
* @throw AntennaErrors::ConnectionExImpl
* @throw ComponentErrors::SocketErrorExImpl
* @throw ComponentErrors::TimeoutExImpl
* @throw AntennaErrors::NakExImpl
*/
void checkPowerFailure() throw (ComponentErrors::TimeoutExImpl,AntennaErrors::NakExImpl,
AntennaErrors::ConnectionExImpl,ComponentErrors::SocketErrorExImpl);
/** /**
* This member function is used by the control thread in order to check if a long job that was started as completed or not. * This member function is used by the control thread in order to check if a long job that was started as completed or not.
* @param job job identifier * @param job job identifier
...@@ -607,6 +630,16 @@ private: ...@@ -607,6 +630,16 @@ private:
*/ */
CACUInterface::TAxeModes m_oscMode; CACUInterface::TAxeModes m_oscMode;
/**
* this flag indicates that a recovery from mode check in ongoing.....
*/
bool m_modeCheckRecover;
/**
* this flag indicates that a power failure has been detected
*/
bool m_powerFailDetected;
/** /**
* Stores the epoch of the last scan. Used in oscillation prevention * Stores the epoch of the last scan. Used in oscillation prevention
*/ */
......
...@@ -115,6 +115,14 @@ CACUInterface::TAntennaSection CACUData::getSection() const ...@@ -115,6 +115,14 @@ CACUInterface::TAntennaSection CACUData::getSection() const
return CACUInterface::getSection(Value); return CACUInterface::getSection(Value);
} }
bool CACUData::getDrivePower() const
{
WORD val;
memcpy(&val,(m_MonitorData+36),2);
return CACUInterface::getDrivePower(val);
}
WORD CACUData::getFreeStackPositions() const WORD CACUData::getFreeStackPositions() const
{ {
WORD Value; WORD Value;
......
...@@ -247,3 +247,9 @@ CACUInterface::TAntennaSection CACUInterface::getSection(WORD controlWord) ...@@ -247,3 +247,9 @@ CACUInterface::TAntennaSection CACUInterface::getSection(WORD controlWord)
else return CACUInterface::CCW; else return CACUInterface::CCW;
} }
bool CACUInterface::getDrivePower(WORD controlWord)
{
if (controlWord & (1 << 15)) return false;
else return true;
}
...@@ -66,6 +66,13 @@ void CConfiguration::Init(maci::ContainerServices *Services) throw (ComponentErr ...@@ -66,6 +66,13 @@ void CConfiguration::Init(maci::ContainerServices *Services) throw (ComponentErr
_GET_DOUBLE_ATTRIBUTE("cw_ccw_limit","CW/CCW limit (degrees):",m_cwLimit,"DataBlock/Mount"); _GET_DOUBLE_ATTRIBUTE("cw_ccw_limit","CW/CCW limit (degrees):",m_cwLimit,"DataBlock/Mount");
_GET_STRING_ATTRIBUTE("CheckOscillation","Check oscillation during tracking: ",check,""); _GET_STRING_ATTRIBUTE("CheckOscillation","Check oscillation during tracking: ",check,"");
check.MakeUpper();
m_checkOsc=(check=="TRUE");
_GET_STRING_ATTRIBUTE("CheckMode","Check ACU mode enabled: ",check,"");
check.MakeUpper();
m_checkMode=(check=="TRUE");
_GET_DOUBLE_ATTRIBUTE("OscillationThreshold","Oscillation theshold (deg):",m_doscThreashold,""); _GET_DOUBLE_ATTRIBUTE("OscillationThreshold","Oscillation theshold (deg):",m_doscThreashold,"");
_GET_DWORD_ATTRIBUTE("OscillationAlarmDuration","Oscillation alarm duration (uSec):",m_dwoscAlarmDuration,""); _GET_DWORD_ATTRIBUTE("OscillationAlarmDuration","Oscillation alarm duration (uSec):",m_dwoscAlarmDuration,"");
_GET_DWORD_ATTRIBUTE("OscillationNumberThreshold","Oscillation number threashold:",m_dwoscNumberThreshold,""); _GET_DWORD_ATTRIBUTE("OscillationNumberThreshold","Oscillation number threashold:",m_dwoscNumberThreshold,"");
...@@ -74,5 +81,5 @@ void CConfiguration::Init(maci::ContainerServices *Services) throw (ComponentErr ...@@ -74,5 +81,5 @@ void CConfiguration::Init(maci::ContainerServices *Services) throw (ComponentErr
m_dwoscRecoverTime*=10; m_dwoscRecoverTime*=10;
m_dwcontrolThreadPeriod*=10; m_dwcontrolThreadPeriod*=10;
check.MakeUpper(); check.MakeUpper();
m_checkOsc=(check=="TRUE");
} }
...@@ -130,6 +130,8 @@ void CMedicinaMountSocket::Init(CConfiguration *config,maci::ContainerServices * ...@@ -130,6 +130,8 @@ void CMedicinaMountSocket::Init(CConfiguration *config,maci::ContainerServices *
m_oscStopTime=0; m_oscStopTime=0;
m_oscMode=CACUInterface::STANDBY; m_oscMode=CACUInterface::STANDBY;
m_lastScanEpoch=0; m_lastScanEpoch=0;
m_modeCheckRecover=false;
m_powerFailDetected=false;
} }
CACUInterface::TAxeModes CMedicinaMountSocket::getAzimuthMode() throw (ConnectionExImpl,SocketErrorExImpl,TimeoutExImpl) CACUInterface::TAxeModes CMedicinaMountSocket::getAzimuthMode() throw (ConnectionExImpl,SocketErrorExImpl,TimeoutExImpl)
...@@ -587,8 +589,11 @@ void CMedicinaMountSocket::Mode(CACUInterface::TAxeModes azMode,CACUInterface::T ...@@ -587,8 +589,11 @@ void CMedicinaMountSocket::Mode(CACUInterface::TAxeModes azMode,CACUInterface::T
TIMEVALUE now; TIMEVALUE now;
IRA::CIRATools::getTime(now); IRA::CIRATools::getTime(now);
m_Data.setLastCommandedMode(azMode); m_Data.setLastCommandedMode(azMode);
if (!m_modeCheckRecover) { // need to keep current offsets in case a recovery procedure is ongoing.....
m_Data.setAzimuthOffset(0.0); m_Data.setAzimuthOffset(0.0);
m_Data.setElevationOffset(0.0); m_Data.setElevationOffset(0.0);
m_modeCheckRecover=false;
}
m_lastScanEpoch=now.value().value; m_lastScanEpoch=now.value().value;
} }
...@@ -844,6 +849,50 @@ double CMedicinaMountSocket::getHWAzimuth(double destination,const CACUInterface ...@@ -844,6 +849,50 @@ double CMedicinaMountSocket::getHWAzimuth(double destination,const CACUInterface
return CIRATools::getHWAzimuth(pos,dest,m_configuration->azimuthLowerLimit(),m_configuration->azimuthUpperLimit(),section,m_configuration->cwLimit()); return CIRATools::getHWAzimuth(pos,dest,m_configuration->azimuthLowerLimit(),m_configuration->azimuthUpperLimit(),section,m_configuration->cwLimit());
} }
void CMedicinaMountSocket::checkPowerFailure() throw (ComponentErrors::TimeoutExImpl,AntennaErrors::NakExImpl,
AntennaErrors::ConnectionExImpl,ComponentErrors::SocketErrorExImpl)
{
//_IRA_LOGDIKE_COMPLETION(m_logDike,__dummy,LM_DEBUG);
if (!m_configuration->checkForMode()) return;
if (m_Data.getDrivePower()) { //in case of a power outage of failure.....
if (!m_powerFailDetected) { //first detection
CUSTOM_LOG(LM_FULL_INFO,"CMedicinaMountSocket::checkPowerFailure()",(LM_CRITICAL,
"Servo system power failure detected"));
}
m_powerFailDetected=true;
}
else { // no power error
if (m_powerFailDetected) { //first detection
CUSTOM_LOG(LM_FULL_INFO,"CMedicinaMountSocket::checkPowerFailure()",(LM_NOTICE,
"Trying a servo system reset"));
failureReset();// throw (TimeoutExImpl,AntennaErrors::NakExImpl,ConnectionExImpl,SocketErrorExImpl)
m_powerFailDetected=false;
CUSTOM_LOG(LM_FULL_INFO,"CMedicinaMountSocket::checkPowerFailure()",(LM_CRITICAL,
"Servo system power failure cleared"));
}
}
}
void CMedicinaMountSocket::checkCommandedMode() throw (ConnectionExImpl,SocketErrorExImpl,TimeoutExImpl,AntennaErrors::NakExImpl,AntennaBusyExImpl)
{
CACUInterface::TAxeModes commandedMode, mode;
if (!m_configuration->checkForMode()) return;
if (m_powerFailDetected) return; // no need to try to recover from mode discrepancy if the cause is a power failure
commandedMode=m_Data.getLastCommandedMode();
if ((commandedMode!=CACUInterface::STANDBY) && (commandedMode!=CACUInterface::UNSTOW) &&
(commandedMode!=CACUInterface::STOW) && (commandedMode!=CACUInterface::STOP)) {
mode=getAzimuthMode(); // throw (ConnectionExImpl,SocketErrorExImpl,TimeoutExImpl)
if ((mode!=CACUInterface::UNKNOWN)) {
if ((commandedMode!=mode)) {
CUSTOM_LOG(LM_FULL_INFO,"CMedicinaMountSocket::checkCommandedMode()",
(LM_WARNING,"ACU operation mode differs from commanded one, trying to recover..."));
m_modeCheckRecover=true;
Mode(commandedMode,commandedMode);
}
}
}
}
void CMedicinaMountSocket::detectOscillation() throw (ConnectionExImpl,SocketErrorExImpl,TimeoutExImpl,AntennaErrors::NakExImpl,AntennaBusyExImpl) void CMedicinaMountSocket::detectOscillation() throw (ConnectionExImpl,SocketErrorExImpl,TimeoutExImpl,AntennaErrors::NakExImpl,AntennaBusyExImpl)
{ {
TIMEVALUE now; TIMEVALUE now;
......
...@@ -51,6 +51,8 @@ void CMedicinaMountControlThread::runLoop() ...@@ -51,6 +51,8 @@ void CMedicinaMountControlThread::runLoop()
CSecAreaResourceWrapper<CMedicinaMountSocket> socket=m_pACUControl->Get(); CSecAreaResourceWrapper<CMedicinaMountSocket> socket=m_pACUControl->Get();
socket->updateComponent(); // before commenting out or deleting consider that inside this method the flushing of pending event of the log dike object is called socket->updateComponent(); // before commenting out or deleting consider that inside this method the flushing of pending event of the log dike object is called
socket->detectOscillation(); socket->detectOscillation();
socket->checkPowerFailure();
socket->checkCommandedMode();
if (currentJobID!=0) { if (currentJobID!=0) {
ACSErr::Completion_var comp; ACSErr::Completion_var comp;
if (socket->updateLongJobs(currentJobID,comp.out())) { if (socket->updateLongJobs(currentJobID,comp.out())) {
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
ControlThreadPeriod="200000" ControlThreadPeriod="200000"
RepetitionCacheTime="2000000" RepetitionCacheTime="2000000"
RepetitionExpireTime="5000000" RepetitionExpireTime="5000000"
CheckMode="true"
CheckOscillation="true" CheckOscillation="true"
OscillationThreshold="0.01" OscillationThreshold="0.01"
OscillationAlarmDuration="2000000" OscillationAlarmDuration="2000000"
......
...@@ -15,8 +15,10 @@ ...@@ -15,8 +15,10 @@
calOff calOff
setAttenuation=0,15 setAttenuation=0,15
setAttenuation=1,5 setAttenuation=1,5
ifdist=1,1,44 ifdist=1,1,-1
ifdist=2,1,32 ifdist=2,1,-1
ifdist=1,-1,16
ifdist=2,-1,32
</body> </body>
</Procedure> </Procedure>
...@@ -32,8 +34,10 @@ ...@@ -32,8 +34,10 @@
calOff calOff
setAttenuation=0,0 setAttenuation=0,0
setAttenuation=1,4 setAttenuation=1,4
ifdist=1,1,44 ifdist=1,1,-1
ifdist=2,1,32 ifdist=2,1,-1
ifdist=1,-1,44
ifdist=2,-1,32
</body> </body>
</Procedure> </Procedure>
...@@ -47,8 +51,10 @@ ...@@ -47,8 +51,10 @@
device=0 device=0
calmux=TotalPower calmux=TotalPower
calOff calOff
ifdist=1,1,44 ifdist=1,1,-1
ifdist=2,1,32 ifdist=2,1,-1
ifdist=2,-1,34
ifdist=1,-1,36
</body> </body>
</Procedure> </Procedure>
...@@ -62,8 +68,10 @@ ...@@ -62,8 +68,10 @@
device=0 device=0
calmux=TotalPower calmux=TotalPower
calOff calOff
ifdist=1,1,44 ifdist=1,1,-1
ifdist=2,1,32 ifdist=2,1,-1
ifdist=1,-1,44
ifdist=2,-1,32
</body> </body>
</Procedure> </Procedure>
...@@ -77,8 +85,10 @@ ...@@ -77,8 +85,10 @@
device=0 device=0
calmux=TotalPower calmux=TotalPower
calOff calOff
ifdist=1,3,44 ifdist=1,3,-1
ifdist=2,3,32 ifdist=2,3,-1
ifdist=1,-1,10
ifdist=2,-1,10
</body> </body>
</Procedure> </Procedure>
...@@ -92,8 +102,10 @@ ...@@ -92,8 +102,10 @@
device=0 device=0
calmux=TotalPower calmux=TotalPower
calOff calOff
ifdist=1,4,44 ifdist=1,5,-1
ifdist=2,3,32 ifdist=2,3,-1
ifdist=1,-1,8
ifdist=2,-1,10
</body> </body>
</Procedure> </Procedure>
...@@ -107,8 +119,10 @@ ...@@ -107,8 +119,10 @@
device=0 device=0
calmux=TotalPower calmux=TotalPower
calOff calOff
ifdist=1,2,22 ifdist=1,2,-1
ifdist=2,2,22 ifdist=2,2,-1
ifdist=1,-1,44
ifdist=2,-1,44
</body> </body>
</Procedure> </Procedure>
...@@ -122,8 +136,10 @@ ...@@ -122,8 +136,10 @@
device=0 device=0
calmux=TotalPower calmux=TotalPower
calOff calOff
ifdist=1,4,44 ifdist=1,4,-1
ifdist=2,4,32 ifdist=2,4,-1
ifdist=1,-1,8
ifdist=2,-1,8
</body> </body>
</Procedure> </Procedure>
...@@ -137,8 +153,10 @@ ...@@ -137,8 +153,10 @@
device=0 device=0
calmux=TotalPower calmux=TotalPower
calOff calOff
ifdist=1,3,44 ifdist=1,5,-1
ifdist=2,5,32 ifdist=2,3,-1
ifdist=1,-1,8
ifdist=2,-1,10
</body> </body>
</Procedure> </Procedure>
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
ControlThreadPeriod="200000" ControlThreadPeriod="200000"
RepetitionCacheTime="2000000" RepetitionCacheTime="2000000"
RepetitionExpireTime="5000000" RepetitionExpireTime="5000000"
CheckMode="true"
CheckOscillation="true" CheckOscillation="true"
OscillationThreshold="0.01" OscillationThreshold="0.01"
OscillationAlarmDuration="2000000" OscillationAlarmDuration="2000000"
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
Feeds="1" Feeds="1"
IFs="2" IFs="2"
Polarization="L R" Polarization="L R"
DefaultLO="6956.0 6956.0" DefaultLO="6936.0 6936.0"
LOMultiplier="1 1" LOMultiplier="1 1"
FixedLO2="0.0 0.0" FixedLO2="0.0 0.0"
LOMin="5000.0 5000.0" LOMin="5000.0 5000.0"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment