Index: firmware/App/Controllers/BalancingChamber.c =================================================================== diff -u -r8895655479bf7ddfe71113286ac136138b585d0a -rff8dde1e0c78936fc2db1aa496c9dce2e498e03b --- firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision 8895655479bf7ddfe71113286ac136138b585d0a) +++ firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision ff8dde1e0c78936fc2db1aa496c9dce2e498e03b) @@ -49,7 +49,6 @@ #define D48_SPEED_ADJUST_FACTOR 0.5F ///< D48 speed adjustment factor ( 50% of speed adjustment = 0.5) #define D48_SPEED_RANGE_LIMIT 0.25F ///< D48 speed adjustment range check limit ( D48 speed can vary +/-25% of initial calculated speed) #define BICARB_CHAMBER_PERIODIC_FILL_TIME ( 1 * SEC_PER_MIN * ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ) ///< Periodic bicarb chamber fill request 60 sec x 20 = 1200 - /// Payload record structure for balancing chamber switch only request typedef struct { @@ -432,7 +431,6 @@ setValveState( D26_VALV, VALVE_STATE_CLOSED ); } -#if 0 /*********************************************************************//** * @brief * The handleBalChamberState1FillStart function handles the balancing chamber @@ -817,410 +815,9 @@ return state; } -#else /*********************************************************************//** * @brief - * The handleBalChamberState1FillStart function handles the balancing chamber - * state 1 fill and time to fill chamber counter being updated. - * @details \b Inputs: Pressure - * @details \b Outputs: valve states - * @details \b Alarm: ALARM_ID_DD_BC_STATE1_FILL_START_PRESSURE_OUT_OF_RANGE - * when pressure is not in range during balacing chamber fill start. - * @return next balancing chamber state. - *************************************************************************/ -static BAL_CHAMBER_EXEC_STATE_T handleBalChamberState1FillStart( void ) -{ - BAL_CHAMBER_EXEC_STATE_T state = BAL_CHAMBER_STATE1_FILL_START; - currentBalChamberSwitchingCounter = 0; - balChamberSWState = BAL_CHAMBER_SW_STATE1; - currentBalChamberFillCounter = 0; - isBalChamberFillInProgress = FALSE; - isPressureStabilizedDuringFill = FALSE; - isPressureDroppedDuringFill = FALSE; - isSpentFillComplete = FALSE; - lastPrevSpentDialPressure = 0.0F; - prevSpentDialPressure = 0.0F; - - F32 acidVolume = getF32OverrideValue( &acidDoseVolume ); - F32 bicarbVolume = getF32OverrideValue( &bicarbDoseVolume ); - freshDialPressure = getFilteredPressure( D18_PRES ); - spentDialPressure = getFilteredPressure( D51_PRES ); - - // Check fresh and spent dialysate pressure in range or BC switch only flag set - if ( ( ( freshDialPressure >= FRESH_DIAL_PRESSURE_MIN_PSIG ) && ( freshDialPressure <= FRESH_DIAL_PRESSURE_MAX_PSIG ) ) || - ( TRUE == getBalChamberSwitchingOnlyStatus() ) || ( TRUE == getTestConfigStatus( TEST_CONFIG_DISABLE_BC_PRESSURE_ALARMS ) ) ) - { - //Valve control for state 1 fill - valveControlForBCState1FillStart(); - - // Update fill status flag to true - isBalChamberFillInProgress = TRUE; - - // Deliver dosing during generate dialysate mode - if ( TRUE != getBalChamberSwitchingOnlyStatus() ) - { - // start acid and bicarb pump with the expected quantity - setConcentratePumpTargetSpeed( D11_PUMP, CONCENTRATE_PUMP_MAX_SPEED, acidVolume ); - setConcentratePumpTargetSpeed( D10_PUMP, CONCENTRATE_PUMP_MAX_SPEED, bicarbVolume ); - requestConcentratePumpOn( D11_PUMP ); - requestConcentratePumpOn( D10_PUMP ); - } - - state = BAL_CHAMBER_STATE1_BICARB_ACID_DOSING_CNTRL; - } - else - { - if ( getTestConfigStatus( TEST_CONFIG_DISABLE_BC_PRESSURE_ALARMS ) != TRUE ) - { - //Alarm when pressure is not in range - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DD_BC_STATE1_FILL_START_PRESSURE_OUT_OF_RANGE, freshDialPressure, spentDialPressure ); - } - } - - return state; -} - -/*********************************************************************//** - * @brief - * The handleBalChamberConcentrateControl function handles the Acid and Bicarb - * concentrate doisng and checks the conductivity of the dialysate for the treatment. - * @details \b Inputs: balChamberSWState , Concentrate volume - * @details \b Outputs: isPressureDroppedDuringFill, state - * @return next balancing chamber state. - *************************************************************************/ -static BAL_CHAMBER_EXEC_STATE_T handleBalChamberConcentrateControl( void ) -{ - BAL_CHAMBER_EXEC_STATE_T state; - freshDialPressure = getFilteredPressure( D18_PRES ); - spentDialPressure = getFilteredPressure( D51_PRES ); - - if ( BAL_CHAMBER_SW_STATE1 == balChamberSWState ) - { - state = BAL_CHAMBER_STATE1_BICARB_ACID_DOSING_CNTRL; - } - else - { - state = BAL_CHAMBER_STATE2_BICARB_ACID_DOSING_CNTRL; - } - - // Pressure drop check during fill process helps to find if there is any issue with valves opening - if ( ( freshDialPressure <= BC_FRESH_FILL_PRESSURE_PSIG ) && ( spentDialPressure <= BC_SPENT_FILL_PRESSURE_PSIG ) ) - { - if ( ++balChamberFillPressureDropCounter >= BAL_CHAMBER_FILL_PRES_DROP_MS ) - { - isPressureDroppedDuringFill = TRUE; - } - } - - // On dosing completion, transition to next state based on the current switching state - if ( ( ( TRUE == isConcentratePumpDosingCompleted( D11_PUMP ) ) && - ( TRUE == isConcentratePumpDosingCompleted( D10_PUMP ) ) ) || - ( TRUE == getBalChamberSwitchingOnlyStatus() ) ) - { - //Collect first sample of spent pressure - lastPrevSpentDialPressure = prevSpentDialPressure; - prevSpentDialPressure = spentDialPressure; - - if ( BAL_CHAMBER_SW_STATE1 == balChamberSWState ) - { - state = BAL_CHAMBER_STATE1_VALVES_CLOSE; - } - else - { - state = BAL_CHAMBER_STATE2_VALVES_CLOSE; - } - } - - return state; -} - -/*********************************************************************//** - * @brief - * The handleBalChamberState1ValvesClose function check for the balancing chamber - * fill complete and close the currently opened valves. - * @details \b Inputs: currentBalChamberSwitchingCounter, spent and fresh dialysate pressure - * @details \b Outputs: isPressureStalbilizedDuringFill,isBalChamberFillInProgress - * @return next balancing chamber state. - *************************************************************************/ -static BAL_CHAMBER_EXEC_STATE_T handleBalChamberState1ValvesClose( void ) -{ - BAL_CHAMBER_EXEC_STATE_T state = BAL_CHAMBER_STATE1_VALVES_CLOSE; - freshDialPressure = getFilteredPressure( D18_PRES ); - spentDialPressure = getFilteredPressure( D51_PRES ); - - // Check fresh dialysate pressure back in range to indicate fresh fill complete. - if ( getTestConfigStatus( TEST_CONFIG_DISABLE_BC_PRESSURE_ALARMS ) != TRUE ) - { - if ( ( freshDialPressure >= FRESH_DIAL_PRESSURE_MIN_PSIG ) && ( freshDialPressure <= FRESH_DIAL_PRESSURE_MAX_PSIG ) ) - { - if ( ++balChamberFillCompleteStablePressureCounter >= BAL_CHAMBER_FILL_COMPLETE_MS ) - { - // stabilized pressure indicating fresh side fill is complete - isPressureStabilizedDuringFill = TRUE; - } - } - } - else - { - isPressureStabilizedDuringFill = FALSE; - } - - // Spent side of balancing chamber fill is complete or not - checkSpentFillComplete( spentDialPressure ); - - // Check both spent and fresh side fill is complete - if ( ( TRUE == isSpentFillComplete ) && ( TRUE == isPressureStabilizedDuringFill ) ) - { - // close the state 1 opened valves - valveControlForBCState1FillEnd(); - isBalChamberFillInProgress = FALSE; - setDialysatePumpTargetRPM( D48_PUMP, getD48PumpSpeed(), TRUE ); - - // Transition to next state - state = BAL_CHAMBER_STATE1_FILL_END; - } - - return state; -} - -/*********************************************************************//** - * @brief - * The handleBalChamberState1FillEnd function check for the balancing chamber - * switching period and tranistion to next state switching. - * @details \b Inputs: currentBalChamberSwitchingCounter, balChamberSwitchingPeriod - * @details \b Outputs: balChamberFillPressureDropCounter,balChamberFillCompleteStablePressureCounter - * @details \b Alarm: ALARM_ID_DD_BC_STATE1_FILL_PRESSURE_DROP_OUT_OF_RANGE - * when pressure drop is not in range during balacing chamber fill in progress. - * @details \b Alarm: ALARM_ID_DD_BC_STATE1_FILL_END_PRESSURE_OUT_OF_RANGE - * when pressure is not in range during balacing chamber fill complete. - * @return next balancing chamber state. - *************************************************************************/ -static BAL_CHAMBER_EXEC_STATE_T handleBalChamberState1FillEnd( void ) -{ - BAL_CHAMBER_EXEC_STATE_T state = BAL_CHAMBER_STATE1_FILL_END; - - // On completion of cycle time, transition to next state - if ( currentBalChamberSwitchingCounter >= balChamberSwitchingPeriod ) - { - balChamberFillPressureDropCounter = 0; - balChamberFillCompleteStablePressureCounter = 0; - - if ( TRUE != getBalChamberSwitchingOnlyStatus() ) - { - if ( getTestConfigStatus( TEST_CONFIG_DISABLE_BC_PRESSURE_ALARMS ) != TRUE ) - { - if ( ( TRUE != isPressureDroppedDuringFill ) && ( TRUE == isFirstCycleBCSwitchingCompleted ) ) - { - // When fill initiated, pressure is not dropped to the expected range, possible valve failures. - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DD_BC_STATE1_FILL_PRESSURE_DROP_OUT_OF_RANGE, freshDialPressure, spentDialPressure ); - } - else if ( TRUE != isPressureStabilizedDuringFill ) - { - // Alarm when switching time expired, but still pressure not in range which indicates fill is not yet completed. - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DD_BC_STATE1_FILL_END_PRESSURE_OUT_OF_RANGE, freshDialPressure, spentDialPressure ); - } - else - { - // Move to next state when pressure is in range. - state = BAL_CHAMBER_STATE2_FILL_START; - } - } - else - { - // Allow to proceed next state even though pressure is not stabilized. - state = BAL_CHAMBER_STATE2_FILL_START; - } - } - else - { - state = BAL_CHAMBER_STATE2_FILL_START; - } - } - - return state; -} - -/*********************************************************************//** - * @brief - * The handleBalChamberState2FillStart function handles the balancing chamber - * state 2 fill and time to fill chamber counter being updated. - * @details \b Inputs: fresh and spent dialysate pressure - * @details \b Outputs: valve states - * @details \b Alarm: ALARM_ID_DD_BC_STATE2_FILL_START_PRESSURE_OUT_OF_RANGE - * when pressure is not in range during balacing chamber state 2 fill start. - * @return next balancing chamber state. - *************************************************************************/ -static BAL_CHAMBER_EXEC_STATE_T handleBalChamberState2FillStart( void ) -{ - BAL_CHAMBER_EXEC_STATE_T state = BAL_CHAMBER_STATE2_FILL_START; - currentBalChamberSwitchingCounter = 0; - isBalChamberFillInProgress = FALSE; - isPressureStabilizedDuringFill = FALSE; - isPressureDroppedDuringFill = FALSE; - balChamberSWState = BAL_CHAMBER_SW_STATE2; - currentBalChamberFillCounter = 0; - isSpentFillComplete = FALSE; - lastPrevSpentDialPressure = 0.0F; - prevSpentDialPressure = 0.0F; - - F32 acidVolume = getF32OverrideValue( &acidDoseVolume ); - F32 bicarbVolume = getF32OverrideValue( &bicarbDoseVolume ); - freshDialPressure = getFilteredPressure( D18_PRES ); - spentDialPressure = getFilteredPressure( D51_PRES ); - - // Check fresh dialysate pressure in range - if ( ( ( freshDialPressure >= FRESH_DIAL_PRESSURE_MIN_PSIG ) && ( freshDialPressure <= FRESH_DIAL_PRESSURE_MAX_PSIG ) ) || - // ( ( spentDialPressure >= SPENT_DIAL_PRESSURE_MIN_PSIG ) && ( spentDialPressure <= SPENT_DIAL_PRESSURE_MAX_PSIG ) ) || - ( TRUE == getBalChamberSwitchingOnlyStatus() ) || ( TRUE == getTestConfigStatus( TEST_CONFIG_DISABLE_BC_PRESSURE_ALARMS ) ) ) - { - // Valve control for state 2 fill - valveControlForBCState2FillStart(); - - // Update fill status flag to true - isBalChamberFillInProgress = TRUE; - - // Deliver dosing during generate dialysate mode - if ( TRUE != getBalChamberSwitchingOnlyStatus() ) - { - // start acid and bicarb pump with the expected quantity - setConcentratePumpTargetSpeed( D11_PUMP, CONCENTRATE_PUMP_MAX_SPEED, acidVolume ); - setConcentratePumpTargetSpeed( D10_PUMP, CONCENTRATE_PUMP_MAX_SPEED, bicarbVolume ); - requestConcentratePumpOn( D11_PUMP ); - requestConcentratePumpOn( D10_PUMP ); - } - - state = BAL_CHAMBER_STATE2_BICARB_ACID_DOSING_CNTRL; - } - else - { - if ( getTestConfigStatus( TEST_CONFIG_DISABLE_BC_PRESSURE_ALARMS ) != TRUE ) - { - //Alarm when pressure is not in range - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DD_BC_STATE2_FILL_START_PRESSURE_OUT_OF_RANGE, freshDialPressure, spentDialPressure ); - } - } - return state; -} - -/*********************************************************************//** - * @brief - * The handleBalChamberState2ValvesClose function check for the balancing chamber - * fill complete and close the currently opened valves. - * @details \b Inputs: currentBalChamberSwitchingCounter, spent and fresh dialysate pressure - * @details \b Outputs: isPressureStalbilizedDuringFill,isBalChamberFillInProgress - * @return next balancing chamber state. - *************************************************************************/ -static BAL_CHAMBER_EXEC_STATE_T handleBalChamberState2ValvesClose( void ) -{ - BAL_CHAMBER_EXEC_STATE_T state = BAL_CHAMBER_STATE2_VALVES_CLOSE; - - freshDialPressure = getFilteredPressure( D18_PRES ); - spentDialPressure = getFilteredPressure( D51_PRES ); - - // Check fresh and spent dialysate pressure back in range to indicate fill complete. - if ( getTestConfigStatus( TEST_CONFIG_DISABLE_BC_PRESSURE_ALARMS ) != TRUE ) - { - if ( ( freshDialPressure >= FRESH_DIAL_PRESSURE_MIN_PSIG ) && ( freshDialPressure <= FRESH_DIAL_PRESSURE_MAX_PSIG ) ) - { - if ( ++balChamberFillCompleteStablePressureCounter >= BAL_CHAMBER_FILL_COMPLETE_MS ) - { - // stabilized pressure indicating fresh side fill is complete - isPressureStabilizedDuringFill = TRUE; - } - } - } - else - { - isPressureStabilizedDuringFill = FALSE; - } - - // Spent side of balancing chamber fill is complete or not - checkSpentFillComplete( spentDialPressure ); - - // Check switching cycle time or pressure check for valve closure - if ( ( TRUE == isSpentFillComplete ) && ( TRUE == isPressureStabilizedDuringFill ) ) - { - // close the valves - valveControlForBCState2FillEnd(); - isBalChamberFillInProgress = FALSE; - setDialysatePumpTargetRPM( D48_PUMP, getD48PumpSpeed(), TRUE ); - - //Transition to next state - state = BAL_CHAMBER_STATE2_FILL_END; - } - - return state; -} - -/*********************************************************************//** - * @brief - * The handleBalChamberState2FillEnd function check for the balancing chamber - * switching period complete and transition to next state. - * @details \b Inputs: currentBalChamberSwitchingCounter, balChamberSwitchingPeriod - * @details \b Outputs: isPressureStalbilizedDuringFill,isBalChamberFillInProgress - * @details \b Alarm: ALARM_ID_DD_BC_STATE2_FILL_PRESSURE_DROP_OUT_OF_RANGE - * when pressure is not in range during balacing chamber state 2 fill in progress. - * @details \b Alarm: ALARM_ID_DD_BC_STATE2_FILL_END_PRESSURE_OUT_OF_RANGE - * when pressure is not in range during balacing chamber state 2 fill complete. - * @return next balancing chamber state. - *************************************************************************/ -static BAL_CHAMBER_EXEC_STATE_T handleBalChamberState2FillEnd( void ) -{ - BAL_CHAMBER_EXEC_STATE_T state = BAL_CHAMBER_STATE2_FILL_END; - - // On completion of cycle time, transition to next state - if ( currentBalChamberSwitchingCounter >= balChamberSwitchingPeriod ) - { - balChamberFillPressureDropCounter = 0; - balChamberFillCompleteStablePressureCounter = 0; - - // Pressure alarm check - if ( TRUE != getBalChamberSwitchingOnlyStatus() ) - { - if ( getTestConfigStatus( TEST_CONFIG_DISABLE_BC_PRESSURE_ALARMS ) != TRUE ) - { - if ( ( TRUE != isPressureDroppedDuringFill ) && ( TRUE == isFirstCycleBCSwitchingCompleted ) ) - { - // When fill initiated, pressure is not dropped to the expected range, possible valve failures. - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DD_BC_STATE2_FILL_PRESSURE_DROP_OUT_OF_RANGE, freshDialPressure, spentDialPressure ); - } - else if ( TRUE != isPressureStabilizedDuringFill ) - { - // Alarm when switching time expired, but still pressure not in range which indicates fill is not completed. - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DD_BC_STATE2_FILL_END_PRESSURE_OUT_OF_RANGE, freshDialPressure, spentDialPressure ); - } - else - { - // Move to next state when pressure is in range. - state = BAL_CHAMBER_STATE1_FILL_START; - - // Trigger pressure drop alarm after first cycle of balancing chamber switching complete - if ( FALSE == isFirstCycleBCSwitchingCompleted ) - { - isFirstCycleBCSwitchingCompleted = TRUE; - } - } - } - else - { - // Allow to proceed next state even though pressure is not stabilized. - state = BAL_CHAMBER_STATE1_FILL_START; - } - } - else - { - state = BAL_CHAMBER_STATE1_FILL_START; - } - } - - return state; -} - -#endif - -/*********************************************************************//** - * @brief * The checkSpentFillComplete function checks the pressure difference for * spent side fill completion and adjusts the D48 pump speed to align the * fill timing close to the switching period time.