//+============================================================================= // // = CONTEXT // TANGO Project - Abstract Electrometer Class Support Library // // = FILENAME // AbstractElectrometerClass.h // // // $Author: xavela $ // // $Revision: 1.12 $ // // $Log: not supported by cvs2svn $ // Revision 1.11 2008/04/30 15:57:29 xavela // xavier : // 6517 model management added and tested : // -> problem to check : no SRQ ! // // Revision 1.10 2008/04/15 12:51:59 xavela // xavier : // - SRQ management changed : // * ReadStatusByteRegister method added // * IsSrqLineUP added // // Revision 1.9 2008/02/15 10:17:55 xavela // xavier : // - command abort added for SCPI Keithleys // // Revision 1.8 2008/02/15 10:15:16 xavela // xavier : // - command abort added for SCPI Keithleys // // Revision 1.7 2008/02/15 08:49:46 xavela // xavier : // - minor change for integration time // // Revision 1.6 2008/02/13 15:51:44 xavela // xavier : // - Integration Mode available for DDC/SCPI devices // - tests done with a K617 (DDC) and a K6485 (SCPI) // // Revision 1.5 2008/02/11 16:55:04 xavela // xavier : for DDC part // - integration mode OK (tests done with K_486) // // - TODO: DDC/SCPI // integration time for ScanServer compatibility. // report config for all DDC // add configuration in SCPI start command // // Revision 1.4 2008/02/08 17:24:32 xavela // 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 // // 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 : // init_MCCE2() added // // Revision 1.1 2007/07/09 13:20:35 stephle // initial import // // // ============================================================================ #ifndef _ABSTRACT_ELECTROMETER_CLASS_H_ #define _ABSTRACT_ELECTROMETER_CLASS_H_ #include "ElectrometerProtocol.h" /** * \brief Visible class from the DServer * * \author Xavier Elattaoui * \date 11-2006 */ class AbstractElectrometerClass { public: /** * \brief Initialization. */ AbstractElectrometerClass (std::string comLink_device_name); /** * \brief Release resources. */ virtual ~AbstractElectrometerClass (void); /** * \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); /** * \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); /** * \brief Keithley Electrometer methods */ 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_off (void); virtual void autoRange_off (void); virtual void setAmperMeterMode (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); virtual void init_keithley (void); 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); 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;}; /** * \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_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 void set_ElectroMeterFrequency (std::string freq); virtual void set_ElectroMeterGain (std::string gain); /** * \brief Electrometer Status and State. */ virtual std::string electrometer_status (void); /** * \brief Common getters and setters */ virtual std::string get_ElectroMeterMode (void); virtual std::string get_ElectroMeterRange (void); protected : /** * \brief Electrometer State */ enum ElectroState { ON = 0, FAULT = 8, RUNNING = 10, ALARM = 11, UNKNOWN = 13 }; ElectroState electrometerState; void set_electroState(ElectroState newState) { electrometerState = newState; }; short _range; std::string _rangeStr; std::string _mode; std::string _device_proxy_name; ElectrometerProtocol* _electrometerProtocol; //- for internal use -> to configure the Integration mode short _size; short _trigMod; private : public : ElectroState electrometer_state (void) { return electrometerState; }; }; #endif // _ABSTRACT_ELECTROMETER_CLASS_H_