Index: firmware/App/Controllers/BalancingChamber.c =================================================================== diff -u -r3aac7749a31eb254dd0edd482033ece1da17dc40 -r4d1d5fc255c770826648ae624182302be98862e0 --- firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision 3aac7749a31eb254dd0edd482033ece1da17dc40) +++ firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision 4d1d5fc255c770826648ae624182302be98862e0) @@ -432,7 +432,6 @@ setValveState( D26_VALV, VALVE_STATE_CLOSED ); } -#if 0 /*********************************************************************//** * @brief * The handleBalChamberState1FillStart function handles the balancing chamber @@ -450,7 +449,7 @@ balChamberSWState = BAL_CHAMBER_SW_STATE1; currentBalChamberFillCounter = 0; isBalChamberFillInProgress = FALSE; - isPressureStabilizedDuringFill = FALSE; + isPressureStabilizedDuringFill = FALSE; isPressureDroppedDuringFill = FALSE; isSpentFillComplete = FALSE; lastPrevSpentDialPressure = 0.0F; @@ -554,7 +553,7 @@ * 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: isPressureStabilizedDuringFill,isBalChamberFillInProgress + * @details \b Outputs: isPressureStalbilizedDuringFill,isBalChamberFillInProgress * @return next balancing chamber state. *************************************************************************/ static BAL_CHAMBER_EXEC_STATE_T handleBalChamberState1ValvesClose( void ) @@ -568,7 +567,7 @@ { if ( ++balChamberFillCompleteStablePressureCounter >= BAL_CHAMBER_FILL_COMPLETE_MS ) { - // stabilized pressure indicating fill is complete + // stabilized pressure indicating fresh side fill is complete isPressureStabilizedDuringFill = TRUE; } } @@ -579,11 +578,12 @@ // Check both spent and fresh side fill is complete if ( ( TRUE == isSpentFillComplete ) && ( TRUE == isPressureStabilizedDuringFill ) || ( FALSE == isFirstCycleBCSwitchingCompleted ) ) { + // close the state 1 opened valves valveControlForBCState1FillEnd(); isBalChamberFillInProgress = FALSE; //setDialysatePumpTargetRPM( D48_PUMP, getD48PumpSpeedForBCFill(), TRUE ); - if ( TRUE == isFirstCycleBCSwitchingCompleted ) + if ( FALSE != isFirstCycleBCSwitchingCompleted ) { setDialysatePumpTargetRPM( D48_PUMP, getD48PumpSpeedForBCFill(), TRUE ); } @@ -716,7 +716,7 @@ * 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: isPressureStabilizedDuringFill,isBalChamberFillInProgress + * @details \b Outputs: isPressureStalbilizedDuringFill,isBalChamberFillInProgress * @return next balancing chamber state. *************************************************************************/ static BAL_CHAMBER_EXEC_STATE_T handleBalChamberState2ValvesClose( void ) @@ -731,7 +731,7 @@ { if ( ++balChamberFillCompleteStablePressureCounter >= BAL_CHAMBER_FILL_COMPLETE_MS ) { - // stabilized pressure indicating fill is complete + // stabilized pressure indicating fresh side fill is complete isPressureStabilizedDuringFill = TRUE; } } @@ -746,7 +746,7 @@ valveControlForBCState2FillEnd(); isBalChamberFillInProgress = FALSE; //setDialysatePumpTargetRPM( D48_PUMP, getD48PumpSpeedForBCFill(), TRUE ); - if ( TRUE == isFirstCycleBCSwitchingCompleted ) + if ( FALSE != isFirstCycleBCSwitchingCompleted ) { setDialysatePumpTargetRPM( D48_PUMP, getD48PumpSpeedForBCFill(), TRUE ); } @@ -763,7 +763,7 @@ * The handleBalChamberState2FillEnd function check for the balancing chamber * switching period complete and transition to next state. * @details \b Inputs: currentBalChamberSwitchingCounter, balChamberSwitchingPeriod - * @details \b Outputs: isPressureStabilizedDuringFill,isBalChamberFillInProgress + * @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 @@ -817,389 +817,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 balancing 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_DD_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_DD_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 dosing 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 ( ( 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; - } - } - - // 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 ) || ( FALSE == isFirstCycleBCSwitchingCompleted ) ) - { - // close the state 1 opened valves - valveControlForBCState1FillEnd(); - isBalChamberFillInProgress = FALSE; - setDialysatePumpTargetRPM( D48_PUMP, getD48PumpSpeedForBCFill(), 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 transition 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 balancing 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 balancing 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; - - balChamberFillPressureDropCounter = 0; - balChamberFillCompleteStablePressureCounter = 0; - - if ( TRUE != getBalChamberSwitchingOnlyStatus() ) - { - if ( getTestConfigStatus( TEST_CONFIG_DD_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 balancing 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_DD_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_DD_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 ( ( 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; - } - } - - // 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 ) || ( FALSE == isFirstCycleBCSwitchingCompleted ) ) - { - // close the valves - valveControlForBCState2FillEnd(); - isBalChamberFillInProgress = FALSE; - setDialysatePumpTargetRPM( D48_PUMP, getD48PumpSpeedForBCFill(), 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; - - balChamberFillPressureDropCounter = 0; - balChamberFillCompleteStablePressureCounter = 0; - - // Pressure alarm check - if ( TRUE != getBalChamberSwitchingOnlyStatus() ) - { - if ( getTestConfigStatus( TEST_CONFIG_DD_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; - } - } - 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; - } - - // Trigger pressure drop alarm after first cycle of balancing chamber switching complete - if ( FALSE == isFirstCycleBCSwitchingCompleted ) - { - isFirstCycleBCSwitchingCompleted = TRUE; - } - - 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. Index: firmware/App/DDCommon.h =================================================================== diff -u -rff8dde1e0c78936fc2db1aa496c9dce2e498e03b -r4d1d5fc255c770826648ae624182302be98862e0 --- firmware/App/DDCommon.h (.../DDCommon.h) (revision ff8dde1e0c78936fc2db1aa496c9dce2e498e03b) +++ firmware/App/DDCommon.h (.../DDCommon.h) (revision 4d1d5fc255c770826648ae624182302be98862e0) @@ -49,7 +49,7 @@ //#define __BICARB_CHAMBER_FILL__ 1 //Uncomment below for Maxon controller speed change -#define __MAXON_SPEED_UPDATE__ 1 +//#define __MAXON_SPEED_UPDATE__ 1 //Uncomment below to disable heaters debug message #define __HEATERS_DEBUG__ 1 @@ -60,7 +60,6 @@ //Uncomment below to disable Teensy conductivity driver #define __TEENSY_CONDUCTIVITY_DRIVER__ 1 - #include #include #endif Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -rff8dde1e0c78936fc2db1aa496c9dce2e498e03b -r4d1d5fc255c770826648ae624182302be98862e0 --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision ff8dde1e0c78936fc2db1aa496c9dce2e498e03b) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 4d1d5fc255c770826648ae624182302be98862e0) @@ -571,8 +571,8 @@ /*********************************************************************//** * @brief * The setD48PumpSpeedForBCFill function sets the updated D48 pump speed. - * @details \b Inputs: none - * @details \b Outputs: d48PumpSpeed + * @details \b Inputs: d48PumpSpeed + * @details \b Outputs: none * @param pumpSpeed Dialysate pump speed * @return none. *************************************************************************/