Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -r31ab7888ff43eb15ea63a7d52e1832c1649456b0 -r2f3090feeb06eb738aefc8eae5f080070a0a8919 --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 31ab7888ff43eb15ea63a7d52e1832c1649456b0) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 2f3090feeb06eb738aefc8eae5f080070a0a8919) @@ -43,7 +43,6 @@ #define COND_SENSOR_REFERENCE_TEMPERATURE 25 ///< Reference temperature for conductivity sensor. #define COND_SENSOR_REPORT_PERIOD ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Broadcast conductivity values message every second. -#define COND_SENSOR_CPI_MAX_VALUE 2200 ///< Maximum inlet water conductivity. #define COND_SENSOR_CPI_WARNING_HIGH 2200 ///< Warning high value for inlet water conductivity. #define COND_SENSOR_CPI_WARNING_LOW 2000 ///< Warning low value for inlet water conductivity. #define COND_SENSOR_CPI_MIN_VALUE 100 ///< Minimum inlet water conductivity. @@ -141,7 +140,7 @@ setFPGACPoProbeType( COND_CPO_SENSOR_PROBE_TYPE ); initTimeWindowedCount( TIME_WINDOWED_COUNT_FPGA_CONDUCTIVITY_SENSOR_ERROR, MAX_CONDUCTIVITY_SENSOR_FAILURES, MAX_CONDUCTIVITY_SENSOR_FAILURE_WINDOW_MS ); -// initPersistentAlarm( ALARM_ID_INLET_WATER_HIGH_CONDUCTIVITY, COND_SENSOR_PERSISTENCE_PERIOD, COND_SENSOR_PERSISTENCE_PERIOD ); + initPersistentAlarm( ALARM_ID_INLET_WATER_HIGH_CONDUCTIVITY, COND_SENSOR_PERSISTENCE_PERIOD, COND_SENSOR_PERSISTENCE_PERIOD ); initPersistentAlarm( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_WARNING_RANGE, COND_SENSOR_PERSISTENCE_PERIOD, COND_SENSOR_PERSISTENCE_PERIOD ); initPersistentAlarm( ALARM_ID_INLET_WATER_LOW_CONDUCTIVITY, COND_SENSOR_PERSISTENCE_PERIOD, COND_SENSOR_PERSISTENCE_PERIOD ); initPersistentAlarm( ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE, RO_REJECTION_RATIO_PERSISTENCE_PERIOD, RO_REJECTION_RATIO_PERSISTENCE_PERIOD ); @@ -230,7 +229,7 @@ BOOL const isConductTooLow = ( conductivity <= COND_SENSOR_CPI_MIN_VALUE ); - BOOL const isConductTooHigh = ( conductivity >= COND_SENSOR_CPI_MAX_VALUE ); + BOOL const isConductTooHigh = ( conductivity >= COND_SENSOR_CPI_WARNING_HIGH ); BOOL const isConductInWarningRange = ( conductivity >= COND_SENSOR_CPI_WARNING_LOW ) && ( conductivity < COND_SENSOR_CPI_WARNING_HIGH ) ? TRUE : FALSE; @@ -241,7 +240,7 @@ } else if ( TRUE == isConductTooHigh ) { - checkPersistentAlarm( ALARM_ID_INLET_WATER_HIGH_CONDUCTIVITY, isConductTooHigh, conductivity, COND_SENSOR_CPI_MAX_VALUE ); + checkPersistentAlarm( ALARM_ID_INLET_WATER_HIGH_CONDUCTIVITY, isConductTooHigh, conductivity, COND_SENSOR_CPI_WARNING_HIGH ); } else if ( TRUE == isConductInWarningRange ) { Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -re9e5137f937e88f5c523bcaa5eca01607d084545 -r2f3090feeb06eb738aefc8eae5f080070a0a8919 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision e9e5137f937e88f5c523bcaa5eca01607d084545) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 2f3090feeb06eb738aefc8eae5f080070a0a8919) @@ -274,11 +274,11 @@ initPersistentAlarm( ALARM_ID_INLET_WATER_LOW_TEMPERATURE, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD ); -// initPersistentAlarm( ALARM_ID_INLET_WATER_TEMPERATURE_IN_LOW_RANGE, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD, -// INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD ); + initPersistentAlarm( ALARM_ID_INLET_WATER_TEMPERATURE_IN_LOW_RANGE, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD, + INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD ); -// initPersistentAlarm( ALARM_ID_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD, -// INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD ); + initPersistentAlarm( ALARM_ID_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD, + INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD ); // Persistent alarm for the temperature sensors range check initPersistentAlarm( ALARM_ID_DG_TEMPERATURE_SENSOR_OUT_OF_RANGE, TEMP_SENSORS_OUT_OF_RANGE_PERSISTENT_PEROID_MS, Index: firmware/App/DGCommon.h =================================================================== diff -u -r0a040a300ce592c2a7cfc095d20f6ddc31036a54 -r2f3090feeb06eb738aefc8eae5f080070a0a8919 --- firmware/App/DGCommon.h (.../DGCommon.h) (revision 0a040a300ce592c2a7cfc095d20f6ddc31036a54) +++ firmware/App/DGCommon.h (.../DGCommon.h) (revision 2f3090feeb06eb738aefc8eae5f080070a0a8919) @@ -48,15 +48,15 @@ #define IGNORE_RO_PUMP_MONITOR 1 #define DISABLE_RO_RATIO_CHECK 1 #define DISABLE_COND_SENSOR_CHECK 1 // Disabled for Tom - #define DISABLE_WATER_QUALITY_CHECK 1 // Disabled for Tom +// #define DISABLE_WATER_QUALITY_CHECK 1 // Disabled for Tom #define DISABLE_RTC_CONFIG 1 #define THD_USING_TRO_CONNECTOR 1 #define DISABLE_FLOW_CHECK_IN_FILL 1 #define IGNORE_CONC_PUMP_IN_HEAT_DISINFECT 1 // #define NEW_FMD_FLOW_SENSOR 1 // Turn these flags on to disable dialysate mixing - #define DISABLE_DIALYSATE_CHECK 1 // Disabled for Tom +// #define DISABLE_DIALYSATE_CHECK 1 // Disabled for Tom // #define DISABLE_MIXING 1 //#define DISABLE_FLOW_CONTROL_TREATMENT 1 #define DISABLE_ACK_ALARM 1 Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -re9e5137f937e88f5c523bcaa5eca01607d084545 -r2f3090feeb06eb738aefc8eae5f080070a0a8919 --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision e9e5137f937e88f5c523bcaa5eca01607d084545) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 2f3090feeb06eb738aefc8eae5f080070a0a8919) @@ -115,7 +115,7 @@ static F32 averageBicardConductivity; ///< Average bicard conductivity over 30 seconds. static F32 averageAcidConductivity; ///< Average acid conductivity over 30 seconds. -static F32 averageConductivity; ///< Average conductivity of acid and bicard over 30 seconds. +static F32 pctDiffInConductivity; ///< Percent difference in conductivity between CD1 (acid) and CD2 (bicarb). static U32 bicardConductivitySampleCount; ///< Sample count of bicard conductivity over 30 seconds. static U32 acidConductivitySampleCount; ///< Sample count of acid conductivity over 30 seconds. @@ -174,7 +174,7 @@ pumpSpeedIndex = 0; averageBicardConductivity = 0.0; averageAcidConductivity = 0.0; - averageConductivity = 0.0; + pctDiffInConductivity = 0.0; bicardConductivitySampleCount = 0; acidConductivitySampleCount = 0; totalBicardConductivity = 0.0; @@ -390,30 +390,32 @@ { // If this is the first fill of a treatment, prime acid and bicarb lines, otherwise transition // to dialysate production directly +#ifndef DISABLE_MIXING if ( TRUE == isThisTheFirstFill() ) { - #ifndef DISABLE_MIXING // Prepare the acid and bicarb pumps to prime the concentrate lines setROPumpTargetFlowRateLPM( RO_PUMP_800_ML_PER_MIN / MILLILITERS_PER_LITER, TARGET_RO_PRESSURE_PSI ); setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP1_ACID, CONCENTRATE_PUMP_MAX_SPEED ); setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2_BICARB, CONCENTRATE_PUMP_MAX_SPEED ); requestConcentratePumpOn( CONCENTRATEPUMPS_CP1_ACID ); // TODO if requestConcentratePumpOn( CONCENTRATEPUMPS_CP2_BICARB ); - #endif + concentratePrimingStartTime = getMSTimerCount(); result = DG_FILL_MODE_STATE_PRIME_CONCENTRATE_LINES; } else +#endif + { result = DG_FILL_MODE_STATE_PRODUCE_DIALYSATE; } } #ifndef DISABLE_DIALYSATE_CHECK if ( TRUE == didTimeout( waterQualityTestStartTime, WATER_QUALITY_TEST_TIME_OUT_MS ) ) { - activateAlarmNoData( ALARM_ID_DG_BAD_INLET_WATER_QUALITY ); - requestNewOperationMode( DG_MODE_GENE ); - } + activateAlarmNoData( ALARM_ID_DG_BAD_INLET_WATER_QUALITY ); // alarm is recoverable should go to fill paused state + result = DG_FILL_MODE_STATE_PAUSED; // paused state should go back to DG_FILL_MODE_STATE_TEST_INLET_WATER + } // when alarm acknowledged #endif return result; @@ -516,7 +518,7 @@ totalAcidConductivity = 0.0; averageBicardConductivity = 0.0; averageAcidConductivity = 0.0; - averageConductivity = 0.0; + pctDiffInConductivity = 0.0; bicardConductivitySampleCount = 0; acidConductivitySampleCount = 0; // Set pumps flow rate to prepare for acid conductivity testing @@ -563,15 +565,16 @@ { averageBicardConductivity = totalBicardConductivity / bicardConductivitySampleCount; averageAcidConductivity = totalAcidConductivity / acidConductivitySampleCount; - averageConductivity = 2.0 * ( averageAcidConductivity - averageBicardConductivity ) / ( averageAcidConductivity + averageBicardConductivity ); + pctDiffInConductivity = fabs( 2.0 * ( averageAcidConductivity - averageBicardConductivity ) / ( averageAcidConductivity + averageBicardConductivity ) ); if ( ( TRUE == isValueWithinPercentRange(averageBicardConductivity, BICARD_TEST_CD2_TCD, FIVE_PERCENT_FACTOR) ) && - ( TRUE == isValueWithinPercentRange(averageAcidConductivity, ACID_TEST_CD2_TCD, FIVE_PERCENT_FACTOR) ) && - ( TRUE == isValueWithinPercentRange(averageConductivity, ACID_TEST_CD2_TCD, FIVE_PERCENT_FACTOR) ) ) + ( TRUE == isValueWithinPercentRange(averageAcidConductivity, ACID_TEST_CD2_TCD, FIVE_PERCENT_FACTOR) ) && + ( pctDiffInConductivity < FIVE_PERCENT_FACTOR ) ) { // Do the necessary setup here before transition to Produce Dialysate State fillStatus.isThisFirstFill = FALSE; requestConcentratePumpOff( CONCENTRATEPUMPS_CP1_ACID ); + setROPumpTargetFlowRateLPM( getTargetFillFlowRateLPM(), TARGET_RO_PRESSURE_PSI ); result = DG_FILL_MODE_STATE_PRODUCE_DIALYSATE; } else @@ -706,6 +709,7 @@ F32 avgAcidConductivity = acidConductivityTotal / conductivitySampleCount; F32 avgBicardConductivity = bicarbConductivityTotal / conductivitySampleCount; + #ifndef DISABLE_FLOW_CHECK_IN_FILL if ( integratedVolumeToLoadCellReadingPercent > FLOW_INTEGRATED_VOLUME_CHECK_TOLERANCE ) // SRSDG 439 { @@ -757,7 +761,8 @@ DG_FILL_MODE_STATE_T result = DG_FILL_MODE_STATE_PAUSED; if ( ( FALSE == isAlarmActive( ALARM_ID_ACID_CONDUCTIVITY_OUT_OF_RANGE ) ) && - ( FALSE == isAlarmActive( ALARM_ID_BICARB_CONDUCTIVITY_OUT_OF_RANGE ) ) ) + ( FALSE == isAlarmActive( ALARM_ID_BICARB_CONDUCTIVITY_OUT_OF_RANGE ) && + ( FALSE == isAlarmActive( ALARM_ID_DG_BAD_INLET_WATER_QUALITY ))) ) { result = DG_FILL_MODE_STATE_TEST_INLET_WATER; }