12 #ifndef __EIOT2SRAI4_H
13 #define __EIOT2SRAI4_H
19 #define AI4_NUMBER_OF_VISIBLE_CALIBRATION_RANGES (AI4_NUMBER_OF_CALIBRATION_RANGES - 1)
22 enum Ai4CalibrationRangeEnum
24 AI4_CALIBRATION_RANGE_MILLIVOLTS,
25 AI4_CALIBRATION_RANGE_RTD_OHMS,
26 AI4_NUMBER_OF_CALIBRATION_RANGES
33 #include "eio_t25srm.h"
48 AI4_UPDATE_CYCLE_62_5mS,
49 AI4_UPDATE_CYCLE_125mS,
50 AI4_UPDATE_CYCLE_187_5mS,
51 AI4_UPDATE_CYCLE_250mS,
52 AI4_NUMBER_OF_UPDATE_CYCLES,
63 AI4_NUMBER_OF_CHANNEL_PAIRS
72 AI4_NUMBER_OF_CHANNELS,
75 enum Ai4FilterTypeEnum
79 AI4_NUMBER_OF_FILTER_TYPES
82 enum Ai4OperatingRanges
105 EIO_T2500AI4_STATE_MODULE_NEEDS_RESET,
106 EIO_T2500AI4_STATE_INITIALISING,
107 EIO_T2500AI4_STATE_RUNTIME,
108 EIO_T2500AI4_STATE_DELETE,
109 EIO_T2500AI4_STATE_SECONDARY,
110 EIO_T2500AI4_STATE_BECOMING_PRIMARY_1,
111 EIO_T2500AI4_STATE_BECOMING_PRIMARY_2,
114 enum Ai4EepromAccessState
116 AI4_EEPROM_RESET_STATE,
117 AI4_EEPROM_READ_CHANNEL_1_USER_CALIBRATION,
118 AI4_EEPROM_READ_CHANNEL_2_USER_CALIBRATION,
119 AI4_EEPROM_READ_CHANNEL_1_FACTORY_CALIBRATION,
120 AI4_EEPROM_READ_CHANNEL_2_FACTORY_CALIBRATION,
123 AI4_EEPROM_WRITE_DONE
127 enum Ai4CalibrationState
130 AI4_CAL_STATE_WAIT_FOR_RANGE,
132 AI4_CAL_STATE_RUNNING,
133 AI4_CAL_STATE_DATA_GATHERED,
134 AI4_CAL_STATE_WAIT_FOR_VALUE,
135 AI4_CAL_STATE_POINT_DONE,
137 AI4_CAL_STATE_SAVE_LOW_POINT,
138 AI4_CAL_STATE_SAVE_HIGH_POINT,
139 AI4_CAL_STATE_DATA_SAVED,
140 AI4_CAL_STATE_RESTORE,
141 AI4_CAL_STATE_END_CAL
144 enum Ai4CalibrationPoints
148 AI4_NUMBER_OF_CALIBRATION_POINTS
154 }Ai4RangeTotalConfig;
159 EioT2500AI4Module(
unsigned char moduleNumber, EioT2500CycleEnum z_expectedCycleNumber);
160 virtual ~EioT2500AI4Module();
163 virtual void update62_5mS();
164 virtual void update125mS();
165 virtual void updateBuffers125ms();
166 EioBoolean getCalibrated(EioUint8 channel, EioAICalType calType, EioUint8 rangeNumber);
169 void decipherCalibration();
170 void checkUserCalibration();
172 Ai4OperatingRanges getOperatingRange(EioUint8 channel);
173 EioUint8 eeCheckBits( EioUint8 *bytePtr);
174 static void secondaryFilter(
float sample,
float *polep,
float divisor, EioSint8 *resetp );
175 void driveChannelLeds();
176 void updateEepromImage125mS();
177 void disableAll62_5mS();
178 void disableAll125mS();
179 void setFaultValues();
180 void updateCalibrationState();
181 bool modCjRequired();
183 Ai4RunStates m_state;
184 Ai4EepromAccessState m_eepromState;
185 Ai4CalibrationState m_calibrationState[AI4_NUMBER_OF_CHANNEL_PAIRS];
188 float m_calibrationCoefficient1[AI4_NUMBER_OF_CHANNELS][AI4_NUMBER_OF_CALIBRATION_RANGES];
189 float m_calibrationCoefficient2[AI4_NUMBER_OF_CHANNELS][AI4_NUMBER_OF_CALIBRATION_RANGES];
190 bool m_rangeCalibrated[AI4_NUMBER_OF_CHANNELS][AI4_NUMBER_OF_CALIBRATION_RANGES];
191 EioBoolean m_rangeFactoryCalibrated[AI4_NUMBER_OF_CHANNEL_PAIRS][AI4_NUMBER_OF_CALIBRATION_RANGES];
193 EioBoolean m_rangeUserCalibrated[AI4_NUMBER_OF_CHANNEL_PAIRS];
195 float m_oldCalCoefficient1[AI4_NUMBER_OF_CHANNEL_PAIRS];
196 bool m_oldRangeCalibrated[AI4_NUMBER_OF_CHANNEL_PAIRS];
198 EioUint8 m_calCounter[AI4_NUMBER_OF_CHANNEL_PAIRS];
199 EioUint32 m_calReading[AI4_NUMBER_OF_CHANNEL_PAIRS][AI4_NUMBER_OF_CALIBRATION_POINTS];
200 EioUint32 m_deltaCounts[AI4_NUMBER_OF_CHANNEL_PAIRS];
201 Ai4CalibrationPoints m_calPointIndex[AI4_NUMBER_OF_CHANNEL_PAIRS];
202 float m_actualCalValue[AI4_NUMBER_OF_CHANNEL_PAIRS][AI4_NUMBER_OF_CALIBRATION_POINTS];
204 static float m_calScaleFactor;
205 static float m_calibrationRefLow[AI4_NUMBER_OF_CALIBRATION_RANGES];
206 static float m_calibrationRefHigh[AI4_NUMBER_OF_CALIBRATION_RANGES];
207 static Ai2CalibrationRangeEnum m_calAI2Range[AI4_NUMBER_OF_CALIBRATION_RANGES];
208 static Ai4RangeTotalConfig m_rangeTotalConfig[NUMBER_OF_AI4_MODES];
223 DsmMuxEnum m_currentMux[AI4_NUMBER_OF_CHANNEL_PAIRS];
224 DsmMuxEnum m_previousMux[AI4_NUMBER_OF_CHANNEL_PAIRS];
231 bool m_messagesScheduled;
232 EioUint8 m_eepromImage[256];
234 EioSint32 m_filterCount[AI4_NUMBER_OF_CHANNEL_PAIRS][NUMBER_OF_DSM_MUX];
235 EioSint32 m_oldFilterCount[AI4_NUMBER_OF_CHANNEL_PAIRS][NUMBER_OF_DSM_MUX];
236 EioSint32 m_processedCount[AI4_NUMBER_OF_CHANNEL_PAIRS][NUMBER_OF_DSM_MUX];
238 EioUint8 m_filterStatus[AI4_NUMBER_OF_CHANNEL_PAIRS][NUMBER_OF_DSM_MUX];
239 EioUint8 m_oldFilterStatus[AI4_NUMBER_OF_CHANNEL_PAIRS][NUMBER_OF_DSM_MUX];
240 EioUint8 m_processedStatus[AI4_NUMBER_OF_CHANNEL_PAIRS][NUMBER_OF_DSM_MUX];
242 float m_divisor[AI4_NUMBER_OF_CHANNELS];
243 EioSint8 m_filterReset[AI4_NUMBER_OF_CHANNELS][AI4_NUMBER_OF_FILTER_TYPES];
244 EioUint8 m_lastHeartBeat[AI4_NUMBER_OF_CHANNEL_PAIRS];
245 EioUint8 m_rangingCount[AI4_NUMBER_OF_CHANNELS];
246 EioUint8 m_noInterpolation[AI4_NUMBER_OF_CHANNELS];
250 float m_sensorBreakValue[AI4_NUMBER_OF_CHANNELS];
253 EioAIAuxStatus m_cjStatus;
255 Ai4OperatingRanges m_currentRange[AI4_NUMBER_OF_CHANNELS];
257 Ai4UpdateCycles m_updateCycle;
260 EioUint8 m_dfcConfigAttempts;
261 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