Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -r6408d79e3a9a543e90b2fa7ab823be348befd391 -r9ff57b5ab7490ee5bbc2c51b25f738ee6c569ec1 --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 6408d79e3a9a543e90b2fa7ab823be348befd391) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 9ff57b5ab7490ee5bbc2c51b25f738ee6c569ec1) @@ -40,11 +40,11 @@ // ********** private definitions ********** -#define FRESH_DIAL_PUMP_INITIAL_RPM 2500 ///< Nominal RPM target for fresh dialysate pump to maintain required pressure. -#define SPENT_DIAL_PUMP_INITIAL_RPM 2000 ///< Nominal RPM target for spent dialysate pump to maintain required pressure. #define HYD_CHAMBER_FLUID_TEMP_C_MIN 35.0F ///< Minimum hydraulics fluid temperature in deg celcius #define GEN_DIALYSATE_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the gen dialysate mode data published. +//Testing +#define DELAY_BYPASS_STATE_AT_START_UP ( 1 * MS_PER_SECOND ) ///< Provide a bypass state start up delay to stabilize pump speed etc., /// Payload record structure for Gen dialysate execution state set request typedef struct { @@ -62,11 +62,13 @@ static OVERRIDE_U32_T genDialysateDataPublishInterval; ///< Generate dialysate mode data publish interval. static F32 lastDialTargetTemperatureSet; ///< last dialysate target temperature set for heater control static BOOL isTreatmentParamUpdated; ///< To indicate change in treatment parameters +//Testing +static U32 bypassStateDelayStartTimeMS; ///< Delay balancing chamber switching for a second to preapre pump steady state. +static BOOL delayBypassStateFlag; ///< To indicate change in treatment parameters // ********** private function prototypes ********** static void setModeGenDStateTransition( DD_GEND_MODE_STATE_T state ); -static BOOL hydChamberWaterInletControl( void ); static DD_GEND_MODE_STATE_T handleGenDDialysateBypassState( void ); static DD_GEND_MODE_STATE_T handleGenDDialysateDeliveryState( void ); static DD_GEND_MODE_STATE_T handleGenDDialysateDeliveryPauseState( void ); @@ -107,6 +109,9 @@ genDialysateDataPublicationTimerCounter = 0; lastDialTargetTemperatureSet = 0.0F; isTreatmentParamUpdated = FALSE; + //Testing + bypassStateDelayStartTimeMS = 0; + delayBypassStateFlag = TRUE; //Initialize balancing chamber module initBalanceChamber(); @@ -182,24 +187,32 @@ lastDialTargetTemperatureSet = getGenDialysateTargetTemperature(); setValveState( D14_VALV, VALVE_STATE_OPEN ); - setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, FALSE ); + //Testing : Enable close loop once testing is complete + //setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, FALSE ); + setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, TRUE ); setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve setValveState( D35_VALV, VALVE_STATE_CLOSED ); // VDI setValveState( D40_VALV, VALVE_STATE_CLOSED ); // VDO setValveState( D34_VALV, VALVE_STATE_OPEN ); // Bypass valve - setDialysatePumpTargetRPM( D48_PUMP, SPENT_DIAL_PUMP_INITIAL_RPM, FALSE ); + //setDialysatePumpTargetRPM( D48_PUMP, SPENT_DIAL_PUMP_INITIAL_RPM, FALSE ); + setDialysatePumpTargetRPM( D48_PUMP, SPENT_DIAL_PUMP_INITIAL_RPM, TRUE ); transitionToBalChamberFill(); + + //Testing + bypassStateDelayStartTimeMS = getMSTimerCount(); break; case DD_GEND_DIALYSATE_DELIVERY_STATE: //Previous state setValveState( M4_VALV, VALVE_STATE_OPEN ); startHeater( D5_HEAT ); setValveState( D14_VALV, VALVE_STATE_OPEN ); - setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, FALSE ); + //setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, FALSE ); + setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, TRUE ); setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve - setDialysatePumpTargetRPM( D48_PUMP, SPENT_DIAL_PUMP_INITIAL_RPM, FALSE ); + //setDialysatePumpTargetRPM( D48_PUMP, SPENT_DIAL_PUMP_INITIAL_RPM, FALSE ); + setDialysatePumpTargetRPM( D48_PUMP, SPENT_DIAL_PUMP_INITIAL_RPM, TRUE ); // Disable bypass valve setValveState( D34_VALV, VALVE_STATE_CLOSED ); // Bypass valve @@ -312,12 +325,15 @@ * @details \b Outputs: none * @return the current state of gen dialysate mode *************************************************************************/ -static BOOL hydChamberWaterInletControl( void ) +BOOL hydChamberWaterInletControl( void ) { // Read floater switch BOOL result = FALSE; LEVEL_STATE_T floaterLevel = getLevelStatus( D6_LEVL ); + //Make sure Water Inlet Valve is open + setValveState( M4_VALV, VALVE_STATE_OPEN ); + // Get the target temperature from TD targetHydChamberFluidTemp.data = getTDTargetDialysateTemperature(); @@ -379,8 +395,19 @@ { DD_GEND_MODE_STATE_T state = DD_GEND_DIALYSATE_BYPASS_STATE; - //Execute balancing chamber - execBalancingChamberControl(); + //Testing + if ( TRUE == delayBypassStateFlag ) + { + if ( TRUE == didTimeout( bypassStateDelayStartTimeMS, DELAY_BYPASS_STATE_AT_START_UP ) ) + { + delayBypassStateFlag = FALSE; + } + } + else + { + //Execute balancing chamber + execBalancingChamberControl(); + } //if the produced dialysate is good and TD asks for dialysate delivery //move to next state