12 #ifndef __EIOT2SRZI2_H
13 #define __EIOT2SRZI2_H
15 #include "eiot2srai2.h"
17 #define ZAIC_MV_RANGE_LOW (-150.0)
18 #define ZAIC_MV_RANGE_HIGH (150.0)
20 #define ZAIC_HIZ_RANGE_LOW (0.0)
21 #define ZAIC_HIZ_RANGE_HIGH (1800.0)
24 enum Zi2CalibrationRangeEnum
26 ZI2_CALIBRATION_RANGE_VOLTS,
27 ZI2_CALIBRATION_RANGE_MILLIVOLTS,
28 ZI2_CALIBRATION_RANGE_HiZ_VOLTS,
29 ZI2_CALIBRATION_RANGE_RTD_OHMS,
30 ZI2_CALIBRATION_RANGE_RTD_OHMS_HIGH,
31 ZI2_NUMBER_OF_CALIBRATION_RANGES
40 ZI2_NUMBER_OF_CHANNELS
48 #include "eio_t25srm.h"
63 ZI2_UPDATE_CYCLE_62_5mS,
64 ZI2_UPDATE_CYCLE_125mS,
65 ZI2_UPDATE_CYCLE_187_5mS,
66 ZI2_UPDATE_CYCLE_250mS,
67 ZI2_UPDATE_CYCLE_312_5mS,
68 ZI2_UPDATE_CYCLE_375mS,
69 ZI2_NUMBER_OF_UPDATE_CYCLES,
72 enum Zi2FilterTypeEnum
76 ZI2_NUMBER_OF_FILTER_TYPES
79 enum Zi2OperatingRanges
97 ZAIC_MODE_UNSUPPORTED,
105 EIO_T2500ZI2_STATE_MODULE_NEEDS_RESET,
106 EIO_T2500ZI2_STATE_INITIALISING,
107 EIO_T2500ZI2_STATE_RUNTIME,
108 EIO_T2500ZI2_STATE_DELETE,
109 EIO_T2500ZI2_STATE_SECONDARY,
110 EIO_T2500ZI2_STATE_BECOMING_PRIMARY_1,
111 EIO_T2500ZI2_STATE_BECOMING_PRIMARY_2,
114 enum Zi2EepromAccessState
116 ZI2_EEPROM_RESET_STATE,
117 ZI2_EEPROM_READ_CHANNEL_1_USER_CALIBRATION,
118 ZI2_EEPROM_READ_CHANNEL_2_USER_CALIBRATION,
119 ZI2_EEPROM_READ_CHANNEL_1_FACTORY_CALIBRATION,
120 ZI2_EEPROM_READ_CHANNEL_2_FACTORY_CALIBRATION,
123 ZI2_EEPROM_WRITE_DONE
127 enum Zi2CalibrationState
130 ZI2_CAL_STATE_WAIT_FOR_RANGE,
132 ZI2_CAL_STATE_RUNNING,
133 ZI2_CAL_STATE_DATA_GATHERED,
134 ZI2_CAL_STATE_WAIT_FOR_VALUE,
135 ZI2_CAL_STATE_POINT_DONE,
137 ZI2_CAL_STATE_SAVE_LOW_POINT,
138 ZI2_CAL_STATE_SAVE_HIGH_POINT,
139 ZI2_CAL_STATE_DATA_SAVED,
140 ZI2_CAL_STATE_RESTORE,
141 ZI2_CAL_STATE_END_CAL
144 enum Zi2CalibrationPoints
148 ZI2_NUMBER_OF_CALIBRATION_POINTS
154 }Zi2RangeTotalConfig;
159 EioT2500ZI2Module(
unsigned char moduleNumber, EioT2500CycleEnum z_expectedCycleNumber);
160 virtual ~EioT2500ZI2Module();
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 Zi2OperatingRanges 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 updateCalibrationState();
180 void updateSensorMonitorDemand();
182 Zi2RunStates m_state;
183 Zi2EepromAccessState m_eepromState;
184 Zi2CalibrationState m_calibrationState[ZI2_NUMBER_OF_CHANNELS];
185 float m_calibrationCoefficient1[ZI2_NUMBER_OF_CHANNELS][ZI2_NUMBER_OF_CALIBRATION_RANGES];
186 float m_calibrationCoefficient2[ZI2_NUMBER_OF_CHANNELS][ZI2_NUMBER_OF_CALIBRATION_RANGES];
187 bool m_rangeCalibrated[ZI2_NUMBER_OF_CHANNELS][ZI2_NUMBER_OF_CALIBRATION_RANGES];
188 EioBoolean m_rangeFactoryCalibrated[ZI2_NUMBER_OF_CHANNELS][ZI2_NUMBER_OF_CALIBRATION_RANGES];
189 EioBoolean m_rangeUserCalibrated[ZI2_NUMBER_OF_CHANNELS][ZI2_NUMBER_OF_CALIBRATION_RANGES];
190 float m_oldCalCoefficient1[ZI2_NUMBER_OF_CHANNELS][ZI2_NUMBER_OF_CALIBRATION_RANGES];
191 float m_oldCalCoefficient2[ZI2_NUMBER_OF_CHANNELS][ZI2_NUMBER_OF_CALIBRATION_RANGES];
192 bool m_oldRangeCalibrated[ZI2_NUMBER_OF_CHANNELS][ZI2_NUMBER_OF_CALIBRATION_RANGES];
193 bool m_factoryCalRead;
194 EioUint8 m_calCounter[ZI2_NUMBER_OF_CHANNELS];
195 EioUint32 m_calReading[ZI2_NUMBER_OF_CHANNELS][ZI2_NUMBER_OF_CALIBRATION_POINTS];
196 EioUint32 m_deltaCounts[ZI2_NUMBER_OF_CHANNELS];
197 Zi2CalibrationPoints m_calPointIndex[ZI2_NUMBER_OF_CHANNELS];
198 float m_actualCalValue[ZI2_NUMBER_OF_CHANNELS][ZI2_NUMBER_OF_CALIBRATION_POINTS];
200 static float m_calScaleFactor;
201 static float m_calibrationRefLow[ZI2_NUMBER_OF_CALIBRATION_RANGES];
202 static float m_calibrationRefHigh[ZI2_NUMBER_OF_CALIBRATION_RANGES];
203 static Ai2CalibrationTypeEnum m_calType[ZI2_NUMBER_OF_CALIBRATION_RANGES];
204 static Zi2RangeTotalConfig m_rangeTotalConfig[NUMBER_OF_ZAIC_MODES];
205 static EioUint8 m_rangeRepeatCycles[NUMBER_OF_ZAIC_MODES];
206 static Zi2CalibrationRangeEnum m_calibrationRange[NUMBER_OF_ZAIC_MODES];
207 static Zi2OperatingRanges m_calOperatingRange[ZI2_NUMBER_OF_CALIBRATION_RANGES];
208 static char m_zi2Ident[];
227 DsmMuxEnum m_currentMux[ZI2_NUMBER_OF_CHANNELS];
234 bool m_messagesScheduled;
235 EioUint8 m_eepromImage[256];
237 EioSint32 m_filterCount[ZI2_NUMBER_OF_CHANNELS][NUMBER_OF_DSM_MUX];
238 EioUint8 m_filterStatus[ZI2_NUMBER_OF_CHANNELS][NUMBER_OF_DSM_MUX];
239 EioUint8 m_lastHeartBeat[ZI2_NUMBER_OF_CHANNELS];
240 float m_divisor[ZI2_NUMBER_OF_CHANNELS];
241 EioSint8 m_filterReset[ZI2_NUMBER_OF_CHANNELS][ZI2_NUMBER_OF_FILTER_TYPES];
242 EioUint8 m_rangingCount[ZI2_NUMBER_OF_CHANNELS];
243 float m_sensorBreakValue[ZI2_NUMBER_OF_CHANNELS];
248 bool m_zirconiaSensorMonitor;
250 Zi2OperatingRanges m_currentRange[ZI2_NUMBER_OF_CHANNELS];
252 Zi2UpdateCycles m_updateCycle;
254 EioUint8 m_hideAuxilliaryErrors;
255 EioUint8 m_dfcConfigAttempts;
256 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