From 2f01832f400fc8b239ed42623efe6cbc5c38b9bf Mon Sep 17 00:00:00 2001 From: Xavier Elattaoui <xavier.elattaoui@synchrotron-soleil.fr> Date: Fri, 8 Feb 2008 17:24:34 +0000 Subject: [PATCH] xavier : for DDC part - trigger mode and buffer size management added. - TODO: DDC/SCPI integration time for ScanServer compatibility. SRQ management for Keithley Integration mode --- include/AbstractElectrometerClass.h | 76 ++++++++++++++++------------- include/ElectrometerProtocol.h | 10 +++- include/KeithleyDDCProtocol.h | 3 +- include/KeithleySCPIProtocol.h | 20 ++++---- include/Keithley_485.h | 9 +++- include/Keithley_486.h | 2 + include/Keithley_487.h | 13 +++-- include/Keithley_617.h | 16 +++--- include/Keithley_6512.h | 16 +++--- src/AbstractElectrometerClass.cpp | 36 ++++++++++++-- src/ElectrometerProtocol.cpp | 12 ++++- src/KeithleyDDCProtocol.cpp | 18 +++++++ src/KeithleySCPIProtocol.cpp | 6 +-- src/Keithley_485.cpp | 23 +++++++++ src/Keithley_486.cpp | 35 +++++++++++++ src/Keithley_487.cpp | 36 ++++++++++++++ src/Keithley_617.cpp | 35 +++++++++++++ src/Keithley_6512.cpp | 36 ++++++++++++++ 18 files changed, 326 insertions(+), 76 deletions(-) diff --git a/include/AbstractElectrometerClass.h b/include/AbstractElectrometerClass.h index f6fdb2c..0eea71f 100644 --- a/include/AbstractElectrometerClass.h +++ b/include/AbstractElectrometerClass.h @@ -9,9 +9,13 @@ // // $Author: xavela $ // -// $Revision: 1.3 $ +// $Revision: 1.4 $ // // $Log: not supported by cvs2svn $ +// Revision 1.3 2007/11/28 10:37:30 xavela +// compile en MODE debug -> +// modifier le(s) MakeFile ! +// // Revision 1.2 2007/11/27 10:17:46 xavela // xavier : // - modif done on Novelec part : @@ -53,7 +57,7 @@ public: * \brief Electrometer common functions. */ virtual void range_up (void) = 0; - virtual void range_down (void) = 0; + virtual void range_down (void) = 0; virtual void reset (void); virtual void local (void); virtual void remote (void); @@ -62,23 +66,23 @@ public: * \brief Electrometer : cmd to get electrometer data. */ std::string get_value (void); - virtual std::vector<double> get_integratedValue (void); - virtual std::vector<double> get_fetchValue (void); + virtual std::vector<double> get_integratedValue (void); + virtual std::vector<double> get_fetchValue (void); /** * \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 setAmperMeterMode (void); - virtual void setVoltMeterMode (void); - virtual void setOhmMeterMode (void); + virtual void autoRange_off (void); + virtual void setAmperMeterMode (void); + virtual void setVoltMeterMode (void); + virtual void setOhmMeterMode (void); virtual void setCoulombMeterMode(void); /** @@ -89,49 +93,51 @@ public: void clear_registers (void); void averageStateON (void); void averageStateOFF (void); - void set_knplc (std::string nPLC); + void set_knplc (std::string nPLC); void set_triggercount (std::string trigcounts); void set_triggerdelay (std::string trigdelay); void set_triggerdelayAuto (std::string trigdelAuto); - void set_averagecount (std::string avercounts); - void set_averagecontrol (std::string averctrl); - std::string get_knplc (void); + void set_averagecount (std::string avercounts); + 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); std::string get_averagecount (void); - std::string get_averagecontrol (void); - void set_buffer_size (void); - void clear_buffer (void); - void store_raw_input (void); - void start_storing (void); - void enable_SRQBufferFull (void); + std::string get_averagecontrol(void); + void clear_buffer (void); + void store_raw_input (void); + void start_storing (void); + void enable_SRQBufferFull (void); void disable_SRQBufferFull (void); std::string readStatusByteRegister (void); //- used to know if the integration cycle is done! 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); /** * \brief Novelec Electrometer methods * * Following functions are only supported for Novelec Protocol */ - virtual void set_Zero_VonF_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); - virtual void mcce_off (void); - virtual void mcce_init (void); + virtual void set_Test_function (void); + virtual void set_Measure_function (void); + virtual void mcce_on (void); + virtual void mcce_off (void); + virtual void mcce_init (void); /** * \brief Novelec getters and setters */ - 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 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 void set_ElectroMeterGain (std::string gain); /** * \brief Electrometer Status and State. @@ -141,8 +147,8 @@ public: /** * \brief Common getters and setters */ - virtual std::string get_ElectroMeterMode (void); - virtual std::string get_ElectroMeterRange (void); + virtual std::string get_ElectroMeterMode (void); + virtual std::string get_ElectroMeterRange (void); protected : @@ -162,11 +168,11 @@ protected : void set_electroState(ElectroState newState) { electrometerState = newState; }; - short _range; + short _range; std::string _rangeStr; std::string _mode; - ElectrometerProtocol* _electrometerProtocol; std::string _device_proxy_name; + ElectrometerProtocol* _electrometerProtocol; private : public : diff --git a/include/ElectrometerProtocol.h b/include/ElectrometerProtocol.h index 36d659c..0eb8fc0 100644 --- a/include/ElectrometerProtocol.h +++ b/include/ElectrometerProtocol.h @@ -12,9 +12,14 @@ // // $Author: xavela $ // -// $Revision: 1.2 $ +// $Revision: 1.3 $ // // $Log: not supported by cvs2svn $ +// Revision 1.2 2007/11/27 10:17:46 xavela +// xavier : +// - modif done on Novelec part : +// init_MCCE2() added +// // Revision 1.1 2007/07/09 13:20:35 stephle // initial import // @@ -84,6 +89,7 @@ public: virtual void set_knplc (std::string nPLC); virtual void set_triggercount (std::string trigcounts); virtual void set_triggerdelay (std::string trigdelay); + virtual void set_triggerMode (std::string); virtual void set_triggerdelayAuto (std::string trigdelAuto); virtual void set_averagecount (std::string avercounts); virtual void set_averagecontrol (std::string averctrl); @@ -113,7 +119,7 @@ public: /** * \brief Electrometer : Buffer config */ - virtual void set_buffer_size (void); + virtual void set_buffer_size (std::string size); virtual void clear_buffer (void); virtual void store_raw_input (void); virtual void start_storing (void); diff --git a/include/KeithleyDDCProtocol.h b/include/KeithleyDDCProtocol.h index 18843d5..5ab6052 100644 --- a/include/KeithleyDDCProtocol.h +++ b/include/KeithleyDDCProtocol.h @@ -90,9 +90,10 @@ public: std::string get_range (void); bool get_overloadRangeState (void) { return _is_overloaded; };//- used to know if the device range is overloaded! + void set_buffer_size (std::string); + void set_triggerMode (std::string); /* TODO : for next PicoLib evolution //- CMD B -// virtual void reading_mode (void); virtual void reading_source (void); //- CMD Q virtual void data_store (void); diff --git a/include/KeithleySCPIProtocol.h b/include/KeithleySCPIProtocol.h index 76ac51a..6ecadac 100644 --- a/include/KeithleySCPIProtocol.h +++ b/include/KeithleySCPIProtocol.h @@ -76,33 +76,33 @@ public: std::string get_value (void); std::vector<double> get_integratedValue (void); std::vector<double> get_fetchValue (void); - std::string readStatusByteRegister (void); //- used to know if the integration cycle is done! + std::string readStatusByteRegister (void); //- used to know if the integration cycle is done! void init_keithley (void); /** * \brief Electrometer : Acquisition config */ - void set_knplc (std::string nPLC); - void set_triggercount (std::string trigcounts); - void set_triggerdelay (std::string trigdelay); + void set_knplc (std::string nPLC); + void set_triggercount (std::string trigcounts); + void set_triggerdelay (std::string trigdelay); void set_triggerdelayAuto (std::string trigdelAuto); void set_averagecount (std::string avercounts); void set_averagecontrol (std::string averctrl); void averageStateON (void); void averageStateOFF (void); std::string get_knplc (void); - std::string get_triggercount (void); - std::string get_triggerdelay (void); + std::string get_triggercount (void); + std::string get_triggerdelay (void); std::string get_triggerdelayAuto(void); std::string get_averagecount (void); std::string get_averagecontrol (void); /** * \brief Electrometer : Buffer config */ - void set_buffer_size (void); - void clear_buffer (void); - void store_raw_input (void); - void start_storing (void); + void set_buffer_size (std::string size); + void clear_buffer (void); + void store_raw_input (void); + void start_storing (void); void enable_SRQBufferFull (void); void disable_SRQBufferFull (void); diff --git a/include/Keithley_485.h b/include/Keithley_485.h index cf0adee..7623bf5 100644 --- a/include/Keithley_485.h +++ b/include/Keithley_485.h @@ -17,7 +17,7 @@ #include "AbstractElectrometerClass.h" /** - * \addtogroup DDC Keithley + * \addtogroup DDC_Keithley * @{ */ @@ -45,9 +45,14 @@ public: /** * \brief Device dependent commands. */ - void range_up (void); + void range_up (void); void range_down (void); + /** + * \brief Trigger Mode Command + */ + void set_triggerMode (short); + /** * \brief getter(s) & setter(s) */ diff --git a/include/Keithley_486.h b/include/Keithley_486.h index ec9565e..2e9c4fe 100644 --- a/include/Keithley_486.h +++ b/include/Keithley_486.h @@ -48,6 +48,8 @@ public: void range_up (void); void range_down (void); void autoRange_off (void); + void set_buffer_size(short); + void set_triggerMode(short); /** * \brief getter(s) & setter(s) diff --git a/include/Keithley_487.h b/include/Keithley_487.h index 75b18aa..b5b1470 100644 --- a/include/Keithley_487.h +++ b/include/Keithley_487.h @@ -17,7 +17,7 @@ #include "AbstractElectrometerClass.h" /** - * \addtogroup DDC Keithley + * \addtogroup DDC_Keithley * @{ */ @@ -45,10 +45,13 @@ public: /** * \brief Electrometer methods. */ - void range_up (void); - void range_down (void); - void autoRange_off (void); - /** + void range_up (void); + void range_down (void); + void autoRange_off (void); + void set_buffer_size(short); + void set_triggerMode(short); + + /** * \brief Electrometer Function(s). */ void setAmperMeterMode (void); diff --git a/include/Keithley_617.h b/include/Keithley_617.h index 2fe4314..b289dd5 100644 --- a/include/Keithley_617.h +++ b/include/Keithley_617.h @@ -45,17 +45,19 @@ public: /** * \brief Device dependent commands. */ - void autoRange_off (void); - void range_up (void); - void range_down (void); + void autoRange_off (void); + void range_up (void); + void range_down (void); + void set_buffer_size (short not_used); + void set_triggerMode (short); /** * \brief Electrometer Mode. */ - void setAmperMeterMode (void); - void setVoltMeterMode (void); - void setOhmMeterMode (void); - void setCoulombMeterMode (void); + void setAmperMeterMode (void); + void setVoltMeterMode (void); + void setOhmMeterMode (void); + void setCoulombMeterMode(void); /** * \brief getter(s) & setter(s) diff --git a/include/Keithley_6512.h b/include/Keithley_6512.h index 394e6ef..8601813 100644 --- a/include/Keithley_6512.h +++ b/include/Keithley_6512.h @@ -45,17 +45,19 @@ public: /** * \brief Device dependent commands. */ - void autoRange_off (void); - void range_up (void); - void range_down (void); + void autoRange_off (void); + void range_up (void); + void range_down (void); + void set_buffer_size (short not_used); + void set_triggerMode (short); /** * \brief Electrometer Mode. */ - void setAmperMeterMode (void); - void setVoltMeterMode (void); - void setOhmMeterMode (void); - void setCoulombMeterMode (void); + void setAmperMeterMode (void); + void setVoltMeterMode (void); + void setOhmMeterMode (void); + void setCoulombMeterMode(void); /** * \brief getter(s) & setter(s) diff --git a/src/AbstractElectrometerClass.cpp b/src/AbstractElectrometerClass.cpp index fbe2302..846bafb 100644 --- a/src/AbstractElectrometerClass.cpp +++ b/src/AbstractElectrometerClass.cpp @@ -11,9 +11,13 @@ // // $Author: xavela $ // -// $Revision: 1.4 $ +// $Revision: 1.5 $ // // $Log: not supported by cvs2svn $ +// Revision 1.4 2007/11/28 10:37:20 xavela +// compile en MODE debug -> +// modifier le(s) MakeFile ! +// // Revision 1.3 2007/11/27 15:23:02 xavela // xavier : // - modif done on Novelec part : @@ -163,6 +167,16 @@ std::string AbstractElectrometerClass::get_knplc (void) return _electrometerProtocol->get_knplc( ); } +// ============================================================================ +// AbstractElectrometerClass::set_triggerMode +// ============================================================================ +void AbstractElectrometerClass::set_triggerMode (short) +{ + throw electrometer::ElectrometerException("COMMAND_NOT_SUPPORTED", + "This Electrometer does not support this command.", + "AbstractElectrometerClass::set_triggerMode( )."); +} + // ============================================================================ // AbstractElectrometerClass::set_triggercount // ============================================================================ @@ -373,9 +387,25 @@ std::string AbstractElectrometerClass::electrometer_status (void) // ============================================================================ // AbstractElectrometerClass::set_buffer_size // ============================================================================ -void AbstractElectrometerClass::set_buffer_size (void) +void AbstractElectrometerClass::set_buffer_size (short size) { - _electrometerProtocol->set_buffer_size(); + // force read of range on instrument to update _range variable + throw electrometer::ElectrometerException("COMMAND_NOT_SUPPORTED", + "This Keithley device does not support this command.", + "AbstractElectrometerClass::set_buffer_size( )."); + +} + +// ============================================================================ +// AbstractElectrometerClass::set_integrationTime +// ============================================================================ +void AbstractElectrometerClass::set_integrationTime (double) +{ + // force read of range on instrument to update _range variable + throw electrometer::ElectrometerException("COMMAND_NOT_SUPPORTED", + "This Keithley device does not support this command.", + "AbstractElectrometerClass::set_integrationTime( )."); + } // ============================================================================ diff --git a/src/ElectrometerProtocol.cpp b/src/ElectrometerProtocol.cpp index 290e4db..0f69a8a 100644 --- a/src/ElectrometerProtocol.cpp +++ b/src/ElectrometerProtocol.cpp @@ -380,6 +380,16 @@ std::string ElectrometerProtocol::get_knplc (void) "ElectrometerProtocol::get_knplc( )."); } +// ============================================================================ +// ElectrometerProtocol::set_triggerMode +// ============================================================================ +void ElectrometerProtocol::set_triggerMode (std::string) +{ + throw electrometer::ElectrometerException("COMMAND_NOT_SUPPORTED", + "This Electrometer does not support this command.", + "ElectrometerProtocol::set_triggerMode( )."); +} + // ============================================================================ // ElectrometerProtocol::set_triggercount // ============================================================================ @@ -513,7 +523,7 @@ void ElectrometerProtocol::averageStateOFF (void) // ============================================================================ // ElectrometerProtocol::set_buffer_size // ============================================================================ -void ElectrometerProtocol::set_buffer_size (void) +void ElectrometerProtocol::set_buffer_size (std::string) { throw electrometer::ElectrometerException("COMMAND_NOT_SUPPORTED", "This Electrometer does not support this command.", diff --git a/src/KeithleyDDCProtocol.cpp b/src/KeithleyDDCProtocol.cpp index 12ac5e8..d0fbcad 100644 --- a/src/KeithleyDDCProtocol.cpp +++ b/src/KeithleyDDCProtocol.cpp @@ -345,6 +345,24 @@ std::stringstream cmd_to_send; } +// ============================================================================ +// KeithleyDDCProtocol::set_buffer_size() +// ============================================================================ +void KeithleyDDCProtocol::set_buffer_size (std::string cmd) +{ + //- send command + _communication_link->write(cmd); +} + +// ============================================================================ +// KeithleyDDCProtocol::set_buffer_size() +// ============================================================================ +void KeithleyDDCProtocol::set_triggerMode (std::string cmd) +{ + //- send command + _communication_link->write(cmd); +} + // Following functions are part of commands supported via the DDC protocol. // We may have to implement them after first tests on beamlines /* diff --git a/src/KeithleySCPIProtocol.cpp b/src/KeithleySCPIProtocol.cpp index 85987f9..1b96a68 100644 --- a/src/KeithleySCPIProtocol.cpp +++ b/src/KeithleySCPIProtocol.cpp @@ -490,7 +490,7 @@ std::string cmd_to_send(""); _communication_link->write(cmd_to_send); //- set buffer size ( = number of triggers ) - set_buffer_size(); + set_buffer_size(nbTrigCount); } @@ -701,12 +701,12 @@ std::string argout("no data"); // ============================================================================ // KeithleySCPIProtocol::set_buffer_size() // ============================================================================ -void KeithleySCPIProtocol::set_buffer_size (void) +void KeithleySCPIProtocol::set_buffer_size (std::string size) { std::string cmd_to_send(""); //- send command : size = number of triggers - cmd_to_send = "TRAC:POIN " + trigCountStr; + cmd_to_send = "TRAC:POIN " + size; _communication_link->write(cmd_to_send); } diff --git a/src/Keithley_485.cpp b/src/Keithley_485.cpp index 1ac0af8..e5dd786 100644 --- a/src/Keithley_485.cpp +++ b/src/Keithley_485.cpp @@ -32,6 +32,11 @@ static const std::string K485_rangeValue[] = {"AUTO ON","2E-9","2E-8","2E-7","2E */ static const short K485_rangeLimit = 7; +/* +* Trigger Moded limit +*/ +static const short K485_triggerModeLimit = 5; + // ============================================================================ // Keithley_485::Keithley_485 // ============================================================================ @@ -116,6 +121,24 @@ std::string Keithley_485::get_ElectroMeterRange (void) return _rangeStr; } +// ============================================================================ +// Keithley_485::set_triggerMode +// ============================================================================ +void Keithley_485::set_triggerMode (short trigMod) +{ +std::stringstream cmd_to_send; + + if(trigMod<0 || trigMod>K485_triggerModeLimit) + throw electrometer::ElectrometerException("OUT_OF_RANGE", + "Trigger mode value invalid. Please enter a value in the range 0 - 5.", + "Keithley_485::set_triggerMode( )."); + + cmd_to_send << trigMod <<std::endl; + + _electrometerProtocol->set_triggerMode(cmd_to_send.str()); + +} + // ============================================================================ // Keithley_485::electrometer_status // ============================================================================ diff --git a/src/Keithley_486.cpp b/src/Keithley_486.cpp index efa11a1..bd50042 100644 --- a/src/Keithley_486.cpp +++ b/src/Keithley_486.cpp @@ -31,6 +31,10 @@ static const std::string K486_rangeValue[] = {"AUTO ON","2E-9","2E-8","2E-7","2E */ static short K486_rangeLimit = 8; +/* +* Trigger Mode limit +*/ +static short K486_triggerModeLimit = 7; // ============================================================================ // Keithley_486::Keithley_486 @@ -127,6 +131,37 @@ std::string Keithley_486::get_ElectroMeterRange (void) return _rangeStr; } +// ============================================================================ +// Keithley_486::set_buffer_size() +// ============================================================================ +void Keithley_486::set_buffer_size (short size) +{ +std::stringstream cmd_to_send; + + //- send command : size = number of triggers + cmd_to_send << "N" << size << "X" << std::endl; + _electrometerProtocol->set_buffer_size(cmd_to_send.str()); + +} + +// ============================================================================ +// Keithley_487::set_triggerMode +// ============================================================================ +void Keithley_486::set_triggerMode (short trigMod) +{ + if(trigMod<0 || trigMod>K486_triggerModeLimit) + throw electrometer::ElectrometerException("OUT_OF_RANGE", + "Trigger mode value invalid. Please enter a value in the range 0 - 7.", + "Keithley_486::set_triggerMode( )."); + + std::stringstream cmd_to_send; + + cmd_to_send << trigMod << std::endl; + + _electrometerProtocol->set_triggerMode(cmd_to_send.str()); + +} + // ============================================================================ // Keithley_486::electrometer_status // ============================================================================ diff --git a/src/Keithley_487.cpp b/src/Keithley_487.cpp index 8496b32..4d64c42 100644 --- a/src/Keithley_487.cpp +++ b/src/Keithley_487.cpp @@ -31,6 +31,11 @@ static const std::string K487_rangeValue[] = {"AUTO ON","2E-9","2E-8","2E-7","2E */ static short K487_rangeLimit = 8; +/* +* Trigger Mode limit +*/ +static short K487_triggerModeLimit = 9; + // ============================================================================ // Keithley_487::Keithley_487 @@ -129,6 +134,37 @@ std::string Keithley_487::get_ElectroMeterRange (void) return _rangeStr; } +// ============================================================================ +// Keithley_487::set_buffer_size() +// ============================================================================ +void Keithley_487::set_buffer_size (short size) +{ +std::stringstream cmd_to_send; + + //- send command : size = number of triggers + cmd_to_send << "N" << size << "X" << std::endl; + _electrometerProtocol->set_buffer_size(cmd_to_send.str()); + +} + +// ============================================================================ +// Keithley_487::set_triggerMode +// ============================================================================ +void Keithley_487::set_triggerMode (short trigMod) +{ + if(trigMod<0 || trigMod>K487_triggerModeLimit) + throw electrometer::ElectrometerException("OUT_OF_RANGE", + "Trigger mode value invalid. Please enter a value in the range 0 - 7.", + "Keithley_487::set_triggerMode( )."); + + std::stringstream cmd_to_send; + + cmd_to_send << trigMod << std::endl; + + _electrometerProtocol->set_triggerMode(cmd_to_send.str()); + +} + // ============================================================================ // Keithley_487::get_ElectroMeterMode // ============================================================================ diff --git a/src/Keithley_617.cpp b/src/Keithley_617.cpp index cc9d724..4b9dbca 100644 --- a/src/Keithley_617.cpp +++ b/src/Keithley_617.cpp @@ -36,6 +36,11 @@ static const std::string K617_VonIRangeValue[]= {"AUTO ON","200E12","20E12","2E1 */ static short K617_rangeLimit = 12; +/* +* Trigger Mode limit +*/ +static short K617_triggerModeLimit = 7; + // ============================================================================ // Keithley_617::Keithley_617 // ============================================================================ @@ -134,6 +139,36 @@ std::string Keithley_617::get_ElectroMeterRange (void) return _rangeStr; } +// ============================================================================ +// Keithley_617::set_buffer_size() +// ============================================================================ +void Keithley_617::set_buffer_size (short cmd) +{ +std::string cmd_to_send(""); + + //- send command : K_617 can store up to 100 points !!! + cmd_to_send = "Q0X"; + _electrometerProtocol->set_buffer_size(cmd_to_send); + +} + +// ============================================================================ +// Keithley_617::set_triggerMode +// ============================================================================ +void Keithley_617::set_triggerMode (short trigMod) +{ + if(trigMod<0 || trigMod>K617_triggerModeLimit) + throw electrometer::ElectrometerException("OUT_OF_RANGE", + "Trigger mode value invalid. Please enter a value in the range 0 - 7.", + "Keithley_617::set_triggerMode( )."); + + std::stringstream cmd_to_send; + + cmd_to_send << trigMod << std::endl; + + _electrometerProtocol->set_triggerMode(cmd_to_send.str()); +} + // ============================================================================ // Keithley_617::get_ElectroMeterMode // ============================================================================ diff --git a/src/Keithley_6512.cpp b/src/Keithley_6512.cpp index 72584a6..645a627 100644 --- a/src/Keithley_6512.cpp +++ b/src/Keithley_6512.cpp @@ -35,6 +35,11 @@ static const std::string K6512_XfdbRangeValue[]= {"AUTO ON","2E-1","2","20","20" */ static short K6512_rangeLimit = 12; +/* +* Trigger Mode limit +*/ +static short K6512_triggerModeLimit = 7; + // ============================================================================ // Keithley_6512::Keithley_6512 // ============================================================================ @@ -131,6 +136,37 @@ std::string Keithley_6512::get_ElectroMeterRange (void) return _rangeStr; } +// ============================================================================ +// Keithley_6512::set_buffer_size() +// ============================================================================ +void Keithley_6512::set_buffer_size (short ) +{ +std::string cmd_to_send(""); + + //- send command : Keithley_6512 can store up to 100 points !!! + cmd_to_send = "Q0X"; + _electrometerProtocol->set_buffer_size(cmd_to_send); + +} + +// ============================================================================ +// Keithley_6512::set_triggerMode +// ============================================================================ +void Keithley_6512::set_triggerMode (short trigMod) +{ + if(trigMod<0 || trigMod>K6512_triggerModeLimit) + throw electrometer::ElectrometerException("OUT_OF_RANGE", + "Trigger mode value invalid. Please enter a value in the range 0 - 7.", + "Keithley_6512::set_triggerMode( )."); + + std::stringstream cmd_to_send; + + cmd_to_send << trigMod << std::endl; + + _electrometerProtocol->set_triggerMode(cmd_to_send.str()); + +} + // ============================================================================ // Keithley_6512::get_ElectroMeterMode // ============================================================================ -- GitLab