Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -ra08213c3d131203c21554d743c3ccb02575b70da -r173453569b2eb31b3f19572bf5386440667b0162 --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision a08213c3d131203c21554d743c3ccb02575b70da) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 173453569b2eb31b3f19572bf5386440667b0162) @@ -288,13 +288,9 @@ //Rinse pump On setRinsePumpState( RINSE_PUMP_STATE_ON ); - printf("[TRACE2] Entering BYPASS transition: tick=%lu prevBCPeriod=%lu prevLastQd=%.2f\n", - getMSTimerCount(), getBalChamberSwitchingPeriod(), getBalChamberActiveDialysateFlowrate()); - setValveState( D14_VALV, VALVE_STATE_OPEN ); + transitionToBalChamberFill(); // Activate Balancing Chamber Switching - printf("[TRACE2b] After transitionToBalChamberFill+request: tick=%lu newBCPeriod=%lu newSwOnly=%d\n", - getMSTimerCount(), getBalChamberSwitchingPeriod(), getBalChamberSwitchingOnlyStatus()); requestBalChamberSwitching( TRUE ); //Testing @@ -354,11 +350,44 @@ break; case DD_GEND_SPENT_CHAMBER_FILL_STATE: - // Deactivate Balancing Chamber Switching - requestBalChamberSwitching( FALSE ); + //Set valves and actuators + setValveState( D35_VALV, VALVE_STATE_CLOSED ); // VDI + setValveState( D40_VALV, VALVE_STATE_CLOSED ); // VDO + setValveState( D8_VALV, VALVE_STATE_CLOSED ); + setValveState( D54_VALV, VALVE_STATE_CLOSED ); + setValveState( D81_VALV, VALVE_STATE_CLOSED ); + setValveState( D85_VALV, VALVE_STATE_CLOSED ); + setValveState( D31_VALV, VALVE_STATE_CLOSED ); + setValveState( D14_VALV, VALVE_STATE_OPEN ); + setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve + setValveState( D34_VALV, VALVE_STATE_OPEN ); // Bypass valve + + if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_DISABLE_DRY_BICARB ) ) + { + setValveState( D80_VALV, VALVE_STATE_OPEN ); // Bicarb valve + setValveState( D64_VALV, VALVE_STATE_CLOSED ); + } + + setValveState( D47_VALV, VALVE_STATE_OPEN ); // Spent chamber purge valve + + requestConcentratePumpOff( D76_PUMP, FALSE ); + requestConcentratePumpOff( D11_PUMP, FALSE ); + requestConcentratePumpOff( D10_PUMP, FALSE ); + + // Turn on the primary heater + calculateTargetDialysateTemp(); setHeaterTargetTemperature( D5_HEAT, getGenDialysateTargetTemperature() ); + setD28TempFeedbackControl( TRUE ); + startHeater( D5_HEAT ); + // Stop trimmer heater + stopHeater( D45_HEAT ); + setDialysatePumpTargetRPM( D12_PUMP, getFreshDialPumpInitialRpm(), TRUE ); + setDialysatePumpTargetRPM( D48_PUMP, SPENT_DIAL_PUMP_FILL_RPM, TRUE ); + //Rinse pump On + setRinsePumpState( RINSE_PUMP_STATE_ON ); + //Transition to spent chamber fill transitionToSpentChamberFill(); break; @@ -731,10 +760,16 @@ { if ( ( TRUE == pendingSpentChamberFill ) && ( FALSE == balancingChambFillInProgress ) ) { - setModeGenDStateTransition( DD_GEND_SPENT_CHAMBER_FILL_STATE ); - pendingSpentChamberFill = FALSE; - isDialDeliveryInProgress.data = FALSE; - state = DD_GEND_SPENT_CHAMBER_FILL_STATE; + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); + + if ( getBalancingChamberStatus()== FALSE ) + { + setModeGenDStateTransition( DD_GEND_SPENT_CHAMBER_FILL_STATE ); + pendingSpentChamberFill = FALSE; + isDialDeliveryInProgress.data = FALSE; + state = DD_GEND_SPENT_CHAMBER_FILL_STATE; + } } } #ifdef __BICARB_CHAMBER_FILL__ @@ -785,10 +820,16 @@ { if ( ( TRUE == pendingSpentChamberFill ) && ( FALSE == balancingChambFillInProgress ) ) { - setModeGenDStateTransition( DD_GEND_SPENT_CHAMBER_FILL_STATE ); - pendingSpentChamberFill = FALSE; - isDialDeliveryInProgress.data = FALSE; - state = DD_GEND_SPENT_CHAMBER_FILL_STATE; + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); + + if ( getBalancingChamberStatus()== FALSE ) + { + setModeGenDStateTransition( DD_GEND_SPENT_CHAMBER_FILL_STATE ); + pendingSpentChamberFill = FALSE; + isDialDeliveryInProgress.data = FALSE; + state = DD_GEND_SPENT_CHAMBER_FILL_STATE; + } } } #ifdef __BICARB_CHAMBER_FILL__ @@ -830,9 +871,7 @@ { setModeGenDStateTransition( DD_GEND_DIALYSATE_BYPASS_STATE ); isDialDeliveryInProgress.data = FALSE; - signalDialysatePumpHardStop(D48_PUMP); - delayBypassStateFlag = TRUE; - printf("[TRACE1] SC->Bypass trigger: tick=%lu D46_LEVEL=%d totalFill=%lu Qd=%.2f\n",getMSTimerCount(), spentChamberLevel, totalSpentChamberFill, getTDDialysateFlowrate()); + //delayBypassStateFlag = TRUE; state = DD_GEND_DIALYSATE_BYPASS_STATE; //Trigger alarm if count exceeded