C++ Instrument Catalog
MFC3045Device.h
Go to the documentation of this file.
1 
6 #pragma once
7 
8 // Standard includes
9 #include <string>
10 // Personal includes
11 #include "VISAInstrument.h"
12 #include "MFC3045.h"
13 #include "MFCDevice.h"
14 #include "InstrumentCatalog.h"
15 #include "MFCController.h"
16 #include "Helpers.h"
17 
18 using namespace MTL;
19 using namespace MTL::Instrument;
20 
21 // Status Register selection
22 #define SetST1 (0b1)
23 #define SetST2 (0b10)
24 #define SetST3 (0b100)
25 #define SetST4 (0b1000)
26 #define SetST5 (0b10000)
27 #define SetST6 (0b100000)
28 #define SetSTALL (0xFF)
29 
31  U8 SelSTReg = 0;
32  struct sStatusRegSel {
33  // Contains a 1-byte status register 1. The MFC3045 uses the following bits:
34  U8 ST1 : 1; // bit[0]: Sel Status Register 1
35  U8 ST2 : 1; // bit[1]: Sel Status Register 2
36  U8 ST3 : 1; // bit[2]: Sel Status Register 3
37  U8 ST4 : 1; // bit[3]: Sel Status Register 4
38  U8 ST5 : 1; // bit[4]: Sel Status Register 5
39  U8 ST6 : 1; // bit[5]: Sel Status Register 6
40  U8 ALLST : 2; // bit[6-7] Sel All Status Register
41  } StRegSelBit;
42 };
43 
44 namespace MTL {
45 
46  //--------------------------------------------------------------------------//
47  // MFC3045 Device
48  //--------------------------------------------------------------------------//
49 
50  class CMFC3045Device: public CMFCDevice
51  {
52  //--------------------------------------------------------------------------//
53  // Attributes
54  //--------------------------------------------------------------------------//
55  private:
56  CMFCController & m_rMFCController;
57  CMFC3045Instrument m_MFC3045;
58  sSerialPortSettings m_SerialParms;
59  std::string m_PaSerialNum;
60  U8 m_NbProbesPA;
61 
62  uStatusByte1 m_RegStatus1;
63  uStatusByte2 m_RegStatus2;
64  uStatusByte3 m_RegStatus3;
65  uStatusByte4 m_RegStatus4;
66  uStatusByte5 m_RegStatus5;
67  uStatusByte6 m_RegStatus6;
68  std::string m_LastCmdError;
69 
70  //constants:
71  const int SEARCH_POLLING_PERIOD_MS = 100;
72  const int MEAS_POLLING_PERIOD_MS = 100;
73 
74  //--------------------------------------------------------------------------//
75  // Constructor / Destructor
76  //--------------------------------------------------------------------------//
77  public:
78  CMFC3045Device ( CMFCController & rMFCController, CVISAResourceManager & rRM,
80  virtual ~CMFC3045Device ();
81 
82  //--------------------------------------------------------------------------//
83  // Utilities
84  //--------------------------------------------------------------------------//
85  private:
86  bool l_UtcToStrDateISO8601(const std::time_t & rUtcDate, std::string & rStrDate);
87  bool l_ParseSerialSettings ( const CInstrumentCatalog::sMFC3045SerialPortSettings & rSerialSetting,
88  sSerialPortSettings & rVisaSerialSetting);
89  bool l_ReadSomeStatusReg(const uStatusRegSel & rRdSelStatus);
90  bool l_SerialCommunicationSuccess();
91  bool l_CheckPAConnected(bool & rPAPresent);
92  bool l_ConfigurationChanged (CInstrumentCatalog::sInstrumentState lastcfg, CInstrumentCatalog::sInstrumentState newcfg);
93  bool l_ConfigureForOperation (const CInstrumentCatalog::sInstrumentState & rInstrState, sMFCDeviceError & rError);
94  bool l_ComputeMaxMeasTimeout(U64 & rMaxTimeOutMs);
95  void l_ComputeAveraging (const std::vector<U32> & rFluxListdHz, F64 & rReturnedAveragingMHz, F64 & rReturnedStdDevppm);
96  bool l_WriteNormalizationRAM(const CInstrumentCatalog::tNormalizationTable & rNewNormalizationTable, sMFCDeviceError & rError);
97 
98  public:
99  bool AbortInstrument ();
100  bool IsInstrumentConnected();
101 
102 
103  //--------------------------------------------------------------------------//
104  // Available Operations
105  //--------------------------------------------------------------------------//
106  public:
109  CInstrumentCatalog::sInstrumentConfiguration & rInstrConfig, bool &rPaInfoChanged);
110  sMFCDeviceError Search (const CInstrumentCatalog::sInstrumentState & rInstrState);
111  sMFCDeviceError Measure (const CInstrumentCatalog::sInstrumentState & rInstrState);
112  sMFCDeviceError NewNormalizationRequest ( const CInstrumentCatalog::sNormalization & rNewNormalizationRequest,
113  CInstrumentCatalog::sNormalization & rReturnedNormalization);
114  sMFCDeviceError GetNormalizationDate(CInstrumentCatalog::tISO8601DateTime & rNormDate);
115  sMFCDeviceError SetRBBusyLedState (const CInstrumentCatalog::eRemoteBoxBusyLedState & rRBBusyLedState);
116  sMFCDeviceError RemoteBoxButtonStatus (bool & rRemoteStartPressed);
117  sMFCDeviceError ChangeSerialParmsOnConnectedInstr(const CInstrumentCatalog::sMFC3045SerialPortSettings & rNewSerialSetting);
118 
119  }; // class
120 } // namespace MTL
MTL::CInstrumentCatalog::tISO8601DateTime
std::string tISO8601DateTime
Definition: InstrumentCatalog.h:28
uStatusRegSel::sStatusRegSel::ST5
U8 ST5
Definition: MFC3045Device.h:38
MTL::Instrument::CMFC3045Instrument
MFC3045 instrument class.
Definition: MFC3045.h:28
MTL::Instrument::MFC3045Types::uStatusByte1
Definition: MFC3045Types.h:97
MTL::Instrument::MFC3045Types::uStatusByte3
Definition: MFC3045Types.h:129
MTL::CMFC3045Device
Definition: MFC3045Device.h:50
uStatusRegSel::sStatusRegSel::ALLST
U8 ALLST
Definition: MFC3045Device.h:40
MTL::Instrument::sSerialPortSettings
Definition: VISAInstrumentTypes.h:173
MTL::Instrument::MFC3045Types::uStatusByte2
Definition: MFC3045Types.h:113
uStatusRegSel::sStatusRegSel::ST3
U8 ST3
Definition: MFC3045Device.h:36
MTL::Instrument::MFC3045Types::uStatusByte4
Definition: MFC3045Types.h:148
Helpers.h
Collection of utility macros for error messages.
MTL::CInstrumentCatalog::sInstrumentState
Definition: InstrumentCatalog.h:212
MTL::CMFCDevice::sMFCDeviceError
Definition: MFCDevice.h:30
MTL::CInstrumentCatalog::sMFC3045SerialPortSettings
Definition: InstrumentCatalog.h:81
MTL
Definition: CPT2026PeripheralROM.h:19
MTL::Instrument
Definition: MFC3045.h:25
MTL::CMFCDevice
Definition: MFCDevice.h:24
MTL::CInstrumentCatalog::eRemoteBoxBusyLedState
eRemoteBoxBusyLedState
Definition: InstrumentCatalog.h:242
uStatusRegSel::sStatusRegSel
Definition: MFC3045Device.h:32
MTL::CInstrumentCatalog::sProbeArrayInformation
Definition: InstrumentCatalog.h:145
MFC3045.h
Interface definition for C++ API for Metrolab MFC3045.
uStatusRegSel::sStatusRegSel::ST6
U8 ST6
Definition: MFC3045Device.h:39
InstrumentCatalog.h
MFCController.h
MTL::Instrument::tResourceName
std::string tResourceName
Definition: VISAInstrumentTypes.h:21
MTL::Instrument::MFC3045Types::uStatusByte5
Definition: MFC3045Types.h:164
MTL::CMFCController
Definition: MFCController.h:34
VISAInstrument.h
C++ wrapper for NI-VISA: interface definition.
MTL::CInstrumentCatalog::sInstrumentInformation
Definition: InstrumentCatalog.h:106
uStatusRegSel::sStatusRegSel::ST1
U8 ST1
Definition: MFC3045Device.h:34
uStatusRegSel::sStatusRegSel::ST4
U8 ST4
Definition: MFC3045Device.h:37
uStatusRegSel::sStatusRegSel::ST2
U8 ST2
Definition: MFC3045Device.h:35
MTL::CInstrumentCatalog::tNormalizationTable
std::vector< tNormalizationCorrection > tNormalizationTable
Definition: InstrumentCatalog.h:281
MTL::Instrument::CVISAResourceManager
VISA Resource Manager class.
Definition: VISAInstrument.h:35
MTL::CInstrumentCatalog::sInstrumentConfiguration
Definition: InstrumentCatalog.h:116
MTL::Instrument::MFC3045Types::uStatusByte6
Definition: MFC3045Types.h:186
MTL::CInstrumentCatalog::sNormalization
Definition: InstrumentCatalog.h:282
uStatusRegSel
Definition: MFC3045Device.h:30
MFCDevice.h