Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ElectrometerProtocol.h 6.89 KiB
// ============================================================================
//
// = CONTEXT
//    TANGO Project - Electrometer Support Library
//
// = FILENAME
//    ElectrometerProtocol.h
//
// = AUTHOR
//    X. Elattaoui
//
//
// $Author: xavela $
//
// $Revision: 1.12 $
//
// $Log: not supported by cvs2svn $
// Revision 1.11  2009/01/19 12:00:25  xavela
// xavier :
// - MCCE2 (Novelec part) : methods to change the active channel to communicate with.
//
// Revision 1.10  2008/06/20 14:36:24  xavela
// xavier :
// - DDC status show only errors if any
// - added command to get DDC model configuration
//
// Revision 1.9  2008/04/15 12:52:00  xavela
// xavier :
// - SRQ management changed :
// * ReadStatusByteRegister method added
// * IsSrqLineUP added
//
// Revision 1.8  2008/02/15 10:17:55  xavela
// xavier :
// - command abort added for SCPI Keithleys
//
// Revision 1.7  2008/02/15 10:15:16  xavela
// xavier :
// - command abort added for SCPI Keithleys
//
// Revision 1.6  2008/02/15 08:49:46  xavela
// xavier :
// - minor change for integration time
//
// Revision 1.5  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.4  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.3  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.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 _ELECTROMETER_PROTOCOL_H_
#define _ELECTROMETER_PROTOCOL_H_

#include <vector>
#include "CommunicationLink.h"

/**
 *  \addtogroup Standard Commands Protocol 
 *  @{
 */

/**
 *  \brief This abstract class manage the Electrometers Commands Protocol
 *
 *  \author Xavier Elattaoui
 *  \date 11-2006
 */

class ElectrometerProtocol
{
public:

	/**
	*  \brief Initialization. 
	*/
	ElectrometerProtocol ();
	
	/**
	*  \brief Release resources.
	*/
	virtual ~ElectrometerProtocol ();

  
  /**
  *  \brief create the communication device proxy.
  */
  virtual bool build_communicationLink() = 0;

	/**
	*  \brief Common Electrometer Functions.
	*/
	virtual void set_range (std::string val)= 0;
	virtual void reset			(void) = 0; 
	virtual void local			(void); 
	virtual void remote			(void); 

	/**
	*  \brief Common Electrometer : getters & setters.
	*/
	virtual std::string get_value(void)		= 0;
	virtual std::string get_mode (void)		= 0;
	virtual std::string get_range(void)		= 0;
	virtual std::vector<double> get_integratedValue		(void);
	virtual std::vector<double> get_fetchValue		    (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! 
	virtual bool get_overloadRangeState   (void); //- used to know if the device range is overloaded! 

	/**
	*  \brief Common Get Raw Electrometer Status.
	*/
	virtual std::string get_raw_status (void) = 0;
	
	/**
	*  \brief Returns the DDC Keithley configuration
	*			asking its "Machine Status" word (= Using "U0X" cmd) .
	*/
	virtual std::string get_DDC_configuration	(void);

	/**
	*  \brief Electrometer : Keithley protocol dependent commands.
	*/
	virtual void init_keithley		(void); 
	virtual void abort        		(void); 
	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);
	virtual std::string get_knplc			(void);
	virtual std::string get_triggercount	(void);
	virtual std::string get_triggerdelay	(void);
	virtual std::string get_triggerdelayAuto(void);
	virtual std::string get_averagecount	  (void);
	virtual std::string get_averagecontrol	(void);
	virtual void clear_registers	(void); 
	virtual void averageStateON		(void); 
	virtual void averageStateOFF	(void); 
	virtual void setAmperMeterMode(void);
	virtual void setVoltMeterMode	(void);
	virtual void setOhmMeterMode	(void);
	virtual void setCoulombMeterMode(void);
	virtual void autoRange_on		  (void);
	virtual void autoRange_off		(void);
	
	virtual void zero_check_on		(void);
	virtual void zero_check_off		(void);
	virtual void zero_correct_on	(void);
	virtual void zero_correct_off	(void);
	virtual void auto_zero_on		  (void);
	virtual void auto_zero_off		(void);

	/**
	*  \brief Electrometer : Integration Mode configuration
	*/
	virtual void set_buffer_size		(std::string size);
	virtual void clear_buffer		    (void);
	virtual void store_raw_input		(void);
	virtual void start_storing			(void);
	virtual void enable_SRQBufferFull	(void);
	virtual void disable_SRQBufferFull	(void);

	virtual void set_conversionRate                 (void);
	virtual void enable_readingWithPrefix           (void);
	virtual void disable_readingWithPrefix          (void);
	virtual void enable_ReadingsFromElectrometer    (void);
	virtual void enable_readingsFromBuffer_K617_6512(void);
	virtual void enable_readingsFromBuffer_K486_487 (void);
	virtual void read_data_with_no_timestamp        (void);

	virtual std::string get_buffer_size	 (void);

	//- only for K_486 and K_487 devices
	virtual void enable_integrationPeriod(void);


	/**
	*  \brief Electrometer : Novelec protocol dependent commands.
	*/
	virtual void switch_MCCE2_ON		        (void);
	virtual void switch_MCCE2_OFF		        (void);
	virtual void init_MCCE2_for_communication(void);
	virtual void unable_zeroVF_func		      (void);
	virtual void unable_offset_zeroV1_func	(void);
	virtual void unable_leakage_zeroV2_func	(void);
	virtual void unable_test_func	          (void);
	virtual void unable_measure_func        (void);
	virtual std::string get_polarity	      (void);
	virtual std::string get_frequency	      (void);
	virtual std::string get_gain(void);
	virtual void set_polarity		(std::string pola);
	virtual void set_frequency	(std::string freq);
	virtual void set_gain			  (std::string gain);
	virtual unsigned short get_electrometer_active_channel(void);
	virtual void set_electrometer_active_channel(unsigned short address);



protected :
	short		    _range;
	std::string	_mode;
  std::string _commDevName;   //- communication device proxy name
	CommunicationLink* _communication_link;

private :


};

/** @} */	//- end addtogroup

#endif // _ELECTROMETER_PROTOCOL_H_