Skip to content
Snippets Groups Projects
AbstractElectrometerClass.h 7.99 KiB
Newer Older
LE's avatar
LE committed
//+=============================================================================
//
// = CONTEXT
//    TANGO Project - Abstract Electrometer Class Support Library
//
// = FILENAME
//    AbstractElectrometerClass.h
//
//
ELATTAOUI's avatar
ELATTAOUI committed
// $Author: xavela $
LE's avatar
LE committed
//
ELATTAOUI's avatar
ELATTAOUI committed
// $Revision: 1.19 $
LE's avatar
LE committed
//
// $Log: not supported by cvs2svn $
ELATTAOUI's avatar
ELATTAOUI committed
// 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
//
ELATTAOUI's avatar
ELATTAOUI committed
// Revision 1.16  2009/03/12 09:29:00  xavela
// xavier:
// Keithley part : support for 6517.
//
ELATTAOUI's avatar
ELATTAOUI committed
// Revision 1.15  2009/03/10 10:29:14  xavela
// xavier:
// range values ordered
// set_range added
//
ELATTAOUI's avatar
ELATTAOUI committed
// Revision 1.14  2009/01/19 12:00:25  xavela
// xavier :
// - MCCE2 (Novelec part) : methods to change the active channel to communicate with.
//
ELATTAOUI's avatar
ELATTAOUI committed
// 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
//
ELATTAOUI's avatar
ELATTAOUI committed
// 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 !?
//
ELATTAOUI's avatar
ELATTAOUI committed
// Revision 1.11  2008/04/30 15:57:29  xavela
// xavier :
// 6517 model management added and tested :
// -> problem to check : no SRQ !
//
ELATTAOUI's avatar
ELATTAOUI committed
// Revision 1.10  2008/04/15 12:51:59  xavela
// xavier :
// - SRQ management changed :
// * ReadStatusByteRegister method added
// * IsSrqLineUP added
//
ELATTAOUI's avatar
ELATTAOUI committed
// Revision 1.9  2008/02/15 10:17:55  xavela
// xavier :
// - command abort added for SCPI Keithleys
//
ELATTAOUI's avatar
ELATTAOUI committed
// Revision 1.8  2008/02/15 10:15:16  xavela
// xavier :
// - command abort added for SCPI Keithleys
//
ELATTAOUI's avatar
ELATTAOUI committed
// Revision 1.7  2008/02/15 08:49:46  xavela
// xavier :
// - minor change for integration time
//
ELATTAOUI's avatar
ELATTAOUI committed
// 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)
//
ELATTAOUI's avatar
ELATTAOUI committed
// 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
//
ELATTAOUI's avatar
ELATTAOUI committed
// 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
//
ELATTAOUI's avatar
ELATTAOUI committed
// Revision 1.3  2007/11/28 10:37:30  xavela
// compile en MODE debug ->
// modifier le(s) MakeFile !
//
ELATTAOUI's avatar
ELATTAOUI committed
// Revision 1.2  2007/11/27 10:17:46  xavela
// xavier :
// - modif done on Novelec part :
// init_MCCE2() added
//
ELATTAOUI's avatar
ELATTAOUI committed
// Revision 1.1  2007/07/09 13:20:35  stephle
// initial import
//
LE's avatar
LE committed
//

// ============================================================================

#ifndef _ABSTRACT_ELECTROMETER_CLASS_H_
#define _ABSTRACT_ELECTROMETER_CLASS_H_

ELATTAOUI's avatar
ELATTAOUI committed
#include <tango.h>  //- Tango exceptions
LE's avatar
LE committed
#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.
	*/
ELATTAOUI's avatar
ELATTAOUI committed
  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);
LE's avatar
LE committed

	/**
	*  \brief Electrometer : cmd to get electrometer data.
	*/
ELATTAOUI's avatar
ELATTAOUI committed
	std::string get_value	(void);
ELATTAOUI's avatar
ELATTAOUI committed
	virtual std::vector<double> get_integratedValue	(void);
	virtual std::vector<double> get_fetchValue      (void);
LE's avatar
LE committed

	/**
	*  \brief Keithley Electrometer methods
	*/
ELATTAOUI's avatar
ELATTAOUI committed
	void autoRange_on		  (void);
LE's avatar
LE committed
	void zero_check_on		(void);
	void zero_check_off		(void);
	void zero_correct_on	(void);
	void zero_correct_off	(void);
ELATTAOUI's avatar
ELATTAOUI committed
	virtual void auto_zero_on		  (void);
ELATTAOUI's avatar
ELATTAOUI committed
	virtual void auto_zero_off		(void);
ELATTAOUI's avatar
ELATTAOUI committed
	virtual void autoRange_off		(void);
ELATTAOUI's avatar
ELATTAOUI committed
	virtual void setAmperMeterMode(void);
ELATTAOUI's avatar
ELATTAOUI committed
	virtual void setVoltMeterMode	(void);
	virtual void setOhmMeterMode	(void);
LE's avatar
LE committed
	virtual void setCoulombMeterMode(void);

	/**
	*  \brief  Following functions are only supported for SCPI protocol
	*
	*/
ELATTAOUI's avatar
ELATTAOUI committed
	void abort (void); 
ELATTAOUI's avatar
ELATTAOUI committed
	virtual void init_keithley		(void); 
ELATTAOUI's avatar
ELATTAOUI committed
	void clear_registers			    (void); 
ELATTAOUI's avatar
ELATTAOUI committed
	virtual void averageStateON		(void); 
	virtual void averageStateOFF	(void); 
ELATTAOUI's avatar
ELATTAOUI committed
	virtual void set_knplc			  (float nPLC);
ELATTAOUI's avatar
ELATTAOUI committed
	virtual void set_triggercount	(short trigcounts);
ELATTAOUI's avatar
ELATTAOUI committed
	void set_triggerdelay			    (std::string trigdelay);
	void set_triggerdelayAuto		  (std::string trigdelAuto);
ELATTAOUI's avatar
ELATTAOUI committed
	virtual void set_averagecount	(std::string avercounts);
	virtual void set_averagecontrol	(std::string averctrl);
ELATTAOUI's avatar
ELATTAOUI committed
	std::string get_knplc			    (void);
LE's avatar
LE committed
	std::string get_triggercount	(void);
	std::string get_triggerdelay	(void);
	std::string get_triggerdelayAuto(void);
ELATTAOUI's avatar
ELATTAOUI committed
	virtual std::string get_averagecount	(void);
ELATTAOUI's avatar
ELATTAOUI committed
	virtual std::string get_averagecontrol(void);
ELATTAOUI's avatar
ELATTAOUI committed
	virtual void clear_buffer				(void);
ELATTAOUI's avatar
ELATTAOUI committed
	virtual void store_raw_input		(void);
	virtual void start_storing			(void);
ELATTAOUI's avatar
ELATTAOUI committed
	void enable_SRQBufferFull				(void);
ELATTAOUI's avatar
ELATTAOUI committed
	void disable_SRQBufferFull			(void);
ELATTAOUI's avatar
ELATTAOUI committed
	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);
ELATTAOUI's avatar
ELATTAOUI committed
	virtual void set_integrationTime	(double);
ELATTAOUI's avatar
ELATTAOUI committed
	virtual short get_buffer_size			(void);
	virtual short get_triggerMode			(void) { return _trigMod;};
LE's avatar
LE committed

ELATTAOUI's avatar
ELATTAOUI committed
	/**
	*  \brief  VSource operations (only for K_6517)
	*
	*/
  virtual void enable_VSourceOutput (void);
  virtual void disable_VSourceOutput(void);
ELATTAOUI's avatar
ELATTAOUI committed
  virtual void set_VSourceValue     (double volts);
  virtual double get_VSourceValue   (void);
LE's avatar
LE committed
	/**
	*  \brief Novelec Electrometer methods
	*
	* Following functions are only supported for Novelec Protocol
	*/
ELATTAOUI's avatar
ELATTAOUI committed
	virtual void set_Zero_VonF_function			(void);
ELATTAOUI's avatar
ELATTAOUI committed
	virtual void set_Offset_ZeroV1_function	(void);
	virtual void set_Leakage_ZeroV2_function(void);
ELATTAOUI's avatar
ELATTAOUI committed
	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);
LE's avatar
LE committed
	/**
	*  \brief Novelec getters and setters
	*/
ELATTAOUI's avatar
ELATTAOUI committed
	virtual std::string get_ElectroMeterPolarity  (void);
	virtual std::string get_ElectroMeterFrequency (void);
	virtual std::string get_ElectroMeterGain      (void);
ELATTAOUI's avatar
ELATTAOUI committed
	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);
ELATTAOUI's avatar
ELATTAOUI committed
	virtual void set_ElectroMeterGain			  (std::string gain);
	virtual void set_ElectroChannel				  (unsigned short address);
LE's avatar
LE committed

	/**
	*  \brief Electrometer Status and State.
	*/
	virtual std::string electrometer_status	(void);

ELATTAOUI's avatar
ELATTAOUI committed
	/**
	*  \brief Returns the DDC Keithley configuration
	*			asking its "Machine Status" word (= Using "U0X" cmd) .
	*/
	virtual std::string get_configuration	(void);

LE's avatar
LE committed
	/**
	*  \brief Common getters and setters
	*/
ELATTAOUI's avatar
ELATTAOUI committed
	virtual std::string get_ElectroMeterMode	(void);
	virtual std::string get_ElectroMeterRange	(void);
LE's avatar
LE committed


protected :

	/**
	*  \brief Electrometer State
	*/
	enum ElectroState
	{
ELATTAOUI's avatar
ELATTAOUI committed
		ON		  = 0,
		FAULT	  = 8,
ELATTAOUI's avatar
ELATTAOUI committed
		RUNNING = 10,
ELATTAOUI's avatar
ELATTAOUI committed
		ALARM	  = 11,
LE's avatar
LE committed
		UNKNOWN	= 13
	};
	
	ElectroState electrometerState;
	
	void set_electroState(ElectroState newState) { electrometerState = newState; };

ELATTAOUI's avatar
ELATTAOUI committed
	short					_range;
ELATTAOUI's avatar
ELATTAOUI committed
	std::string		_rangeStr;
	std::string		_mode;
	std::string		_device_proxy_name;
ELATTAOUI's avatar
ELATTAOUI committed
	ElectrometerProtocol*	_electrometerProtocol;
ELATTAOUI's avatar
ELATTAOUI committed

ELATTAOUI's avatar
ELATTAOUI committed
	//- for internal use -> to configure the Integration mode
	short _size;
	short _trigMod;
LE's avatar
LE committed
private :

public :
	ElectroState electrometer_state	(void) { return electrometerState; };

};

#endif // _ABSTRACT_ELECTROMETER_CLASS_H_