Newer
Older
//+=============================================================================
//
// = CONTEXT
// TANGO Project - Abstract Electrometer Class Support Library
//
// = FILENAME
// AbstractElectrometerClass.h
//
//
// Revision 1.18 2010/03/17 10:00:15 xavela
// VSource output added for K_6517
//
// Revision 1.17 2009/10/14 15:26:17 xavela
// KeithleyMemory leak fixed.
// Novelec part updated
//
// Revision 1.16 2009/03/12 09:29:00 xavela
// xavier:
// Keithley part : support for 6517.
//
// Revision 1.15 2009/03/10 10:29:14 xavela
// xavier:
// range values ordered
// set_range added
//
// Revision 1.14 2009/01/19 12:00:25 xavela
// xavier :
// - MCCE2 (Novelec part) : methods to change the active channel to communicate with.
//
// 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 :
// -> integrationTime, buffersize and triggerMode now well initialised
//
// TODO : after a Start command
// -> declare all attributes INVALID !?
//
// 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 bool init_protocol (void) = 0;
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.
*/
virtual std::vector<double> get_integratedValue (void);
virtual std::vector<double> get_fetchValue (void);
void zero_check_on (void);
void zero_check_off (void);
void zero_correct_on (void);
void zero_correct_off (void);
virtual void setVoltMeterMode (void);
virtual void setOhmMeterMode (void);
virtual void setCoulombMeterMode(void);
/**
* \brief Following functions are only supported for SCPI protocol
*
*/
virtual void averageStateON (void);
virtual void averageStateOFF (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_triggercount (void);
std::string get_triggerdelay (void);
std::string get_triggerdelayAuto(void);
virtual void store_raw_input (void);
virtual void start_storing (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 short get_buffer_size (void);
virtual short get_triggerMode (void) { return _trigMod;};
/**
* \brief VSource operations (only for K_6517)
*
*/
virtual void enable_VSourceOutput (void);
virtual void disable_VSourceOutput(void);
virtual void set_VSourceValue (double volts);
virtual double get_VSourceValue (void);
/**
* \brief Novelec Electrometer methods
*
* Following functions are only supported for Novelec Protocol
*/
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 std::string get_ElectroMeterPolarity (void);
virtual std::string get_ElectroMeterFrequency (void);
virtual std::string get_ElectroMeterGain (void);
virtual unsigned short get_ElectroChannel (void);
virtual void set_ElectroMeterRange (std::string rang);
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.
*/
virtual std::string electrometer_status (void);
/**
* \brief Returns the DDC Keithley configuration
* asking its "Machine Status" word (= Using "U0X" cmd) .
*/
virtual std::string get_configuration (void);
virtual std::string get_ElectroMeterMode (void);
virtual std::string get_ElectroMeterRange (void);
protected :
/**
* \brief Electrometer State
*/
enum ElectroState
{
UNKNOWN = 13
};
ElectroState electrometerState;
void set_electroState(ElectroState newState) { electrometerState = newState; };
std::string _rangeStr;
std::string _mode;
std::string _device_proxy_name;
//- for internal use -> to configure the Integration mode
short _size;
short _trigMod;