Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -r67021fbc633259e8e1bce76749dbef7d0cb51998 -re6f3a632890f96a5aa282922d11df148bdd06587 --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 67021fbc633259e8e1bce76749dbef7d0cb51998) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision e6f3a632890f96a5aa282922d11df148bdd06587) @@ -45,17 +45,6 @@ #define COND_SENSOR_CPI_MAX_VALUE 2000 ///< Maximum inlet water conductivity. #define COND_SENSOR_CPI_MIN_VALUE 100 ///< Minimum inlet water conductivity. -#define MIN_ACID_CONCENTRATE_CONDUCTIVITY 11000 ///< Minimum conductivity for acid concentrate. -#define MAX_ACID_CONCENTRATE_CONDUCTIVITY 11850 ///< Maximum conductivity for acid concentrate. - -#define MIN_BICARB_CONCENTRATE_CONDUCTIVITY 2000 ///< Minimum conductivity for bicarbonate concentrate. -#define MAX_BICARB_CONCENTRATE_CONDUCTIVITY 3000 ///< Maximum conductivity for bicarbonate concentrate. - -///< Minimum conductivity value for dialysate solution. -#define MIN_DIALYSATE_CONDUCTIVITY ( MIN_ACID_CONCENTRATE_CONDUCTIVITY + MIN_BICARB_CONCENTRATE_CONDUCTIVITY ) -///< Maximum conductivity value for dialysate solution. -#define MAX_DIALYSATE_CONDUCTIVITY ( MAX_ACID_CONCENTRATE_CONDUCTIVITY + MAX_BICARB_CONCENTRATE_CONDUCTIVITY ) - #define MAX_ALLOWED_UNCHANGED_CONDUCTIVITY_READS ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< New reading every 800 ms, expect to get valid new reading in 1s. #define MAX_CONDUCTIVITY_SENSOR_FAILURES 5 ///< maximum number of conductivity sensor errors within window period before alarm. #define MAX_CONDUCTIVITY_SENSOR_FAILURE_WINDOW_MS ( 60 * MS_PER_SECOND ) ///< Conductivity sensor error window. @@ -69,6 +58,7 @@ #define EMSTAT_PICO_MEASUREMENT_OFFSET 0x8000000 ///< Measurement offset for emstat pico measurement data. #define EMSTAT_PICO_GOOD_STATUS 0x10 ///< Measurement good status. +#define EMSTAT_PICO_TIMING_NOT_MET_STATUS 0x11 ///< Measurement takes too long status. #define EMSTAT_PICO_FIFO_EMPTY_MASK 0x8000 ///< Emstat Pico buffer empty indication bit. #pragma pack(push,1) @@ -260,55 +250,6 @@ /*********************************************************************//** * @brief - * The isAcidConductivityInRange function checks if acid conductivity value - * is in range. - * @details Inputs: CD1 sensor conductivity - * @details Outputs: none - * @return TRUE if acid conductivity is in range, otherwise FALSE - *************************************************************************/ -BOOL isAcidConductivityInRange( void ) -{ - F32 const acidConductivity = getConductivityValue( CONDUCTIVITYSENSORS_CD1_SENSOR ); - BOOL const isConductivityInRange = ( MIN_ACID_CONCENTRATE_CONDUCTIVITY <= acidConductivity ) && ( acidConductivity <= MAX_ACID_CONCENTRATE_CONDUCTIVITY ); - - return isConductivityInRange; -} - -/*********************************************************************//** - * @brief - * The isBicarbConductivityInRange function checks if bicarbonate conductivity - * value is in range. - * @details Inputs: CD2 sensor conductivity - * @details Outputs: none - * @return TRUE if bicarb conductivity is in range, otherwise FALSE - *************************************************************************/ -BOOL isBicarbConductivityInRange( void ) -{ - F32 const bicarbConductivity = getConductivityValue( CONDUCTIVITYSENSORS_CD2_SENSOR ); - BOOL const isConductivityInRange = ( MIN_BICARB_CONCENTRATE_CONDUCTIVITY <= bicarbConductivity ) && ( bicarbConductivity <= MAX_BICARB_CONCENTRATE_CONDUCTIVITY ); - - return isConductivityInRange; -} - -/*********************************************************************//** - * @brief - * The isDialysateConductivityInRange function checks if dialysate conductivity - * value is in range. - * @details Inputs: CD2 sensor conductivity - * @details Outputs: none - * @return TRUE if dialysate conductivity is in range, otherwise FALSE - *************************************************************************/ -BOOL isDialysateConductivityInRange( void ) -{ - F32 const bicarbConductivity = getConductivityValue( CONDUCTIVITYSENSORS_CD2_SENSOR ); - BOOL const isConductivityInRange = isAcidConductivityInRange() && ( MIN_DIALYSATE_CONDUCTIVITY <= bicarbConductivity ) && - ( bicarbConductivity <= MAX_DIALYSATE_CONDUCTIVITY ); - - return isConductivityInRange; -} - -/*********************************************************************//** - * @brief * The getConductivityValue function gets the compensated conductivity * value for a given conductivity sensor id. * @details Inputs: compensatedConductivityValues[] @@ -472,8 +413,9 @@ static void processMeasurementDataPackage( U32 sensorId ) { EMSTAT_VARIABLE_T const * const measurementPtr = (EMSTAT_VARIABLE_T *)&package; + U32 const status = hexStrToDec( (U08 *)&measurementPtr->status, sizeof( measurementPtr->status ) ); - if ( EMSTAT_PICO_GOOD_STATUS == hexStrToDec( (U08 *)&measurementPtr->status, sizeof( measurementPtr->status ) ) ) + if ( EMSTAT_PICO_GOOD_STATUS == status ) { U32 const prefix = prefixStrToSIFactor( measurementPtr->prefix ); F32 const resistance = ( ( F32 )( hexStrToDec( measurementPtr->value, sizeof( measurementPtr->value ) ) - EMSTAT_PICO_MEASUREMENT_OFFSET ) / prefix ); @@ -486,14 +428,21 @@ } else { + compensatedConductivityValues[ sensorId ].data = 0.0; + } + + if ( EMSTAT_PICO_TIMING_NOT_MET_STATUS == status ) + { ++internalErrorCount[ sensorId ]; - if ( internalErrorCount[ sensorId ] > MAX_ALLOWED_UNCHANGED_CONDUCTIVITY_READS ) + if ( internalErrorCount[ sensorId ] > MAX_CONDUCTIVITY_SENSOR_FAILURES ) { -#ifndef DISABLE_COND_SENSOR_CHECK SET_ALARM_WITH_1_U32_DATA( ALARM_ID_CONDUCTIVITY_SENSOR_FAULT, sensorId ); -#endif } } + else + { + internalErrorCount[ sensorId ] = 0; + } } /*********************************************************************//** @@ -552,7 +501,7 @@ if ( TRUE == incTimeWindowedCount( TIME_WINDOWED_COUNT_FPGA_CONDUCTIVITY_SENSOR_ERROR ) ) { #ifndef DISABLE_COND_SENSOR_CHECK - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_CONDUCTIVITY_SENSOR_FAULT, CONDUCTIVITYSENSORS_CD1_SENSOR ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_CONDUCTIVITY_SENSOR_FAULT, CONDUCTIVITYSENSORS_CD1_SENSOR, CONDUCTIVITYSENSORS_CD2_SENSOR ); #endif } }