irioCoreCpp Library Module  2.1.0
modules.h
1 #pragma once
2 
3 #include <vector>
4 #include <unordered_map>
5 #include <cmath>
6 
7 #include "errorsIrio.h"
8 
9 namespace irio {
10 
14 struct ConfigParams {
18  double CVADC = 0;
22  double CVDAC = 0;
26  double maxValAO = 0;
30  double minValAO = 0;
31 
35  ConfigParams() = default;
36 
45  ConfigParams(const double &cvadc, const double &cvdac, const double &maxAO,
46  const double &minAO) :
47  CVADC(cvadc), CVDAC(cvdac), maxValAO(maxAO), minValAO(minAO) {
48  }
49 };
50 
56 enum class ModulesType : std::uint32_t {
57  NoModule = 0,
58  FlexRIO_NI5761 = 0x109374C6,
59  FlexRIO_NI5781 = 0x1093748A,
60  FlexRIO_NI6581 = 0x10937418,
61  FlexRIO_NI5734 = 0x10937595,
62  cRIO_NI92xx = 1,
63 };
64 
70 enum class CouplingMode : std::uint8_t {
71  None = 0,
72  AC,
73  DC
74 };
75 
81 class Module {
82  public:
90  explicit Module(const ModulesType &id = ModulesType::NoModule);
91 
100  void setCouplingMode(const CouplingMode &mode);
101 
108 
114  double getCVADC() const;
115 
121  double getCVDAC() const;
122 
128  double getMaxValAO() const;
129 
135  double getMinValAO() const;
136 
141 
142  protected:
149  void addConfig(const CouplingMode &mode, const ConfigParams &config);
150 
151  private:
153  std::unordered_map<CouplingMode, const ConfigParams> m_availableConfigs;
158 };
159 
165 class ModuleNI5761: public Module {
166  public:
171 
172  private:
174  const ConfigParams m_configAC { 1.035 / 8191, 8191 / 1.035, 1.0, -1.0 };
176  const ConfigParams m_configDC { 0.635 / 8191, 8191 / 0.635, 0.635, -0.635 };
177 };
178 
184 class ModuleNI6581: public Module {
185  public:
190 
191  private:
193  const ConfigParams m_configNone { 1.0, 1.0, 1.0, -1.0 };
194 };
195 
201 class ModuleNI5734: public Module {
202  public:
207 
208  private:
210  const ConfigParams m_configNone { 2.0 / 65536, 65536 / 2.0, 1.0, -1.0 };
211 };
212 
218 class ModuleNI5781: public Module {
219  public:
224 
225  private:
227  const ConfigParams m_configDC { 2.0 / 16384, 65536.0, 0.5, -0.5 };
228 };
229 
235 class ModuleNI92xx: public Module {
236  public:
241 
242  private:
244  const ConfigParams m_configDC { std::pow(2, -21), std::pow(2, 15), 10, -10 };
245 };
246 
247 } // namespace irio
Conversion parameters for FlexRIO Module NI5734.
Definition: modules.h:201
ModuleNI5734()
Conversion parameters for FlexRIO Module NI5734.
const ConfigParams m_configNone
ConfigParams for No coupling mode for NI5734.
Definition: modules.h:210
Conversion parameters for FlexRIO Module NI5761.
Definition: modules.h:165
const ConfigParams m_configDC
ConfigParams for DC coupling mode for NI5761.
Definition: modules.h:176
ModuleNI5761()
Conversion parameters for FlexRIO Module NI5761.
const ConfigParams m_configAC
ConfigParams for AC coupling mode for NI5761.
Definition: modules.h:174
Conversion parameters for FlexRIO Module NI5781.
Definition: modules.h:218
ModuleNI5781()
Conversion parameters for FlexRIO Module NI5781.
const ConfigParams m_configDC
ConfigParams for DC coupling mode for NI5781.
Definition: modules.h:227
Conversion parameters for FlexRIO Module NI6581.
Definition: modules.h:184
const ConfigParams m_configNone
ConfigParams for No coupling mode for NI6581.
Definition: modules.h:193
ModuleNI6581()
Conversion parameters for FlexRIO Module NI6581.
Conversion parameters for cRIO Module 9205/9264.
Definition: modules.h:235
const ConfigParams m_configDC
ConfigParams for DC coupling mode for 9205/9264.
Definition: modules.h:244
ModuleNI92xx()
Conversion parameters for cRIO Module 9205/9264.
Manage conversion information for the ADC/DAC of a module.
Definition: modules.h:81
double getMaxValAO() const
Maximum value to be written in an analog output.
const ModulesType moduleID
Module identifier.
Definition: modules.h:140
void setCouplingMode(const CouplingMode &mode)
Sets a new coupling mode, changing the conversion constants accordingly.
CouplingMode getCouplingMode() const
Returns the actual configured coupling mode.
double getCVADC() const
Conversion to Volts of analog inputs.
Module(const ModulesType &id=ModulesType::NoModule)
Constructor.
double getMinValAO() const
Minimum value to be written in an analog output.
ConfigParams m_currentConfig
Current config values for the selected coupling mode.
Definition: modules.h:157
double getCVDAC() const
Conversion from Volts for analog outputs.
std::unordered_map< CouplingMode, const ConfigParams > m_availableConfigs
A map that stores available configurations for different coupling modes.
Definition: modules.h:153
void addConfig(const CouplingMode &mode, const ConfigParams &config)
Adds a configuration for a specific coupling mode.
CouplingMode m_couplingMode
Current coupling mode.
Definition: modules.h:155
ModulesType
Possible types of modules.
Definition: modules.h:56
CouplingMode
Coupling AI mode.
Definition: modules.h:70
@ FlexRIO_NI5734
FlexRIO_NI5734.
@ FlexRIO_NI5761
FlexRIO_NI5761.
@ FlexRIO_NI5781
FlexRIO_NI5781.
@ FlexRIO_NI6581
FlexRIO_NI6581.
@ cRIO_NI92xx
cRIO_NI92xx
@ NoModule
No module connected or the board.
Parameters for conversion.
Definition: modules.h:14
double maxValAO
Maximum value to be written in an analog output.
Definition: modules.h:26
double CVADC
Conversion to Volts of analog inputs.
Definition: modules.h:18
double CVDAC
Conversion from Volts for analog outputs.
Definition: modules.h:22
double minValAO
Minimum value to be written in an analog output.
Definition: modules.h:30
ConfigParams()=default
Default constructor.
ConfigParams(const double &cvadc, const double &cvdac, const double &maxAO, const double &minAO)
Initializes conversion parameters.
Definition: modules.h:45