12 #ifndef __EIOT2SRAI2_H
13 #define __EIOT2SRAI2_H
19 #define AIC_CAL_VOLT_LOW (2000.0)
20 #define AIC_CAL_VOLT_HIGH (8000.0)
21 #define AIC_CAL_MV_LOW (20.0)
22 #define AIC_CAL_MV_HIGH (80.0)
23 #define AIC_CAL_MA_LOW (4.0)
24 #define AIC_CAL_MA_HIGH (16.0)
25 #define AIC_CAL_HIZ_LOW (800.0)
26 #define AIC_CAL_HIZ_HIGH (1200.0)
27 #define AIC_CAL_OHM_LOW (200.0)
28 #define AIC_CAL_OHM_HIGH (400.0)
29 #define AIC_CAL_HOHM_LOW (1200.0)
30 #define AIC_CAL_HOHM_HIGH (4800.0)
33 #define AIC_VOLT_RANGE_LOW (-10300.0)
34 #define AIC_VOLT_RANGE_HIGH (10300.0)
35 #define AIC_MV_RANGE_LOW (-150.0)
36 #define AIC_MV_RANGE_HIGH (150.0)
37 #define AIC_AI2_4_MA_RANGE_LOW (-30.0)
38 #define AIC_AI2_4_MA_RANGE_HIGH (30.0)
39 #define AIC_AI3_MA_RANGE_LOW (-28.0)
40 #define AIC_AI3_MA_RANGE_HIGH (28.0)
42 #define AIC_HIZ_RANGE_LOW (0.0)
43 #define AIC_HIZ_RANGE_HIGH (1800.0)
44 #define AIC_OHM_RANGE_LOW (0.0)
45 #define AIC_OHM_RANGE_HIGH (464.0)
46 #define AIC_HOHM_RANGE_LOW (0.0)
47 #define AIC_HOHM_RANGE_HIGH (7000.0)
48 #define AIC_POT_RANGE_LOW (0.0)
49 #define AIC_POT_RANGE_HIGH (100.0)
51 #define AIC_MV_RANGE_NOMINAL_INPUT_IMPEDANCE (100000000.0f)
52 #define AIC_MA_RANGE_NOMINAL_INPUT_IMPEDANCE (5.0f)
53 #define AIC_AI3_NOMINAL_INPUT_IMPEDANCE (70.0f)
54 #define AIC_HIZ_RANGE_NOMINAL_INPUT_IMPEDANCE (101000000.0f)
55 #define AIC_VOLT_RANGE_NOMINAL_INPUT_IMPEDANCE (303000.0f)
57 #define AIC_MAX_FILTER_TIME (999999999)
60 enum Ai2CalibrationRangeEnum
62 AI2_CALIBRATION_RANGE_VOLTS,
63 AI2_CALIBRATION_RANGE_MILLIVOLTS,
64 AI2_CALIBRATION_RANGE_HiZ_VOLTS,
65 AI2_CALIBRATION_RANGE_RTD_OHMS,
66 AI2_CALIBRATION_RANGE_RTD_OHMS_HIGH,
67 AI2_NUMBER_OF_CALIBRATION_RANGES
75 AI2_NUMBER_OF_CHANNELS
83 #include "eio_t25srm.h"
98 AI2_UPDATE_CYCLE_62_5mS,
99 AI2_UPDATE_CYCLE_125mS,
100 AI2_UPDATE_CYCLE_187_5mS,
101 AI2_UPDATE_CYCLE_250mS,
102 AI2_UPDATE_CYCLE_312_5mS,
103 AI2_UPDATE_CYCLE_375mS,
104 AI2_UPDATE_CYCLE_437_5mS,
105 AI2_UPDATE_CYCLE_500mS,
106 AI2_UPDATE_CYCLE_562_5mS,
107 AI2_UPDATE_CYCLE_625mS,
108 AI2_UPDATE_CYCLE_687_5mS,
109 AI2_UPDATE_CYCLE_750mS,
110 AI2_NUMBER_OF_UPDATE_CYCLES,
113 enum Ai2CalibrationTypeEnum
115 AI2_CALIBRATION_TYPE_VOLTS,
116 AI2_CALIBRATION_TYPE_RESISTANCE,
119 enum Ai2FilterTypeEnum
121 AI2_FILTER_TYPE_MAIN,
123 AI2_NUMBER_OF_FILTER_TYPES
126 enum Ai2OperatingRanges
172 AIC_MODE_UNSUPPORTED,
179 EIO_T2500AI2_STATE_MODULE_NEEDS_RESET,
180 EIO_T2500AI2_STATE_INITIALISING,
181 EIO_T2500AI2_STATE_RUNTIME,
182 EIO_T2500AI2_STATE_DELETE,
183 EIO_T2500AI2_STATE_SECONDARY,
184 EIO_T2500AI2_STATE_BECOMING_PRIMARY_1,
185 EIO_T2500AI2_STATE_BECOMING_PRIMARY_2,
188 enum Ai2EepromAccessState
190 AI2_EEPROM_RESET_STATE,
191 AI2_EEPROM_READ_CHANNEL_1_USER_CALIBRATION,
192 AI2_EEPROM_READ_CHANNEL_2_USER_CALIBRATION,
193 AI2_EEPROM_READ_CHANNEL_1_FACTORY_CALIBRATION,
194 AI2_EEPROM_READ_CHANNEL_2_FACTORY_CALIBRATION,
197 AI2_EEPROM_WRITE_DONE
201 enum Ai2CalibrationState
204 AI2_CAL_STATE_WAIT_FOR_RANGE,
206 AI2_CAL_STATE_RUNNING,
207 AI2_CAL_STATE_DATA_GATHERED,
208 AI2_CAL_STATE_WAIT_FOR_VALUE,
209 AI2_CAL_STATE_POINT_DONE,
211 AI2_CAL_STATE_SAVE_LOW_POINT,
212 AI2_CAL_STATE_SAVE_HIGH_POINT,
213 AI2_CAL_STATE_DATA_SAVED,
214 AI2_CAL_STATE_RESTORE,
215 AI2_CAL_STATE_END_CAL
218 enum Ai2CalibrationPoints
222 AI2_NUMBER_OF_CALIBRATION_POINTS
228 }Ai2RangeTotalConfig;
233 EioT2500AI2Module(
unsigned char moduleNumber, EioT2500CycleEnum z_expectedCycleNumber);
234 virtual ~EioT2500AI2Module();
237 virtual void update62_5mS();
238 virtual void update125mS();
239 virtual void updateBuffers125ms();
240 EioBoolean getCalibrated(EioUint8 channel, EioAICalType calType, EioUint8 rangeNumber);
243 void decipherCalibration();
244 void checkUserCalibration();
246 Ai2OperatingRanges getOperatingRange(EioUint8 channel);
247 EioUint8 eeCheckBits( EioUint8 *bytePtr);
248 static void secondaryFilter(
float sample,
float *polep,
float divisor, EioSint8 *resetp );
249 void driveChannelLeds();
250 void updateEepromImage125mS();
251 void disableAll62_5mS();
252 void disableAll125mS();
253 void updateCalibrationState();
255 Ai2RunStates m_state;
256 Ai2EepromAccessState m_eepromState;
257 Ai2CalibrationState m_calibrationState[AI2_NUMBER_OF_CHANNELS];
258 float m_calibrationCoefficient1[AI2_NUMBER_OF_CHANNELS][AI2_NUMBER_OF_CALIBRATION_RANGES];
259 float m_calibrationCoefficient2[AI2_NUMBER_OF_CHANNELS][AI2_NUMBER_OF_CALIBRATION_RANGES];
260 bool m_rangeCalibrated[AI2_NUMBER_OF_CHANNELS][AI2_NUMBER_OF_CALIBRATION_RANGES];
261 EioBoolean m_rangeFactoryCalibrated[AI2_NUMBER_OF_CHANNELS][AI2_NUMBER_OF_CALIBRATION_RANGES];
262 EioBoolean m_rangeUserCalibrated[AI2_NUMBER_OF_CHANNELS][AI2_NUMBER_OF_CALIBRATION_RANGES];
263 float m_oldCalCoefficient1[AI2_NUMBER_OF_CHANNELS][AI2_NUMBER_OF_CALIBRATION_RANGES];
264 float m_oldCalCoefficient2[AI2_NUMBER_OF_CHANNELS][AI2_NUMBER_OF_CALIBRATION_RANGES];
265 bool m_oldRangeCalibrated[AI2_NUMBER_OF_CHANNELS][AI2_NUMBER_OF_CALIBRATION_RANGES];
266 bool m_factoryCalRead;
267 EioUint8 m_calCounter[AI2_NUMBER_OF_CHANNELS];
268 EioUint32 m_calReading[AI2_NUMBER_OF_CHANNELS][AI2_NUMBER_OF_CALIBRATION_POINTS];
269 EioUint32 m_deltaCounts[AI2_NUMBER_OF_CHANNELS];
270 Ai2CalibrationPoints m_calPointIndex[AI2_NUMBER_OF_CHANNELS];
271 float m_actualCalValue[AI2_NUMBER_OF_CHANNELS][AI2_NUMBER_OF_CALIBRATION_POINTS];
273 static float m_calScaleFactor;
274 static float m_calibrationRefLow[AI2_NUMBER_OF_CALIBRATION_RANGES];
275 static float m_calibrationRefHigh[AI2_NUMBER_OF_CALIBRATION_RANGES];
276 static Ai2CalibrationTypeEnum m_calType[AI2_NUMBER_OF_CALIBRATION_RANGES];
277 static Ai2RangeTotalConfig m_rangeTotalConfig[NUMBER_OF_AIC_MODES];
278 static EioUint8 m_rangeRepeatCycles[NUMBER_OF_AIC_MODES];
279 static Ai2CalibrationRangeEnum m_calibrationRange[NUMBER_OF_AIC_MODES];
280 static Ai2OperatingRanges m_calOperatingRange[AI2_NUMBER_OF_CALIBRATION_RANGES];
298 DsmMuxEnum m_currentMux[AI2_NUMBER_OF_CHANNELS];
305 bool m_messagesScheduled;
306 EioUint8 m_eepromImage[256];
308 EioSint32 m_filterCount[AI2_NUMBER_OF_CHANNELS][NUMBER_OF_DSM_MUX];
309 EioUint8 m_filterStatus[AI2_NUMBER_OF_CHANNELS][NUMBER_OF_DSM_MUX];
310 EioUint8 m_lastHeartBeat[AI2_NUMBER_OF_CHANNELS];
311 float m_divisor[AI2_NUMBER_OF_CHANNELS];
312 EioSint8 m_filterReset[AI2_NUMBER_OF_CHANNELS][AI2_NUMBER_OF_FILTER_TYPES];
313 EioUint8 m_rangingCount[AI2_NUMBER_OF_CHANNELS];
314 float m_sensorBreakValue[AI2_NUMBER_OF_CHANNELS];
320 Ai2OperatingRanges m_currentRange[AI2_NUMBER_OF_CHANNELS];
322 Ai2UpdateCycles m_updateCycle;
324 EioUint8 m_hideAuxilliaryErrors;
325 EioUint8 m_dfcConfigAttempts;
326 EioUint8 m_ignoreCJorZeroCount;
Definition: eio_t25srm.h:58
Definition: dfc_ssm.h:198
Definition: eiot2cal.h:36
Definition: dfc_ssm.h:233
Definition: dfc_ssm.h:266
Definition: dfc_ssm.h:206
Definition: dfc_ssm.h:306
Definition: dfc_ssm.h:174