From 35d59683654e11f37fa9d6f326e1d8d078c0e799 Mon Sep 17 00:00:00 2001 From: Xavier Elattaoui <xavier.elattaoui@synchrotron-soleil.fr> Date: Mon, 19 Jan 2009 12:00:25 +0000 Subject: [PATCH] xavier : - MCCE2 (Novelec part) : methods to change the active channel to communicate with. --- include/AbstractElectrometerClass.h | 89 ++++++++++++++++------------- include/ElectrometerProtocol.h | 9 ++- include/NovelecProtocol.h | 2 + src/AbstractElectrometerClass.cpp | 29 ++++++++-- src/ElectrometerProtocol.cpp | 21 +++++++ src/NovelecProtocol.cpp | 17 +++--- 6 files changed, 112 insertions(+), 55 deletions(-) diff --git a/include/AbstractElectrometerClass.h b/include/AbstractElectrometerClass.h index 0d82073..0f34ce8 100644 --- a/include/AbstractElectrometerClass.h +++ b/include/AbstractElectrometerClass.h @@ -9,9 +9,14 @@ // // $Author: xavela $ // -// $Revision: 1.13 $ +// $Revision: 1.14 $ // // $Log: not supported by cvs2svn $ +// Revision 1.13 2008/06/20 14:36:24 xavela +// xavier : +// - DDC status show only errors if any +// - added command to get DDC model configuration +// // Revision 1.12 2008/05/14 09:42:37 xavela // xavier : // - attributes management : @@ -108,11 +113,11 @@ public: /** * \brief Electrometer common functions. */ - virtual void range_up (void) = 0; - virtual void range_down (void) = 0; - virtual void reset (void); - virtual void local (void); - virtual void remote (void); + virtual void range_up (void) = 0; + virtual void range_down (void) = 0; + virtual void reset (void); + virtual void local (void); + virtual void remote (void); /** * \brief Electrometer : cmd to get electrometer data. @@ -124,62 +129,62 @@ public: /** * \brief Keithley Electrometer methods */ - void autoRange_on (void); + void autoRange_on (void); void zero_check_on (void); void zero_check_off (void); void zero_correct_on (void); void zero_correct_off (void); - void auto_zero_on (void); + void auto_zero_on (void); void auto_zero_off (void); - virtual void autoRange_off (void); + virtual void autoRange_off (void); virtual void setAmperMeterMode (void); - virtual void setVoltMeterMode (void); - virtual void setOhmMeterMode (void); + virtual void setVoltMeterMode (void); + virtual void setOhmMeterMode (void); virtual void setCoulombMeterMode(void); /** * \brief Following functions are only supported for SCPI protocol * */ - void abort (void); + void abort (void); virtual void init_keithley (void); - void clear_registers (void); - void averageStateON (void); - void averageStateOFF (void); - virtual void set_knplc (float nPLC); + void clear_registers (void); + void averageStateON (void); + void averageStateOFF (void); + virtual void set_knplc (float nPLC); virtual void set_triggercount (short trigcounts); - void set_triggerdelay (std::string trigdelay); - void set_triggerdelayAuto (std::string trigdelAuto); - virtual void set_averagecount (std::string avercounts); - virtual void set_averagecontrol (std::string averctrl); - std::string get_knplc (void); + void set_triggerdelay (std::string trigdelay); + void set_triggerdelayAuto (std::string trigdelAuto); + virtual void set_averagecount (std::string avercounts); + virtual void set_averagecontrol (std::string averctrl); + std::string get_knplc (void); std::string get_triggercount (void); std::string get_triggerdelay (void); std::string get_triggerdelayAuto(void); virtual std::string get_averagecount (void); - virtual std::string get_averagecontrol(void); - virtual void clear_buffer (void); - virtual void store_raw_input (void); - virtual void start_storing (void); - void enable_SRQBufferFull (void); - void disable_SRQBufferFull (void); - virtual bool SRQLineState (void); //- used to know if the integration cycle is done! - virtual short readStatusByteRegister (void); //- device status byte register value on SRQ! - bool get_overloadRangeState (void); //- used to know if the device range is overloaded (DDC Keithley ONLY)! - virtual void set_buffer_size (short); - virtual void set_triggerMode (short); - virtual void set_integrationTime (double); - virtual short get_buffer_size (void); - virtual short get_triggerMode (void) { return _trigMod;}; + virtual std::string get_averagecontrol (void); + virtual void clear_buffer (void); + virtual void store_raw_input (void); + virtual void start_storing (void); + void enable_SRQBufferFull (void); + void disable_SRQBufferFull (void); + virtual bool SRQLineState (void); //- used to know if the integration cycle is done! + virtual short readStatusByteRegister (void); //- device status byte register value on SRQ! + bool get_overloadRangeState (void); //- used to know if the device range is overloaded (DDC Keithley ONLY)! + virtual void set_buffer_size (short); + virtual void set_triggerMode (short); + virtual void set_integrationTime (double); + virtual short get_buffer_size (void); + virtual short get_triggerMode (void) { return _trigMod;}; /** * \brief Novelec Electrometer methods * * Following functions are only supported for Novelec Protocol */ - virtual void set_Zero_VonF_function (void); - virtual void set_Offset_ZeroV1_function (void); - virtual void set_Leakage_ZeroV2_function(void); + virtual void set_Zero_VonF_function (void); + virtual void set_Offset_ZeroV1_function (void); + virtual void set_Leakage_ZeroV2_function (void); virtual void set_Test_function (void); virtual void set_Measure_function (void); virtual void mcce_on (void); @@ -191,9 +196,11 @@ public: virtual std::string get_ElectroMeterPolarity (void); virtual std::string get_ElectroMeterFrequency (void); virtual std::string get_ElectroMeterGain (void); - virtual void set_ElectroMeterPolarity (std::string pola); - virtual void set_ElectroMeterFrequency (std::string freq); - virtual void set_ElectroMeterGain (std::string gain); + virtual unsigned short get_ElectroChannel (void); + virtual void set_ElectroMeterPolarity (std::string pola); + virtual void set_ElectroMeterFrequency (std::string freq); + virtual void set_ElectroMeterGain (std::string gain); + virtual void set_ElectroChannel (unsigned short address); /** * \brief Electrometer Status and State. diff --git a/include/ElectrometerProtocol.h b/include/ElectrometerProtocol.h index 7a005f6..b539a9b 100644 --- a/include/ElectrometerProtocol.h +++ b/include/ElectrometerProtocol.h @@ -12,9 +12,14 @@ // // $Author: xavela $ // -// $Revision: 1.10 $ +// $Revision: 1.11 $ // // $Log: not supported by cvs2svn $ +// Revision 1.10 2008/06/20 14:36:24 xavela +// xavier : +// - DDC status show only errors if any +// - added command to get DDC model configuration +// // Revision 1.9 2008/04/15 12:52:00 xavela // xavier : // - SRQ management changed : @@ -204,6 +209,8 @@ public: virtual void set_polarity (std::string pola); virtual void set_frequency (std::string freq); virtual void set_gain (std::string gain); + virtual unsigned short get_electrometer_active_channel(void); + virtual void set_electrometer_active_channel (unsigned short address); diff --git a/include/NovelecProtocol.h b/include/NovelecProtocol.h index 26a2f09..7ebd93f 100644 --- a/include/NovelecProtocol.h +++ b/include/NovelecProtocol.h @@ -86,6 +86,8 @@ public: void set_polarity (std::string pola); void set_frequency (std::string freq); void set_gain (std::string gain); + void set_electrometer_active_channel(unsigned short channel_add) { this->_devAdd = channel_add;}; + unsigned short get_electrometer_active_channel(void) { return this->_devAdd;}; /** * \brief init the MCCE-2 device : diff --git a/src/AbstractElectrometerClass.cpp b/src/AbstractElectrometerClass.cpp index 34723b8..906567b 100644 --- a/src/AbstractElectrometerClass.cpp +++ b/src/AbstractElectrometerClass.cpp @@ -11,9 +11,14 @@ // // $Author: xavela $ // -// $Revision: 1.14 $ +// $Revision: 1.15 $ // // $Log: not supported by cvs2svn $ +// Revision 1.14 2008/06/20 14:36:23 xavela +// xavier : +// - DDC status show only errors if any +// - added command to get DDC model configuration +// // Revision 1.13 2008/05/14 09:42:37 xavela // xavier : // - attributes management : @@ -103,9 +108,9 @@ AbstractElectrometerClass::AbstractElectrometerClass (std::string comLink_device : _device_proxy_name(comLink_device_name), _range(0), _rangeStr("NOT INITIALISED"), - _mode("NOT INITIALISED"), - _size(-1), - _trigMod(-1), + _mode("NOT INITIALISED"), + _size(-1), + _trigMod(-1), electrometerState(UNKNOWN) { // std::cout << "AbstractElectrometerClass::AbstractElectrometerClass <-" << std::endl; @@ -714,3 +719,19 @@ void AbstractElectrometerClass::mcce_init (void) _electrometerProtocol->init_MCCE2_for_communication( ); } +// ============================================================================ +// AbstractElectrometerClass::set_ElectroChannel +// ============================================================================ +void AbstractElectrometerClass::set_ElectroChannel (unsigned short address) +{ + _electrometerProtocol->set_electrometer_active_channel(address); +} + +// ============================================================================ +// AbstractElectrometerClass::get_ElectroChannel +// ============================================================================ +unsigned short AbstractElectrometerClass::get_ElectroChannel (void) +{ + return _electrometerProtocol->get_electrometer_active_channel(); +} + diff --git a/src/ElectrometerProtocol.cpp b/src/ElectrometerProtocol.cpp index 8609e4d..63e9ac3 100644 --- a/src/ElectrometerProtocol.cpp +++ b/src/ElectrometerProtocol.cpp @@ -719,3 +719,24 @@ std::string ElectrometerProtocol::get_DDC_configuration (void) "This Electrometer does not support this command.", "ElectrometerProtocol::get_configuration( )."); } + +// ============================================================================ +// ElectrometerProtocol::set_electrometer_active_channel +// ============================================================================ +void ElectrometerProtocol::set_electrometer_active_channel (unsigned short ) +{ + throw electrometer::ElectrometerException("COMMAND_NOT_SUPPORTED", + "This Electrometer does not support this command.", + "ElectrometerProtocol::set_electrometer_active_channel( )."); +} + +// ============================================================================ +// ElectrometerProtocol::get_electrometer_active_channel +// ============================================================================ +unsigned short ElectrometerProtocol::get_electrometer_active_channel (void) +{ + throw electrometer::ElectrometerException("COMMAND_NOT_SUPPORTED", + "This Electrometer does not support this command.", + "ElectrometerProtocol::get_electrometer_active_channel( )."); +} + diff --git a/src/NovelecProtocol.cpp b/src/NovelecProtocol.cpp index ba1b9c7..2bb8de6 100644 --- a/src/NovelecProtocol.cpp +++ b/src/NovelecProtocol.cpp @@ -568,17 +568,16 @@ std::string data; // -> "address ACK " : if command well understood //- An invalid response is: "address NAK ..." + if(_is_measure_mode_on) + throw electrometer::ElectrometerException("COMMAND_NOT_ALLOWED", + "Cannot change parameter(s) when MEASURE mode enabled.", + "NovelecProtocol::check_command( )."); + if(response.find("NAK") != std::string::npos) { - if(_is_measure_mode_on) - throw electrometer::ElectrometerException("COMMAND_NOT_ALLOWED", - "Cannot change parameter(s) when MEASURE mode enabled.", - "NovelecProtocol::check_command( )."); - - else - throw electrometer::ElectrometerException("COMMAND_NOT_UNDERSTOOD", - "Bad formatted string command sent -> NAK received !", - "NovelecProtocol::check_command( )."); + throw electrometer::ElectrometerException("COMMAND_NOT_UNDERSTOOD", + "Bad formatted string command sent -> NAK received !", + "NovelecProtocol::check_command( )."); } else if(response.find("ACK") != std::string::npos) -- GitLab