Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -ree40156fe9be170a677d5a4a944145dd0c23b9f1 -r2f84c4894488f86b2a36c14184c80a1a6b1a7b48 --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision ee40156fe9be170a677d5a4a944145dd0c23b9f1) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 2f84c4894488f86b2a36c14184c80a1a6b1a7b48) @@ -42,7 +42,6 @@ #define CONCENTRATE_PUMP_SPD_OUT_OF_RANGE_TOL_WHEN_SLOW_MLPM 1.0F ///< Concentrate pump speed out of range tolerance when slow in mL/min. #define CONCENTRATE_PUMP_LOW_SPEED_THRESHOLD_MLPM 10.0F ///< Concentrate pump low speed threshold in mL/min. #define CONCENTRATE_PUMP_ZERO_FLOW_RATE 0xFFFF ///< Pulse width value when zero flow rate or pump is off. - #define CONCENTRATE_PUMP_VOLUME_PER_REV_DIENER 0.4F ///< Volume output every revolution (mL). #define CONCENTRATE_PUMP_VOLUME_PER_REV 0.1F ///< Volume output every revolution (mL). @@ -56,25 +55,18 @@ #define CONCENTRATE_PUMP_VOLUME_TO_REVOLUTION_DIENER ( ( 1.0F / CONCENTRATE_PUMP_VOLUME_PER_REV_DIENER ) * \ ( CONCENTRATE_PUMP_STEP_PER_REV * \ CONCENTRATE_PUMP_MICRO_STEPS_PER_STEP ) ) ///< Convert volume in to number of revolutions needed. -#define CONCENTRATE_PUMP_VOLUME_TO_REVOLUTION ( ( 1.0F / CONCENTRATE_PUMP_VOLUME_PER_REV ) * \ - ( CONCENTRATE_PUMP_STEP_PER_REV * \ - CONCENTRATE_PUMP_MICRO_STEPS_PER_STEP ) ) ///< Convert volume in to number of revolutions needed. #define CONCENTRATE_PUMP_STEP_PERIOD_RESOLUTION ( 0.50F / ( US_PER_SECOND * SEC_PER_MIN ) ) ///< Convert step period resolution (0.50 us) to minute. /// Volume output per pulse. #define CONCENTRATE_PUMP_VOLUME_PER_PULSE_DIENER ( CONCENTRATE_PUMP_VOLUME_PER_REV / CONCENTRATE_PUMP_VOLUME_PER_REV_DIENER ) -#define CONCENTRATE_PUMP_VOLUME_PER_PULSE ( CONCENTRATE_PUMP_VOLUME_PER_REV / CONCENTRATE_PUMP_VOLUME_PER_REV ) #define CONCENTRATE_PUMP_DATA_PUBLISH_INTERVAL ( 1000 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the concentrate pump is monitored. #define CONCENTRATE_PUMP_CONTROL_INTERVAL ( 100 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the concentrate pump is controlled. #define CONCENTRATE_PUMP_SPEED_OUT_OF_RANGE_TIMEOUT_MS ( 10 * MS_PER_SECOND ) ///< Concentrate pumps speed out of range timeout in milliseconds. #define NUMBER_OF_ACID_AND_BICARB_NV_DATA_TO_CHECK 1 ///< Number of acid and bicarb non-volatile data to check. - #define DATA_PUBLISH_COUNTER_START_COUNT 0 ///< Data publish counter start count. - #define ZERO_REVOLUTION_COUNT 0 ///< Revolution count reached to Zero. - #define CONCENTRATE_PUMP_FAULT_PERSISTENCE_PERIOD 500 ///< Concentrate pump fault persistence period in milliseconds. #define CONCENTRATE_PUMP_TRANS_TO_RAMP_SPEED_THRESHOLD_MLPM 20.0F ///< Concentrate pump transition to ramp to target speed threshold in mL/min. @@ -137,10 +129,8 @@ static BOOL acidConcentratePumpParkPersistenceClear; ///< Boolean acid park persistence clearing. static BOOL bicarbConcentratePumpParkPersistenceClear; ///< Boolean for bicarb park persistence clearing. static BOOL ufPumpParkPersistenceClear; ///< Boolean for UF pump park persistence clearing. +static OVERRIDE_U32_T concentratePumpDataPublishInterval; ///< Concentrate pump data publish interval. -/// Concentrate pump data publish interval. -static OVERRIDE_U32_T concentratePumpDataPublishInterval = { CONCENTRATE_PUMP_DATA_PUBLISH_INTERVAL, CONCENTRATE_PUMP_DATA_PUBLISH_INTERVAL, 0, 0 }; - static CONCENTRATE_PUMP_T concentratePumps[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Array of concentrate pumps' data structure. static OVERRIDE_U32_T hasParkBeenRequested[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Flag indicates a request to park the pump. static OVERRIDE_F32_T pumpTargetSpeed[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Target concentrate pumps' speed (mL/min). @@ -225,6 +215,11 @@ isDosingCompleted[ pumpId ] = FALSE; } + concentratePumpDataPublishInterval.data = CONCENTRATE_PUMP_DATA_PUBLISH_INTERVAL; + concentratePumpDataPublishInterval.ovInitData = CONCENTRATE_PUMP_DATA_PUBLISH_INTERVAL; + concentratePumpDataPublishInterval.ovData = 0; + concentratePumpDataPublishInterval.override = OVERRIDE_RESET; + initPersistentAlarm( ALARM_ID_DD_D11_PUMP_SPEED_CONTROL_ERROR, 0, CONCENTRATE_PUMP_SPEED_OUT_OF_RANGE_TIMEOUT_MS ); initPersistentAlarm( ALARM_ID_DD_D10_PUMP_SPEED_CONTROL_ERROR, 0, CONCENTRATE_PUMP_SPEED_OUT_OF_RANGE_TIMEOUT_MS ); initPersistentAlarm( ALARM_ID_DD_D76_PUMP_SPEED_CONTROL_ERROR, 0, CONCENTRATE_PUMP_SPEED_OUT_OF_RANGE_TIMEOUT_MS ); @@ -561,6 +556,7 @@ } else { +<<<<<<< HEAD if ( TRUE != getTestConfigStatus( TEST_CONFIG_DISABLE_DIENER_CONC_PUMP ) ) { pumpTargetRevCnt[ pumpId ].data = (U32)( targetVolume_ml * CONCENTRATE_PUMP_VOLUME_TO_REVOLUTION_DIENER ); @@ -571,6 +567,9 @@ targetSpeed_ml_min = ( targetSpeed_ml_min > CONCENTRATE_PUMP_MAX_SPEED_FMI ) ? CONCENTRATE_PUMP_MAX_SPEED_FMI : targetSpeed_ml_min; pumpTargetRevCnt[ pumpId ].data = (U32)( targetVolume_ml * CONCENTRATE_PUMP_VOLUME_TO_REVOLUTION ); } +======= + pumpTargetRevCnt[ pumpId ].data = (U32)( targetVolume_ml * CONCENTRATE_PUMP_VOLUME_TO_REVOLUTION_DIENER ); +>>>>>>> LDT-2198-beta-1.0-fw-integration---dd-im } if ( D11_PUMP == pumpId ) @@ -590,9 +589,9 @@ } /* - * If 3.0 <= speed <= 48 set it + * If 3.0 <= speed <= 60 set it * If speed < 3.0 set to 0 - * else speed > 48 set to 48 + * else speed > 60 set to 60 */ if ( ( CONCENTRATE_PUMP_MIN_SPEED <= targetSpeed_ml_min ) && ( targetSpeed_ml_min <= CONCENTRATE_PUMP_MAX_SPEED ) ) { @@ -1069,6 +1068,7 @@ F32 timePerStep; F32 stepPeriodCounts; +<<<<<<< HEAD if ( TRUE != getTestConfigStatus( TEST_CONFIG_DISABLE_DIENER_CONC_PUMP ) ) { timePerStep = CONCENTRATE_PUMP_VOLUME_PER_REV_DIENER / ( concentratePumps[ pumpId ].currentPumpSpeed * CONCENTRATE_PUMP_STEP_PER_REV ); @@ -1077,6 +1077,9 @@ { timePerStep = CONCENTRATE_PUMP_VOLUME_PER_REV / ( concentratePumps[ pumpId ].currentPumpSpeed * CONCENTRATE_PUMP_STEP_PER_REV ); } +======= + timePerStep = CONCENTRATE_PUMP_VOLUME_PER_REV_DIENER / ( concentratePumps[ pumpId ].currentPumpSpeed * CONCENTRATE_PUMP_STEP_PER_REV ); +>>>>>>> LDT-2198-beta-1.0-fw-integration---dd-im stepPeriodCounts = timePerStep / ( CONCENTRATE_PUMP_STEP_PERIOD_RESOLUTION * CONCENTRATE_PUMP_MICRO_STEPS_PER_STEP ); concentratePumps[ pumpId ].togglePeriodCount = (U16)( stepPeriodCounts + FLOAT_TO_INT_ROUNDUP_OFFSET ); } @@ -1151,6 +1154,7 @@ } else if ( FALSE == isPumpPulseWidthOut ) { +<<<<<<< HEAD if ( TRUE != getTestConfigStatus( TEST_CONFIG_DISABLE_DIENER_CONC_PUMP ) ) { measuredPumpSpeed[ pumpId ].data = ( US_PER_SECOND / pulseWidthInMicroSeconds ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE_DIENER * SEC_PER_MIN; @@ -1159,6 +1163,9 @@ { measuredPumpSpeed[ pumpId ].data = ( US_PER_SECOND / pulseWidthInMicroSeconds ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE * SEC_PER_MIN; } +======= + measuredPumpSpeed[ pumpId ].data = ( US_PER_SECOND / pulseWidthInMicroSeconds ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE_DIENER * SEC_PER_MIN; +>>>>>>> LDT-2198-beta-1.0-fw-integration---dd-im } // If pulse width is out of range capture pump out of range, pumpId and pulse width Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -r5356f3f1bf66fa22aeb9e17b899a2be667865360 -r2f84c4894488f86b2a36c14184c80a1a6b1a7b48 --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 5356f3f1bf66fa22aeb9e17b899a2be667865360) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 2f84c4894488f86b2a36c14184c80a1a6b1a7b48) @@ -28,6 +28,7 @@ #include "OperationModes.h" #include "PersistentAlarm.h" #include "Pressure.h" +#include "RinsePump.h" #include "SpentChamberFill.h" #include "TaskGeneral.h" #include "TDInterface.h" @@ -209,7 +210,6 @@ break; case DD_GEND_DIALYSATE_BYPASS_STATE: - setValveState( DD_M4_VALV, VALVE_STATE_OPEN ); setValveState( D14_VALV, VALVE_STATE_OPEN ); setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve setValveState( D35_VALV, VALVE_STATE_CLOSED ); // VDI @@ -230,6 +230,9 @@ //setDialysatePumpTargetRPM( D48_PUMP, SPENT_DIAL_PUMP_INITIAL_RPM, FALSE ); setDialysatePumpTargetRPM( D48_PUMP, SPENT_DIAL_PUMP_INITIAL_RPM, TRUE ); + //Rinse pump On + setRinsePumpState( RINSE_PUMP_STATE_ON ); + transitionToBalChamberFill(); //Testing @@ -241,7 +244,6 @@ //Previous state setValveState( D47_VALV, VALVE_STATE_CLOSED ); // spent chamber purge valve setValveState( D64_VALV, VALVE_STATE_CLOSED ); - setValveState( DD_M4_VALV, VALVE_STATE_OPEN ); setValveState( D14_VALV, VALVE_STATE_OPEN ); setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve @@ -256,6 +258,9 @@ //setDialysatePumpTargetRPM( D48_PUMP, SPENT_DIAL_PUMP_INITIAL_RPM, FALSE ); setDialysatePumpTargetRPM( D48_PUMP, SPENT_DIAL_PUMP_INITIAL_RPM, TRUE ); + //Rinse pump On + setRinsePumpState( RINSE_PUMP_STATE_ON ); + // Disable bypass valve setValveState( D34_VALV, VALVE_STATE_CLOSED ); // Bypass valve setValveState( D35_VALV, VALVE_STATE_OPEN ); // VDI @@ -266,8 +271,6 @@ //Set valves and actuators setValveState( D35_VALV, VALVE_STATE_CLOSED ); // VDI setValveState( D40_VALV, VALVE_STATE_CLOSED ); // VDO - - setValveState( DD_M4_VALV, VALVE_STATE_OPEN ); setValveState( D14_VALV, VALVE_STATE_OPEN ); setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve setValveState( D34_VALV, VALVE_STATE_OPEN ); // Bypass valve @@ -286,6 +289,9 @@ setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, 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; @@ -303,7 +309,6 @@ setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve setValveState( D34_VALV, VALVE_STATE_OPEN ); // Bypass valve - setValveState( DD_M4_VALV, VALVE_STATE_OPEN ); setValveState( D64_VALV, VALVE_STATE_OPEN ); // Bicarb chamber purge valve bicarbFillStartTimeMS = getMSTimerCount(); @@ -314,6 +319,9 @@ setD28TempFeedbackControl( FALSE ); startHeater( D5_HEAT ); + //Rinse pump On + setRinsePumpState( RINSE_PUMP_STATE_ON ); + setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, TRUE ); setDialysatePumpTargetRPM( D48_PUMP, SPENT_DIAL_PUMP_INITIAL_RPM, TRUE ); break; @@ -325,6 +333,8 @@ requestConcentratePumpOff( D11_PUMP, FALSE ); requestConcentratePumpOff( D10_PUMP, FALSE ); requestConcentratePumpOff( D76_PUMP, FALSE ); + //Rinse pump Off + setRinsePumpState( RINSE_PUMP_STATE_OFF ); stopHeater( D5_HEAT ); stopHeater( D45_HEAT ); @@ -442,9 +452,6 @@ BOOL result = FALSE; LEVEL_STATE_T floaterLevel = getLevelStatus( D6_LEVL ); - //Make sure Water Inlet Valve is open - setValveState( DD_M4_VALV, VALVE_STATE_OPEN ); - // High level is met if ( LEVEL_STATE_HIGH == floaterLevel ) { @@ -548,11 +555,14 @@ { DD_GEND_MODE_STATE_T state = DD_GEND_DIALYSATE_BYPASS_STATE; BOOL balancingChambFillInProgress = getBalancingChamberFillinProgressStatus(); + F32 freshDialPressure = getFilteredPressure( D18_PRES ); + F32 spentDialPressure = getFilteredPressure( D51_PRES ); - //Testing + //Testing : Wait for the fresh and spent pressure in range or timeout if ( TRUE == delayBypassStateFlag ) { - if ( TRUE == didTimeout( bypassStateDelayStartTimeMS, DELAY_BC_SWITCHING_AT_START_UP ) ) + if ( ( ( freshDialPressure >= FRESH_DIAL_PRESSURE_MIN_PSIG ) && ( spentDialPressure >= SPENT_DIAL_PRESSURE_MIN_PSIG ) ) || + ( TRUE == didTimeout( bypassStateDelayStartTimeMS, DELAY_BC_SWITCHING_AT_START_UP ) ) ) { delayBypassStateFlag = FALSE; }