Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -r037f0edb0b880130563058c809ba50308f2a63e9 -r2fafa5769ca6850277200ae0ec08a0e508b0d2ed --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 037f0edb0b880130563058c809ba50308f2a63e9) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 2fafa5769ca6850277200ae0ec08a0e508b0d2ed) @@ -57,6 +57,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) @@ -421,27 +422,34 @@ 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 ); F32 const temperature = getTemperatureValue( associateTempSensor[ sensorId ] ); F32 const conductivity = ( 1 / resistance * SIEMENS_TO_MICROSIEMENS_CONVERSION ); - internalErrorCount[ sensorId ] = 0; compensatedConductivityValues[ sensorId ].data = calcCompensatedConductivity( conductivity, temperature ); } 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; + } } /*********************************************************************//** Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -r037f0edb0b880130563058c809ba50308f2a63e9 -r2fafa5769ca6850277200ae0ec08a0e508b0d2ed --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 037f0edb0b880130563058c809ba50308f2a63e9) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 2fafa5769ca6850277200ae0ec08a0e508b0d2ed) @@ -48,6 +48,8 @@ #define DIALYSATE_FILL_TIME_OUT ( 5 * SEC_PER_MIN * MS_PER_SECOND ) ///< Time out period when reservoir is not filled with correct dialysate. ///< Persistent time interval for concentrate pumps test. #define CONCENTRATE_PUMP_TEST_PERSISTENT_INTERVAL ( 2 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) +///< Persistent time interval for concentrate pumps prime. +#define CONCENTRATE_PUMP_PRIME_INTERVAL ( 3 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) #define ACID_BICARB_CONCENTRATE_ADDITION_MULTIPLER 1.06 ///< Acid and bicarbonate concentrates make up around 6% to total volume. #define FLOW_INTEGRATED_VOLUME_CHECK_TOLERANCE 0.1 ///< Flow integrated volume has 10% tolerance compare to load cell reading. @@ -402,27 +404,27 @@ static DG_FILL_MODE_STATE_T handleDialysateProductionState( void ) { DG_FILL_MODE_STATE_T result = DG_FILL_MODE_STATE_DIALYSATE_PRODUCTION; + BOOL const isDialysateGood = checkDialysateConductivity(); handleDialysateMixing(); #ifndef DISABLE_DIALYSATE_CHECK - if ( ( TRUE == checkDialysateConductivity() ) && ( TRUE == checkDialysateTemperature() ) ) + if ( ( TRUE == isDialysateGood ) && ( TRUE == checkDialysateTemperature() ) ) +#else + if ( TRUE ) #endif { setValveState( VPO, VALVE_STATE_FILL_C_TO_NC ); result = DG_FILL_MODE_STATE_DELIVER_DIALYSATE; } - - if ( checkDialysateConductivity() != TRUE ) + else if ( isDialysateGood != TRUE ) { if ( ( TRUE == isAlarmActive( ALARM_ID_ACID_CONDUCTIVITY_OUT_OF_RANGE ) ) || ( TRUE == isAlarmActive( ALARM_ID_DIALYSATE_CONDUCTIVITY_OUT_OF_RANGE ) ) ) { result = DG_FILL_MODE_STATE_PAUSED; requestConcentratePumpsOff( CONCENTRATEPUMPS_CP1_ACID ); requestConcentratePumpsOff( CONCENTRATEPUMPS_CP2_BICARB ); - signalROPumpHardStop(); - stopPrimaryHeater(); } } @@ -447,8 +449,6 @@ ( isAlarmActive( ALARM_ID_DIALYSATE_CONDUCTIVITY_OUT_OF_RANGE ) ) != TRUE ) { result = DG_FILL_MODE_STATE_CHECK_INLET_WATER; - setROPumpTargetFlowRate( TARGET_RO_FLOW_RATE_L, TARGET_RO_PRESSURE_PSI ); - startPrimaryHeater(); } } Index: firmware/App/Modes/ModeRecirculate.c =================================================================== diff -u -r2fff37fa585181917705645494549b5fd4a4d522 -r2fafa5769ca6850277200ae0ec08a0e508b0d2ed --- firmware/App/Modes/ModeRecirculate.c (.../ModeRecirculate.c) (revision 2fff37fa585181917705645494549b5fd4a4d522) +++ firmware/App/Modes/ModeRecirculate.c (.../ModeRecirculate.c) (revision 2fafa5769ca6850277200ae0ec08a0e508b0d2ed) @@ -44,7 +44,7 @@ #define TARGET_RO_FLOW_RATE_L 0.3 ///< Target flow rate for RO pump. #define TARGET_FLUSH_LINES_RO_FLOW_RATE_L 0.6 ///< Target flow rate for RO pump. -#define FLUSH_LINES_VOLUME_L 0.01 ///< Water volume (in Liters) to flush when starting re-circulate mode. +#define FLUSH_LINES_VOLUME_L 0.01 ///< Water volume (in Liters) to flush when starting re-circulate mode. // ********** private data **********