Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
MCCE2Electrometers.h 13.36 KiB
//=============================================================================
//
// file :        MCCE2Electrometers.h
//
// description : Include for the MCCE2Electrometers class.
//
// project :  Novelec MCCE-2 Electrometers
//
// $Author: xavela $
//
// $Revision: 1.16 $
//
// $Log: not supported by cvs2svn $
// Revision 1.14  2010/06/10 15:12:05  xavela
// TEST : control two channels with different MCCE2
//
//
// copyleft :    European Synchrotron Radiation Facility
//               BP 220, Grenoble 38043
//               FRANCE
//
//=============================================================================
//
//      This file is generated by POGO
//  (Program Obviously used to Generate tango Object)
//
//         (c) - Software Engineering Group - ESRF
//=============================================================================
#ifndef _MCCE2ELECTROMETERS_H
#define _MCCE2ELECTROMETERS_H

#include <tango.h>
//using namespace Tango;
#include "AbstractElectrometerClass.h"
#include "ElectrometerException.h"

/**
 * @author  $Author: xavela $
 * @version $Revision: 1.16 $
 */

// Add your own constants definitions here.
//-----------------------------------------------


namespace MCCE2Electrometers_ns
{

/**
 * Class Description:
 * This class allows you to control all MCCE-2 Novelec electrometers
 *  through a Serial bus.
 *  <br> Supported types :
 *  <br> Novelec Electrometers : MCCE2
 */

/*
 *  Device States Description:
*  Tango::ON :       Device up and ready
*  Tango::ALARM :    Device initialisation not complete or a bad channel number is set.
*  Tango::FAULT :    Internal electrometer interface is not built or a Serial communication error occurred.
*  Tango::DISABLE :  No electrometer conected!
 */


class MCCE2Electrometers: public Tango::Device_4Impl
{
public :
  //  Add your own data members here
  //-----------------------------------------


  //  Here is the Start of the automatic code generation part
  //-------------------------------------------------------------
  /**
   *  @name attributes
   *  Attributs member data.
   */
//@{
  Tango::DevUShort  *attr_electrometerChannel_read;
  Tango::DevUShort  attr_electrometerChannel_write;
  Tango::DevString  *attr_range1_read;
  Tango::DevString  *attr_range2_read;
//@}

  /**
   *  @name Device properties
   *  Device properties member data.
   */
//@{
  /**
   *  The name of the device which manage the communication.
   */
  string  communicationLinkName;
  /**
   *  The first electrometer address configured. <br />
   *  Note : if not connected, push 0 or let empty the property.
   */
  Tango::DevUShort  electrometer1Address;
  /**
   *  The second electrometer address configured. <br />
   *  Note : if not connected, push 0 or let empty the property.
   */
  Tango::DevUShort  electrometer2Address;
//@}

  /**@name Constructors
   * Miscellaneous constructors */
//@{
  /**
   * Constructs a newly allocated Command object.
   *
   *  @param cl Class.
   *  @param s  Device Name
   */
  MCCE2Electrometers(Tango::DeviceClass *cl,string &s);
  /**
   * Constructs a newly allocated Command object.
   *
   *  @param cl Class.
   *  @param s  Device Name
   */
  MCCE2Electrometers(Tango::DeviceClass *cl,const char *s);
  /**
   * Constructs a newly allocated Command object.
   *
   *  @param cl Class.
   *  @param s  Device name
   *  @param d  Device description.
   */
  MCCE2Electrometers(Tango::DeviceClass *cl,const char *s,const char *d);
//@}

  /**@name Destructor
   * Only one desctructor is defined for this class */
//@{
  /**
   * The object desctructor.
   */
  ~MCCE2Electrometers() {
    delete_device();
  };
  /**
   *  will be called at device destruction or at init command.
   */
  void delete_device();
//@}


  /**@name Miscellaneous methods */
//@{
  /**
   *  Initialize the device
   */
  virtual void init_device();
  /**
   *  Always executed method befor execution command method.
   */
  virtual void always_executed_hook();

//@}

