Index: firmware/App/DDCommon.h =================================================================== diff -u -re156ebe15a34ef907fe8d118c92237659cf6b4e5 -r1cd9bf024ebcb865fbab3eeb8dc987b8a3c89f6a --- firmware/App/DDCommon.h (.../DDCommon.h) (revision e156ebe15a34ef907fe8d118c92237659cf6b4e5) +++ firmware/App/DDCommon.h (.../DDCommon.h) (revision 1cd9bf024ebcb865fbab3eeb8dc987b8a3c89f6a) @@ -51,6 +51,9 @@ //Uncomment below for bicarb chamber filling //#define __BICARB_CHAMBER_FILL__ 1 +//Uncomment below for Maxon controller speed change +//#define __MAXON_SPEED_UPDATE__ 1 + //Uncomment below to disable heaters debug message #define __HEATERS_DEBUG__ 1 Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -r2e0901de8e802fe4c567b0164238bf324014c1cf -r1cd9bf024ebcb865fbab3eeb8dc987b8a3c89f6a --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 2e0901de8e802fe4c567b0164238bf324014c1cf) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 1cd9bf024ebcb865fbab3eeb8dc987b8a3c89f6a) @@ -60,7 +60,8 @@ #define LINEAR_SLOPE_FACTOR -0.0029F ///< Slope factor used in adjusted dialysate temperature linear calculation for high Qds #define LINEAR_INTERCEPT_FACTOR 3.47F ///< Intercept factor used in adjusted dialysate temperature linear calculation for high Qds #define LOW_DIAL_FLOW_RATE 150.0F ///< Dialysate flow rate lesser than 150 considered to be low Qds. -#define SPENT_CHAMBER_FILL_MAX_COUNT 15 ///< Total number of spent chamber fill allowed. +#define ZERO_DIAL_FLOW_RATE 0.0F ///< Zero dialysate flow rate +#define SPENT_CHAMBER_FILL_MAX_COUNT 10 ///< Total number of spent chamber fill allowed. #define BICARB_CHAMBER_FILL_TIMEOUT ( 1 * MS_PER_SECOND ) ///< Bicarb chamber fill timeout. //Testing #define DELAY_BC_SWITCHING_AT_START_UP ( 10 * MS_PER_SECOND ) ///< Provide a balancing chamber switching start up delay to stabilize pump speed etc., @@ -211,12 +212,13 @@ case DD_GEND_DIALYSATE_BYPASS_STATE: setValveState( D14_VALV, VALVE_STATE_OPEN ); - setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve + setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve setValveState( D35_VALV, VALVE_STATE_CLOSED ); // VDI setValveState( D40_VALV, VALVE_STATE_CLOSED ); // VDO setValveState( D47_VALV, VALVE_STATE_CLOSED ); // spent chamber purge valve setValveState( D64_VALV, VALVE_STATE_CLOSED ); setValveState( D34_VALV, VALVE_STATE_OPEN ); // Bypass valve + setValveState( D80_VALV, VALVE_STATE_OPEN ); // Bicarb valve // Turn on the primary heater calculateTargetDialysateTemp(); @@ -245,7 +247,7 @@ setValveState( D47_VALV, VALVE_STATE_CLOSED ); // spent chamber purge valve setValveState( D64_VALV, VALVE_STATE_CLOSED ); setValveState( D14_VALV, VALVE_STATE_OPEN ); - setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve + setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve // Turn on the primary heater calculateTargetDialysateTemp(); @@ -265,15 +267,17 @@ setValveState( D34_VALV, VALVE_STATE_CLOSED ); // Bypass valve setValveState( D35_VALV, VALVE_STATE_OPEN ); // VDI setValveState( D40_VALV, VALVE_STATE_OPEN ); // VDO + setValveState( D80_VALV, VALVE_STATE_OPEN ); // Bicarb valve break; case DD_GEND_SPENT_CHAMBER_FILL_STATE: //Set valves and actuators setValveState( D35_VALV, VALVE_STATE_CLOSED ); // VDI setValveState( D40_VALV, VALVE_STATE_CLOSED ); // VDO setValveState( D14_VALV, VALVE_STATE_OPEN ); - setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve + setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve setValveState( D34_VALV, VALVE_STATE_OPEN ); // Bypass valve + setValveState( D80_VALV, VALVE_STATE_OPEN ); // Bicarb valve setValveState( D47_VALV, VALVE_STATE_OPEN ); // Spent chamber purge valve requestConcentratePumpOff( D76_PUMP, FALSE ); @@ -307,9 +311,10 @@ setValveState( D40_VALV, VALVE_STATE_CLOSED ); // VDO setValveState( D14_VALV, VALVE_STATE_CLOSED ); - setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve + setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve setValveState( D34_VALV, VALVE_STATE_OPEN ); // Bypass valve setValveState( D64_VALV, VALVE_STATE_OPEN ); // Bicarb chamber purge valve + setValveState( D80_VALV, VALVE_STATE_OPEN ); // Bicarb valve bicarbFillStartTimeMS = getMSTimerCount(); // Turn on the primary heater @@ -327,22 +332,40 @@ break; case DD_GEND_DIALYSATE_DELIVERY_PAUSE: - // stop the motor during pause conditions - signalDialysatePumpHardStop( D12_PUMP ); + setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, TRUE ); signalDialysatePumpHardStop( D48_PUMP ); requestConcentratePumpOff( D11_PUMP, FALSE ); requestConcentratePumpOff( D10_PUMP, FALSE ); requestConcentratePumpOff( D76_PUMP, FALSE ); //Rinse pump Off setRinsePumpState( RINSE_PUMP_STATE_OFF ); - stopHeater( D5_HEAT ); + // Turn on the primary heater + calculateTargetDialysateTemp(); + setHeaterTargetTemperature( D5_HEAT, getGenDialysateTargetTemperature() ); + //Disable the D28 based temp control as fluid dispense being stopped by balancing chamber. + setD28TempFeedbackControl( FALSE ); + startHeater( D5_HEAT ); stopHeater( D45_HEAT ); - //Enable bypass valve - setValveState( D35_VALV, VALVE_STATE_CLOSED ); // VDI - setValveState( D40_VALV, VALVE_STATE_CLOSED ); // VDO - setValveState( D34_VALV, VALVE_STATE_OPEN ); // Bypass valve + //close valves + setValveState( D35_VALV, VALVE_STATE_CLOSED ); + setValveState( D40_VALV, VALVE_STATE_CLOSED ); + setValveState( D31_VALV, VALVE_STATE_CLOSED ); + setValveState( D47_VALV, VALVE_STATE_CLOSED ); + setValveState( D64_VALV, VALVE_STATE_CLOSED ); + setValveState( D54_VALV, VALVE_STATE_CLOSED ); + setValveState( D14_VALV, VALVE_STATE_CLOSED ); + setValveState( D52_VALV, VALVE_STATE_CLOSED ); + setValveState( D65_VALV, VALVE_STATE_CLOSED ); + setValveState( D81_VALV, VALVE_STATE_CLOSED ); + setValveState( D8_VALV, VALVE_STATE_CLOSED ); + //Close all balancing chamber valves + valveControlForBCClosedState(); + + setValveState( D34_VALV, VALVE_STATE_OPEN ); + setValveState( D53_VALV, VALVE_STATE_OPEN ); + setValveState( D80_VALV, VALVE_STATE_OPEN ); break; case DD_GEND_ISOLATED_UF_STATE: @@ -449,8 +472,9 @@ BOOL hydChamberWaterInletControl( void ) { // Read floater switch - BOOL result = FALSE; - LEVEL_STATE_T floaterLevel = getLevelStatus( D6_LEVL ); + BOOL result = FALSE; + LEVEL_STATE_T floaterLevel = getLevelStatus( D6_LEVL ); + BOOL balancingChambFillInProgress = getBalancingChamberFillinProgressStatus(); // High level is met if ( LEVEL_STATE_HIGH == floaterLevel ) @@ -461,7 +485,7 @@ // Water level reached high. result = TRUE; } - else + else if ( LEVEL_STATE_LOW == floaterLevel || TRUE != balancingChambFillInProgress ) { // if level is not met,allow inlet water to hydraulics chamber setValveState( D3_VALV, VALVE_STATE_OPEN ); @@ -613,9 +637,10 @@ *************************************************************************/ static DD_GEND_MODE_STATE_T handleGenDDialysateDeliveryState( void ) { - DD_GEND_MODE_STATE_T state = DD_GEND_DIALYSATE_DELIVERY_STATE; - LEVEL_STATE_T spentChamberLevel = getLevelStatus( D46_LEVL ); - LEVEL_STATE_T bicarbChamberLevel = getLevelStatus( D63_LEVL ); + DD_GEND_MODE_STATE_T state = DD_GEND_DIALYSATE_DELIVERY_STATE; + LEVEL_STATE_T spentChamberLevel = getLevelStatus( D46_LEVL ); + LEVEL_STATE_T bicarbChamberLevel = getLevelStatus( D63_LEVL ); + BOOL balancingChambFillInProgress = getBalancingChamberFillinProgressStatus(); // if TD asks for bypass or dialysate is not good to deliver //transition to bypass dialystate state @@ -763,8 +788,13 @@ static DD_GEND_MODE_STATE_T handleGenDDialysateDeliveryPauseState( void ) { DD_GEND_MODE_STATE_T state = DD_GEND_DIALYSATE_DELIVERY_PAUSE; + F32 dialFlowrate = getTDDialysateFlowrate(); - //TODO : Handle pause state. + // Resume pause when Qd is not zero + if ( dialFlowrate > ZERO_DIAL_FLOW_RATE ) + { + state = DD_GEND_DIALYSATE_BYPASS_STATE; + } return state; } Index: firmware/App/Modes/ModeGenDialysate.h =================================================================== diff -u -r2e0901de8e802fe4c567b0164238bf324014c1cf -r1cd9bf024ebcb865fbab3eeb8dc987b8a3c89f6a --- firmware/App/Modes/ModeGenDialysate.h (.../ModeGenDialysate.h) (revision 2e0901de8e802fe4c567b0164238bf324014c1cf) +++ firmware/App/Modes/ModeGenDialysate.h (.../ModeGenDialysate.h) (revision 1cd9bf024ebcb865fbab3eeb8dc987b8a3c89f6a) @@ -33,7 +33,7 @@ #define FRESH_DIAL_PUMP_INITIAL_RPM 2500 ///< Nominal RPM target for fresh dialysate pump to maintain required pressure. #define SPENT_DIAL_PUMP_INITIAL_RPM 2300 ///< Nominal RPM target for spent dialysate pump to maintain required pressure. -#define SPENT_DIAL_PUMP_FILL_RPM 350 ///< Nominal RPM target for spent chamber fill operations. +#define SPENT_DIAL_PUMP_FILL_RPM 200 ///< Nominal RPM target for spent chamber fill operations. /// Generate dialysate mode data structure typedef struct