Skip to content
Snippets Groups Projects
Commit 507779ee authored by Sebastien Leport's avatar Sebastien Leport
Browse files

- _DEV_TRY added

- 300 ms de temporistaion entre l'ecriture des 2 SCA
parent 7ac7cdad
No related branches found
No related tags found
No related merge requests found
static const char *RcsId = "$Header: /users/chaize/newsvn/cvsroot/Instrumentation/CYBERSTAR/src/CYBERSTARx1000.cpp,v 1.15 2007-10-24 15:37:15 sebleport Exp $";
static const char *RcsId = "$Header: /users/chaize/newsvn/cvsroot/Instrumentation/CYBERSTAR/src/CYBERSTARx1000.cpp,v 1.16 2008-02-19 17:49:08 sebleport Exp $";
//+=============================================================================
//
// file : CYBERSTARx1000.cpp
......@@ -13,9 +13,12 @@ static const char *RcsId = "$Header: /users/chaize/newsvn/cvsroot/Instrumentatio
//
// $Author: sebleport $
//
// $Revision: 1.15 $
// $Revision: 1.16 $
//
// $Log: not supported by cvs2svn $
// Revision 1.15 2007/10/24 15:37:15 sebleport
// - read_lowSca() & read-upSca() added in overloaded dev_state() methods (is usefull for the scanserver interfacing)
//
// Revision 1.14 2007/10/24 14:37:29 sebleport
// - calls of read_lowSca() & read-upSca() removed in overloaded dev_state() methods (was usefull for the scanserver interfacing)
// - add the call of Serial::DevSerFlush() in write_read()
......@@ -194,6 +197,7 @@ namespace CYBERSTARx1000_ns
//------------------------------------------------------------------
serialProxyName="";
tolerance = -1;
// Read device properties from database.(Automatic code generation)
//------------------------------------------------------------------
......@@ -234,11 +238,20 @@ namespace CYBERSTARx1000_ns
//------------------------------------------------------------------
if(serialProxyName=="")
{
Tango::Except::throw_exception(
(const char*) "DATA_OUT_OF_RANGE",
(const char*) "you have to set the right SerialProxyName property.",
(const char*) "CYBERSTARx1000::det_device_property()");
(const char*) "TANGO_CONFIGURATION_ERROR",
(const char*) "SerialProxyName property is empty",
(const char*) "CYBERSTARx1000::get_device_property()");
}
if(tolerance == -1)
{
Tango::Except::throw_exception(
(const char*) "TANGO_CONFIGURATION_ERROR",
(const char*) "tolerance property = -1 (default value)",
(const char*) "CYBERSTARx1000::get_device_property()");
}
}
//+----------------------------------------------------------------------------
//
......@@ -329,15 +342,20 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
if(attr_scaUpperThreshold_write<=10 && attr_scaLowerThreshold_write>=0 )
{
//wait for cyberstar to process command
omni_thread::sleep(0,100000000); // in nanoseconds -> 250 ms
response = write_read(":SENS0:SCA:UPP "+ high_level,false);
omni_thread::sleep(0,300000000); // in nanoseconds -> 250 ms
//wait for cyberstar to process command
omni_thread::sleep(0,1000000000); // in nanoseconds -> 250 ms
_DEV_TRY(
response = write_read(":SENS0:SCA:UPP "+ high_level,false),
"write sca upper threshold",
"CYBERSTARx1000::write_windowCenterPosition()");
response = write_read(":SENS0:SCA:LOW "+ low_level,false);
//wait for cyberstar to process command
//omni_thread::sleep(0,250000000); // in nanoseconds -> 250 ms
omni_thread::sleep(0,300000000); // in nanoseconds -> 250 ms
_DEV_TRY(
response = write_read(":SENS0:SCA:LOW "+ low_level,false),
"write sca lower threshold",
"CYBERSTARx1000::write_windowCenterPosition()");
}
else
{
......@@ -366,18 +384,10 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
{
DEBUG_STREAM << "CYBERSTARx1000::read_voltage(Tango::Attribute &attr) entering... "<< endl;
try
{
response = write_read(":SOUR0:VOLT?",true);
}
catch(Tango::DevFailed &df)
{
Tango::Except::re_throw_exception(df,
(const char*) "CONNECTION_ERROR",
(const char*) "reading failure on hardware",
(const char*) "CYBERSTARx1000::read_voltage()");
}
_DEV_TRY(
response = write_read(":SOUR0:VOLT?",true),
"read high voltage",
"CYBERSTARx1000::read_voltage()");
response = process_string(response);
......@@ -400,9 +410,10 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
std::string preset = XString<double>::convertToString(attr_voltage_write);
write_read(":SOUR0:VOLT "+ preset,false);
_DEV_TRY(
write_read(":SOUR0:VOLT "+ preset,false),
"write high voltage",
"CYBERSTARx1000::write_voltage()");
}
//+----------------------------------------------------------------------------
......@@ -416,18 +427,11 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
{
DEBUG_STREAM << "CYBERSTARx1000::read_forcedRemoteMode(Tango::Attribute &attr) entering... "<< endl;
try
{
response = write_read(":SYST0:COMM:REM?",true);
}
catch(Tango::DevFailed &df)
{
_DEV_TRY(
response = write_read(":SYST0:COMM:REM?",true),
"read remote state",
"CYBERSTARx1000::read_forcedRemoteMode()");
Tango::Except::re_throw_exception(df,
(const char*) "CONNECTION_ERROR",
(const char*) "reading failure on hardware",
(const char*) "CYBERSTARx1000::read_forcedRemoteMode()");
}
response = process_string(response);
int forced_remote = XString<int>::convertFromString(response);
......@@ -458,11 +462,20 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
{
DEBUG_STREAM << "CYBERSTARx1000::write_forcedRemoteMode(Tango::WAttribute &attr) entering... "<< endl;
if(*attr_forcedRemoteMode_read == true)
write_read(":SYST0:COMM:REM OFF",false);
else if(*attr_forcedRemoteMode_read == false)
write_read(":SYST0:COMM:REM ON",false);
if(attr_forcedRemoteMode_write == false)
{
_DEV_TRY(
write_read(":SYST0:COMM:REM OFF",false),
"set front of mode",
"CYBERSTARx1000::write_forcedRemoteMode()");
}
else if(attr_forcedRemoteMode_write == true)
{
_DEV_TRY(
write_read(":SYST0:COMM:REM ON",false),
"set remote control mode",
"CYBERSTARx1000::write_forcedRemoteMode()");
}
}
//+----------------------------------------------------------------------------
......@@ -476,25 +489,16 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
{
DEBUG_STREAM << "CYBERSTARx1000::read_amplifierGain(Tango::Attribute &attr) entering... "<< endl;
try
{
response = write_read(":INP0:GAIN?",true);
}
catch(Tango::DevFailed &df)
{
Tango::Except::re_throw_exception(df,
(const char*) "CONNECTION_ERROR",
(const char*) "reading failure on hardware",
(const char*) "CYBERSTARx1000::read_amplifierGain()");
}
_DEV_TRY(
response = write_read(":INP0:GAIN?",true),
"read gain",
"CYBERSTARx1000::read_amplifierGain()");
response = process_string(response);
*attr_amplifierGain_read = XString<double>::convertFromString(response);
attr.set_value(attr_amplifierGain_read);
}
//+----------------------------------------------------------------------------
......@@ -512,7 +516,10 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
preset = XString<double>::convertToString(attr_amplifierGain_write);
write_read(":INP0:GAIN "+ preset,false);
_DEV_TRY(
write_read(":INP0:GAIN "+ preset,false),
"write gain",
"CYBERSTARx1000::write_amplifierGain()");
}
//+----------------------------------------------------------------------------
......@@ -526,18 +533,11 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
{
DEBUG_STREAM << "CYBERSTARx1000::read_peakingTime(Tango::Attribute &attr) entering... "<< endl;
try
{
response = write_read(":SENS0:PKT?",true);
}
catch(Tango::DevFailed &df)
{
_DEV_TRY(
response = write_read(":SENS0:PKT?",true),
"read peaking Time",
"CYBERSTARx1000::read_peakingTime()");
Tango::Except::re_throw_exception(df,
(const char*) "CONNECTION_ERROR",
(const char*) "reading failure on hardware",
(const char*) "CYBERSTARx1000::read_peakingTime()");
}
response = process_string(response);
*attr_peakingTime_read = XString<double>::convertFromString(response);
......@@ -561,11 +561,13 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
double pkt = attr_peakingTime_write;
if(pkt==300 || pkt==500 || pkt==1000 || pkt==3000)
{
preset = XString<double>::convertToString(pkt);
write_read(":SENS0:PKT "+ preset,false);
_DEV_TRY(
write_read(":SENS0:PKT "+ preset,false),
"write peaking Time",
"CYBERSTARx1000::write_peakingTime()");
}
else
......@@ -589,7 +591,11 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
{
DEBUG_STREAM << "CYBERSTARx1000::read_scaUpperThreshold(Tango::Attribute &attr) entering... "<< endl;
read_upper();
_DEV_TRY(
read_upper(),
"read upper thresold",
"CYBERSTARx1000::read_scaUpperThreshold()");
attr.set_value(attr_scaUpperThreshold_read);
}
......@@ -610,7 +616,11 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
if(attr_scaUpperThreshold_write > *attr_scaLowerThreshold_read)
{
preset = XString<double>::convertToString(attr_scaUpperThreshold_write);
write_read(":SENS0:SCA:UPP "+ preset,false);
_DEV_TRY(
write_read(":SENS0:SCA:UPP "+ preset,false),
"write SCA upper thresold",
"CYBERSTARx1000::write_scaUpperThreshold()");
}
else
{
......@@ -631,7 +641,11 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
{
DEBUG_STREAM << "CYBERSTARx1000::read_scaLowerThreshold(Tango::Attribute &attr) entering... "<< endl;
read_lower();
_DEV_TRY(
read_lower(),
"read lower thresold",
"CYBERSTARx1000::read_scaLowerThreshold()");
attr.set_value(attr_scaLowerThreshold_read);
}
......@@ -652,7 +666,11 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
if (attr_scaLowerThreshold_write < *attr_scaUpperThreshold_read)
{
preset = XString<double>::convertToString(attr_scaLowerThreshold_write);
write_read(":SENS0:SCA:LOW "+ preset,false);
_DEV_TRY(
write_read(":SENS0:SCA:LOW "+ preset,false),
"write SCA lower thresold",
"CYBERSTARx1000::write_scaLowerThreshold()");
}
else
......@@ -685,8 +703,7 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
string response="";
long nb_char_written,mode=2;
try
{
// Construct a dedicated DevVarCharArray with validation char <LF>
Tango::DevVarCharArray *LF = new Tango::DevVarCharArray();
LF->length(1);
......@@ -702,48 +719,36 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
if(!init_CYBERSTARx1000_done)
{
init_CYBERSTARx1000();
mySerial->command_in("DevSerFlush",mode);
_DEV_TRY(
mySerial->command_in("DevSerFlush",mode),
"flush buffer",
"CYBERSTARx1000::write_read()");
}
//- send command
mySerial->command_inout("DevSerWriteString", cmd_to_send.c_str(),nb_char_written);
_DEV_TRY(
mySerial->command_inout("DevSerWriteString", cmd_to_send.c_str(),nb_char_written),
"send command",
"CYBERSTARx1000::write_read()");
// omni_thread::sleep(0,250000000); // in nanoseconds -> 250 ms
_DEV_TRY(
mySerial->command_inout("DevSerWriteChar",LF,nb_char_written),
"send LF character",
"CYBERSTARx1000::write_read()");
mySerial->command_inout("DevSerWriteChar",LF,nb_char_written);
//- response expected
if (read_required)
{
// omni_thread::sleep(0,250000000); // in nanoseconds -> 250 ms
long readMode = 2; //- SL_LINE : waits for LF (newline set in device Serial)
mySerial->command_inout("DevSerReadString", readMode, response);
}
return string(response);
}//endtry
catch(Tango::DevFailed &df)
{
ERROR_STREAM << df << std::endl;
set_state(Tango::FAULT);
set_status("No communication with the Serial line device");
if(mySerial)
{
delete mySerial;
mySerial=0;
_DEV_TRY(
mySerial->command_inout("DevSerReadString", readMode, response),
"read response",
"CYBERSTARx1000::write_read()");
}
Tango::Except::re_throw_exception(df,
(const char*) "CONNECTION_ERROR",
(const char*) "Cannot send or read data on the SerialLine device ",
(const char*) "CYBERSTARx1000::write_read()");
}//end catch
return string(response);
}//end function
// **************************************************************************
......@@ -762,7 +767,11 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
init_CYBERSTARx1000_done = true;
// forced remote mode
write_read(":SYST0:COMM:REM ON",false);
_DEV_TRY(
write_read(":SYST0:COMM:REM ON",false),
"force remote mode",
"CYBERSTARx1000::init_CYBERSTARx1000()");
*attr_forcedRemoteMode_read = true;
}// end function
......@@ -840,21 +849,14 @@ void CYBERSTARx1000::write_windowCenterPosition(Tango::WAttribute &attr)
//+------------------------------------------------------------------
void CYBERSTARx1000::read_lower()
{
try
{
response = write_read(":SENS0:SCA:LOW?",true);
_DEV_TRY(
response = write_read(":SENS0:SCA:LOW?",true),
"read sca lower threshold",
"CYBERSTARx1000::read_lower()");
response = process_string(response);
*attr_scaLowerThreshold_read = XString<double>::convertFromString(response);
}
catch(Tango::DevFailed &df)
{
Tango::Except::re_throw_exception(df,
(const char*) "CONNECTION_ERROR",
(const char*) "reading failure on hardware ",
(const char*) "CYBERSTARx1000::read_scaLowerThreshold()");
}
}
//+------------------------------------------------------------------
/**
......@@ -868,21 +870,14 @@ void CYBERSTARx1000::read_lower()
//+------------------------------------------------------------------
void CYBERSTARx1000::read_upper()
{
try
{
response = write_read(":SENS0:SCA:UPP?",true);
_DEV_TRY(
response = write_read(":SENS0:SCA:UPP?",true),
"read sca upper threshold",
"CYBERSTARx1000::read_upper()");
response = process_string(response);
*attr_scaUpperThreshold_read = XString<double>::convertFromString(response);
}
catch(Tango::DevFailed &df)
{
Tango::Except::re_throw_exception(df,
(const char*) "CONNECTION_ERROR",
(const char*) "reading failure on hardware ",
(const char*) "CYBERSTARx1000::read_scaUpperThreshold()");
}
}
//+------------------------------------------------------------------
/**
......@@ -906,8 +901,15 @@ Tango::DevState CYBERSTARx1000::dev_state()
Tango::Attribute &high_threshold = dev_attr->get_attr_by_name("scaUpperThreshold");
// update attributes SCA threshold, useful with scan server interfacing
read_lower();
read_upper();
_DEV_TRY(
read_lower(),
"read sca lower threshold",
"CYBERSTARx1000::read_lower()");
_DEV_TRY(
read_upper(),
"read sca upper threshold",
"CYBERSTARx1000::read_upper()");
double borneLowerPlus = (this->attr_windowCenterPosition_write - this->attr_windowWidth_write/2)*(2 - (tolerance/100));
double borneLowerMoins = (this->attr_windowCenterPosition_write - this->attr_windowWidth_write/2)*tolerance/100 ;
......@@ -920,9 +922,6 @@ Tango::DevState CYBERSTARx1000::dev_state()
INFO_STREAM << "borne upper plus = " << XString<double>::convertToString(borneUpperPlus) << endl;
INFO_STREAM << " " << endl;
if(mySerial)
{
if((
*this->attr_scaLowerThreshold_read <= borneLowerMoins
)
......@@ -946,14 +945,6 @@ Tango::DevState CYBERSTARx1000::dev_state()
set_status("CYBERSTAR is waiting for request");
}
}
else
{
argout=Tango::FAULT;
set_status("Communication broken with the Serial Device");
}
return argout;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment