Skip to content
Snippets Groups Projects
  • ELATTAOUI's avatar
    dd5a2026
    xavier : · dd5a2026
    ELATTAOUI authored
    - attributes management :
    -> integrationTime, buffersize and triggerMode now well initialised
    
    TODO : after a Start command
    -> declare all attributes INVALID !?
    dd5a2026
    History
    xavier :
    ELATTAOUI authored
    - attributes management :
    -> integrationTime, buffersize and triggerMode now well initialised
    
    TODO : after a Start command
    -> declare all attributes INVALID !?
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
AbstractElectrometerClass.h 6.46 KiB
//+=============================================================================
//
// = 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_