  /**
   * @name MCCE2Electrometers methods prototypes
   */

//@{
  /**
   *  Hardware acquisition for attributes.
   */
  virtual void read_attr_hardware(vector<long> &attr_list);
  /**
   *  Extract real attribute values for electrometerChannel acquisition result.
   */
  virtual void read_electrometerChannel(Tango::Attribute &attr);
  /**
   *  Write electrometerChannel attribute values to hardware.
   */
  virtual void write_electrometerChannel(Tango::WAttribute &attr);
  /**
   *  Extract real attribute values for range1 acquisition result.
   */
  virtual void read_range1(Tango::Attribute &attr);
  /**
   *  Extract real attribute values for range2 acquisition result.
   */
  virtual void read_range2(Tango::Attribute &attr);
  /**
   *  Read/Write allowed for electrometerChannel attribute.
   */
  virtual bool is_electrometerChannel_allowed(Tango::AttReqType type);
  /**
   *  Read/Write allowed for range1 attribute.
   */
  virtual bool is_range1_allowed(Tango::AttReqType type);
  /**
   *  Read/Write allowed for range2 attribute.
   */
  virtual bool is_range2_allowed(Tango::AttReqType type);
  /**
   *  Execution allowed for RangeUP command.
   */
  virtual bool is_RangeUP_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for RangeDOWN command.
   */
  virtual bool is_RangeDOWN_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for SetZeroVFFunction command.
   */
  virtual bool is_SetZeroVFFunction_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for SetOffsetZeroV1Function command.
   */
  virtual bool is_SetOffsetZeroV1Function_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for SetLeakageZeroV2Function command.
   */
  virtual bool is_SetLeakageZeroV2Function_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for SetTestFunction command.
   */
  virtual bool is_SetTestFunction_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for SetMeasureFunction command.
   */
  virtual bool is_SetMeasureFunction_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for MCCE2_ON command.
   */
  virtual bool is_MCCE2_ON_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for MCCE2_OFF command.
   */
  virtual bool is_MCCE2_OFF_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for Local command.
   */
  virtual bool is_Local_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for Remote command.
   */
  virtual bool is_Remote_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for Reset command.
   */
  virtual bool is_Reset_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for ClearRegisters command.
   */
  virtual bool is_ClearRegisters_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for GetRange command.
   */
  virtual bool is_GetRange_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for SetRange command.
   */
  virtual bool is_SetRange_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for GetMode command.
   */
  virtual bool is_GetMode_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for GetPolarity command.
   */
  virtual bool is_GetPolarity_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for SetPolarity command.
   */
  virtual bool is_SetPolarity_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for GetHzFilter command.
   */
  virtual bool is_GetHzFilter_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for SetHzFilter command.
   */
  virtual bool is_SetHzFilter_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for GetGain command.
   */
  virtual bool is_GetGain_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for SetGain command.
   */
  virtual bool is_SetGain_allowed(const CORBA::Any &any);
  /**
   *  Execution allowed for GetElectrometerTypeStr command.
   */
  virtual bool is_GetElectrometerTypeStr_allowed(const CORBA::Any &any);
  /**
   * This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller.
   *  @return State Code
   *  @exception DevFailed
   */
  virtual Tango::DevState dev_state();
  /**
   * This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller.
   *  @return Status description
   *  @exception DevFailed
   */
  virtual Tango::ConstDevString dev_status();
  /**
   * Up the range of the electrometer.
   *  Throw :
   *  - electrometer::ElectrometerException if the range limit is reached
   *  - Tango::DevFailed if the command cannot be performed
   *  @exception DevFailed
   */
  void  range_up();
  /**
   * Down the range of the electrometer.
   *  Throw :
   *  - electrometer::ElectrometerException if the range is negative
   *  - Tango::DevFailed if the command cannot be performed
   *  @exception DevFailed
   */
  void  range_down();
  /**
   * Enable the Zero V/F MCCE2 mode.
   *  @exception DevFailed
   */
  void  set_zero_vffunction();
  /**
   * Enable the Offset or Zero V1 MCCE2 mode.
   *  @exception DevFailed
   */
  void  set_offset_zero_v1_function();
  /**
   * Enable the Leakage or Zero V2 MCCE2 mode.
   *  @exception DevFailed
   */
  void  set_leakage_zero_v2_function();
  /**
   * Enable theTest MCCE2 mode.
   *  @exception DevFailed
   */
  void  set_test_function();
  /**
   * Enable the Measure MCCE2 mode.
   *  @exception DevFailed
   */
  void  set_measure_function();
  /**
   * Enables the function set. Parameters cannot be set (read only mode).
   *  @exception DevFailed
   */
  void  mcce2__on();
  /**
   * Disables the function set. Parameters can be changed.
   *  @exception DevFailed
   */
  void  mcce2__off();
  /**
   * Enable local keyboard and Key
   *  @exception DevFailed
   */
  void  local();
  /**
   * Disable \"MODIFY\" and the \"ON-OFF\" keys
   *  @exception DevFailed
   */
  void  remote();
  /**
   * Restart the MCCE-2
   *  @exception DevFailed
   */
  void  reset();
  /**
   * Clear error(s)
   *  @exception DevFailed
   */
  void  clear_registers();
  /**
   * Returns the electrometer range.
   *  @return The actual electrometer range
   *  @exception DevFailed
   */
  Tango::DevString  get_range();
  /**
   * Apply the specified argin range, on the electrometer, if well formatted.
   *  Else an exception is thrown.
   *  @param  argin The range to apply on the electrometer
   *  @exception DevFailed
   */
  void  set_range(Tango::DevString);
  /**
   * Returns the electrometer mode which can be one of the following values :
   *  MEASURE, V/F Zero, OFFSET, LEAKAGE or TEST.
   *  @return The electrometer mode (MEASURE, LEAKAGE ...)
   *  @exception DevFailed
   */
  Tango::DevString  get_mode();
  /**
   * Returns the electrometer polarity, which can be POSITIVE or NEGATIVE.
   *  @return The electrometer polarity
   *  @exception DevFailed
   */
  Tango::DevString  get_polarity();
  /**
   * Sets the new electrometer polarity. <Br>
   *  NOTE : <Br>
   *  Value must be set in UPPER case !!!
   *  @param  argin POSITIVE or NEGATIVE
   *  @exception DevFailed
   */
  void  set_polarity(Tango::DevString);
  /**
   * Returns the Cut-off frequency in Hz
   *  @return The MCCE2 cut-off frequency in Hz
   *  @exception DevFailed
   */
  Tango::DevShort get_hz_filter();
  /**
   * The Cut-off frequency in Hz
   *  @param  argin The MCCE2 cut-off frequency in Hz
   *  @exception DevFailed
   */
  void  set_hz_filter(Tango::DevShort);
  /**
   * Returns the MCCE-2 gain
   *  @return The MCCE2 gain
   *  @exception DevFailed
   */
  Tango::DevShort get_gain();
  /**
   * Sets the new MCCE-2 gain value.
   *  @param  argin The new MCCE-2 gain
   *  @exception DevFailed
   */
  void  set_gain(Tango::DevUShort);
  /**
   * This command returns the connected electrometer type as string for the specified channel.
   *  @param  argin channel number
   *  @return the electrometer type as string
   *  @exception DevFailed
   */
  Tango::DevString  get_electrometer_type_str(Tango::DevUShort);

  /**
   *  Read the device properties from database
   */
  void get_device_property();
//@}

  //  Here is the end of the automatic code generation part
  //-------------------------------------------------------------



protected :
  //  Add your own data members here
  //-----------------------------------------
  AbstractElectrometerClass*  _electrometer;

  std::string _statusStr;

  bool _init_done;    //- used to allow device to start !!
  bool _missing_property;
  bool _updateRange1FromHW;
  bool _updateRange2FromHW;
  //- electrometer(s) type as string
  std::string _electroCH1StrType;
  std::string _electroCH2StrType;

  std::string read_range_from_hw();

  //- Method to convert all electrometer exceptions on Tango exception
  Tango::DevFailed electrometer_to_tango_exception(const electrometer::ElectrometerException& de);

private :
  AbstractElectrometerClass*  _electrometerCH1; //- electrometer on channel 1
  AbstractElectrometerClass*  _electrometerCH2; //- electrometer on channel 2

  //- instanciate electrometer(s) obj
  void create_electrometers_obj();

};

} // namespace_ns

#endif  // _MCCE2ELECTROMETERS_H