Index: firmware/App/Controllers/BalancingChamber.c =================================================================== diff -u -r2582d728ac1be6d159fa0ef37b1d443f09d7a168 -r8e93a6e39b2c7af5f0b47ef1272a2b53446fab0b --- firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision 2582d728ac1be6d159fa0ef37b1d443f09d7a168) +++ firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision 8e93a6e39b2c7af5f0b47ef1272a2b53446fab0b) @@ -46,6 +46,7 @@ #define SPENT_DIFF_COUNT_ZERO 0 ///< Zero count difference for spent side fill comparing target count #define SPENT_DIFF_COUNT_DEADBAND 1 ///< Stop changing D48 pump speed when fill difference reaches close to target count #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) /// Payload record structure for balancing chamber switch only request typedef struct @@ -1189,6 +1190,10 @@ U32 absDiffSpentFillCount = 0; U32 adjustedSpeed = 0; U32 spentDialPumpSpeed = getD48PumpSpeedForBCFill(); + U32 initialD48PumpSpeed = calculateD48PumpSpeedForBCFill(); + U32 minD48Speed = initialD48PumpSpeed - ( initialD48PumpSpeed * D48_SPEED_RANGE_LIMIT ); + U32 maxD48Speed = initialD48PumpSpeed + ( initialD48PumpSpeed * D48_SPEED_RANGE_LIMIT ); + U32 d48SpeedPostRangeCheck = 0; // Collect the next sample of spent pressure lastPrevSpentDialPressure = prevSpentDialPressure; @@ -1217,8 +1222,10 @@ spentDialPumpSpeed -= adjustedSpeed; } + d48SpeedPostRangeCheck = RANGE( spentDialPumpSpeed, minD48Speed, maxD48Speed ); + // Update the D48 pump speed - setD48PumpSpeedForBCFill( spentDialPumpSpeed ); + setD48PumpSpeedForBCFill( d48SpeedPostRangeCheck ); } //Update spent fill is complete Index: firmware/App/Controllers/DialysatePumps.c =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r8e93a6e39b2c7af5f0b47ef1272a2b53446fab0b --- firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision 8e93a6e39b2c7af5f0b47ef1272a2b53446fab0b) @@ -837,7 +837,23 @@ } } } + else if ( TRUE == isDialPumpOpenLoopEnabled[ pumpId ] ) + { + // Get current pump speed + dialysatePumps[ pumpId ].currentPumpSpeed = getDialysatePumpTargetSpeed( pumpId ); + if ( D12_PUMP == pumpId ) + { + //Set fresh dialyate pump speed + setFPGAD12PumpSpeed( (U16)dialysatePumps[ pumpId ].currentPumpSpeed ); + } + else + { + //Set spent dialyate pump speed + setFPGAD48PumpSpeed( (U16)dialysatePumps[ pumpId ].currentPumpSpeed ); + } + } + return state; } Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r50144ec3e96785cf76d5bfd22ee65029c82e732b -r8e93a6e39b2c7af5f0b47ef1272a2b53446fab0b --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 50144ec3e96785cf76d5bfd22ee65029c82e732b) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 8e93a6e39b2c7af5f0b47ef1272a2b53446fab0b) @@ -125,7 +125,7 @@ readCommandedValveStates(); // initially set valve PWM configuration and enable - setFPGAPWMConfigurations(); + //setFPGAPWMConfigurations(); // initially set all valves to de-energized state via FPGA setFPGADDValveStates( commandedValvesStates ); Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -refed432eddd3b47deb44b68088e534ac539b47f6 -r8e93a6e39b2c7af5f0b47ef1272a2b53446fab0b --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision efed432eddd3b47deb44b68088e534ac539b47f6) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 8e93a6e39b2c7af5f0b47ef1272a2b53446fab0b) @@ -103,7 +103,6 @@ static DD_GEND_MODE_STATE_T handleGenDIsolatedUFState( void ); static F32 getGenDialysateTargetTemperature( void ); static void calculateTargetDialysateTemp( void ); -static void calculateD48PumpSpeedForBCFill( void ); static void updateDialysateToDialyzerFlowRate( void ); static void checkDialysateTemperature( void ); static void monitorChamberLevelStatus( void ); @@ -586,15 +585,17 @@ * dialysate flow rate for continuous delivery of dialysate. * @details \b Inputs: Qd. * @details \b Outputs: D48 pump speed - * @return none. + * @return calculated initial D48 pump speed. *************************************************************************/ -static void calculateD48PumpSpeedForBCFill( void ) +U32 calculateD48PumpSpeedForBCFill( void ) { // Get the dialysate flow rate from TD - F32 dialFlowrate = getTDDialysateFlowrate(); + F32 dialFlowrate = getTDDialysateFlowrate(); // D48 Pump Speed = (1.24 * Qd ) + 30.0 d48PumpSpeed = (U32)( ( PUMP_SPEED_SLOPE_FACTOR * dialFlowrate ) + PUMP_SPEED_INTERCEPT_FACTOR ); + + return d48PumpSpeed; } /*********************************************************************//** Index: firmware/App/Modes/ModeGenDialysate.h =================================================================== diff -u -refed432eddd3b47deb44b68088e534ac539b47f6 -r8e93a6e39b2c7af5f0b47ef1272a2b53446fab0b --- firmware/App/Modes/ModeGenDialysate.h (.../ModeGenDialysate.h) (revision efed432eddd3b47deb44b68088e534ac539b47f6) +++ firmware/App/Modes/ModeGenDialysate.h (.../ModeGenDialysate.h) (revision 8e93a6e39b2c7af5f0b47ef1272a2b53446fab0b) @@ -59,6 +59,7 @@ BOOL requestDDGenDialyasteStop( void ); // Stop generate dialysate U32 getD48PumpSpeedForBCFill( void ); // Get D48 pump speed void setD48PumpSpeedForBCFill( U32 pumpSpeed ); // Set D48 pump speed +U32 calculateD48PumpSpeedForBCFill( void ); // Calculate initial D48 pump speed BOOL testDDGenDialysateDataPublishIntervalOverride( MESSAGE_T *message ); // GenD Mode data publish interval override BOOL testDialDeliveryInProgressOverride( MESSAGE_T *message ); // To override the dialysate delivery in progress flag