//============================================================================= // // 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