Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r867521a9810f2218c34d96164fab614494a63f8d -r3414e47b2664c56ab6b2f0cd5cd6b30ae9a5e333 --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 867521a9810f2218c34d96164fab614494a63f8d) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 3414e47b2664c56ab6b2f0cd5cd6b30ae9a5e333) @@ -100,6 +100,10 @@ static DG_BICARB_CONCENTRATES_RECORD_T bicarbConcentrateCalRecord; ///< Bicarb concentrate calibration record. static DG_CONC_PUMPS_CAL_RECORD_T concentratePumpsCalRecord; ///< Concentrate pumps calibration record. +static F32 cp1PulsetemporaryRemove; +static F32 cp2PulsetemporaryRemove; + + // ********** private function prototypes ********** static void stopConcentratePump( CONCENTRATE_PUMPS_T pumpId ); @@ -142,7 +146,8 @@ initPersistentAlarm( ALARM_ID_CP1_SPEED_CONTROL_ERROR, CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD, CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD ); initPersistentAlarm( ALARM_ID_CP2_SPEED_CONTROL_ERROR, CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD, CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD ); - initPersistentAlarm( ALARM_ID_DG_CONC_PUMP_HALL_SENSOR_OUT_OF_RANGE, CONCENTRATE_PUMP_HALL_SENSORS_OUT_OF_RANGE_TIME_MS, CONCENTRATE_PUMP_HALL_SENSORS_OUT_OF_RANGE_TIME_MS ); + initPersistentAlarm( ALARM_ID_DG_CONC_PUMP_HALL_SENSOR_OUT_OF_RANGE, CONCENTRATE_PUMP_HALL_SENSORS_OUT_OF_RANGE_TIME_MS, + CONCENTRATE_PUMP_HALL_SENSORS_OUT_OF_RANGE_TIME_MS ); } /*********************************************************************//** @@ -176,12 +181,8 @@ SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_CONCENTRATE_PUMP_FAULT, fpgaConcentratePumpsFault ); } - if ( ( concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].execState != CONCENTRATE_PUMP_OFF_STATE ) && - ( concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].execState != CONCENTRATE_PUMP_OFF_STATE ) ) - { - calcMeasuredPumpsSpeed( CONCENTRATEPUMPS_CP1_ACID, getFPGACP1HallSensePulseWidth() ); - calcMeasuredPumpsSpeed( CONCENTRATEPUMPS_CP2_BICARB, getFPGACP2HallSensePulseWidth() ); - } + calcMeasuredPumpsSpeed( CONCENTRATEPUMPS_CP1_ACID, getFPGACP1HallSensePulseWidth() ); + calcMeasuredPumpsSpeed( CONCENTRATEPUMPS_CP2_BICARB, getFPGACP2HallSensePulseWidth() ); // Get CP1 specifications U08 cp1Direction = concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].direction; @@ -200,6 +201,9 @@ data.cp1State = concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].execState; data.cp2State = concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].execState; + data.cp1PulseInSeconds = cp1PulsetemporaryRemove; + data.cp2PulseInSeconds = cp2PulsetemporaryRemove; + #ifndef DISABLE_DIALYSATE_CHECK F32 cp1Error = fabs( getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP1_ACID ) - concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].currentPumpSpeed ) / concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].currentPumpSpeed; F32 cp2Error = fabs( getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP2_BICARB ) - concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].currentPumpSpeed ) / concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].currentPumpSpeed; @@ -587,20 +591,36 @@ *************************************************************************/ static void calcMeasuredPumpsSpeed( CONCENTRATE_PUMPS_T pumpId, U16 pulseWidthCount ) { - F32 pulseWidthInSecond = ( (F32)pulseWidthCount * CONCENTRATE_PUMP_HALL_SENSE_PERIOD_RESOLUTION ) / US_PER_SECOND; - BOOL isPulseWidthOut = ( pulseWidthInSecond <= (F32)CONCENTRATE_PUMP_MIN_ALLOWED_HALL_SENSOR_COUNT ? TRUE : FALSE ); + if ( ( concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].execState != CONCENTRATE_PUMP_OFF_STATE ) && + ( concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].execState != CONCENTRATE_PUMP_OFF_STATE ) ) + { + F32 pulseWidthInMicroSecond = (F32)pulseWidthCount * CONCENTRATE_PUMP_HALL_SENSE_PERIOD_RESOLUTION; + BOOL isPulseWidthOut = ( pulseWidthInMicroSecond <= (F32)CONCENTRATE_PUMP_MIN_ALLOWED_HALL_SENSOR_COUNT ? TRUE : FALSE ); - // TODO remove this line once the below code is tested - concentratePumps[ pumpId ].measuredPumpSpeed.data = ( 1.0 / pulseWidthInSecond ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE * SEC_PER_MIN; + // TODO once the pulse is figured out remove this code + if ( CONCENTRATEPUMPS_CP1_ACID == pumpId ) + { + cp1PulsetemporaryRemove = pulseWidthInMicroSecond; + } + else + { + cp2PulsetemporaryRemove = pulseWidthInMicroSecond; + } + // TODO once the pulse is figured out remove this code - // TODO will implement in DEN-12224 - //checkPersistentAlarm( ALARM_ID_DG_CONC_PUMP_HALL_SENSOR_OUT_OF_RANGE, isPulseWidthOut, pulseWidthInSecond, CONCENTRATE_PUMP_MIN_ALLOWED_HALL_SENSOR_COUNT ); + checkPersistentAlarm( ALARM_ID_DG_CONC_PUMP_HALL_SENSOR_OUT_OF_RANGE, isPulseWidthOut, pulseWidthInMicroSecond, + CONCENTRATE_PUMP_MIN_ALLOWED_HALL_SENSOR_COUNT ); - //if ( FALSE == isPulseWidthOut ) - //{ - // concentratePumps[ pumpId ].measuredPumpSpeed.data = ( 1.0 / pulseWidthInSecond ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE * SEC_PER_MIN; - //} - // TODO will implement in DEN-12224 + if ( FALSE == isPulseWidthOut ) + { + concentratePumps[ pumpId ].measuredPumpSpeed.data = ( US_PER_SECOND / pulseWidthInMicroSecond ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE * SEC_PER_MIN; + } + } + else + { + // Clear the alarm + checkPersistentAlarm( ALARM_ID_DG_CONC_PUMP_HALL_SENSOR_OUT_OF_RANGE, FALSE, 0, CONCENTRATE_PUMP_MIN_ALLOWED_HALL_SENSOR_COUNT ); + } if ( CONCENTRATE_PUMP_ZERO_FLOW_RATE == pulseWidthCount ) {