Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r19aba08f16ac2b5de18be8965767966e9698d03a -r80abfe80aa006c47aa3ee846c6ef76deb0d40f83 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 19aba08f16ac2b5de18be8965767966e9698d03a) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 80abfe80aa006c47aa3ee846c6ef76deb0d40f83) @@ -75,7 +75,7 @@ #define WET_SELF_TEST_INTEGRATED_VOLUME_TOLERANCE 20.0F ///< Tolerance on integrated volume in grams. #define WET_SELF_TEST_DISPLACEMENT_TOLERANCE_G 20.0F ///< Tolerance in the load cell readings of the displacement in grams. #define WET_SELF_TEST_DISPLACEMENT_TIME_MS ( SEC_PER_MIN * MS_PER_SECOND ) ///< Time to displace dialysate in wet self-test in ms. -#define RESERVOIR_SETTLE_TIME_MS ( 4 * MS_PER_SECOND ) ///< Time allotted for reservoir to settle in ms. +#define RESERVOIR_SETTLE_TIME_MS ( 5 * MS_PER_SECOND ) ///< Time allotted for reservoir to settle in ms. #define MAX_NO_CARTRIDGE_SELF_TEST_TIME 30 ///< Maximum no cartridge self-test time (in seconds). #define MAX_DRY_SELF_TEST_TIME ( 12 * SEC_PER_MIN ) ///< Maximum dry self-test time (in seconds). @@ -1623,17 +1623,6 @@ WET_SELF_TESTS_STATE_T state = WET_SELF_TESTS_FIRST_DISPLACEMENT_SETUP_STATE; DG_CMD_RESPONSE_T cmdResp; - /*if ( ( FALSE == isValvesSettingSent ) && ( TRUE == didTimeout( settleStartTime, RESERVOIR_SETTLE_TIME_MS ) ) ) - { - reservoirVolume[ DG_RESERVOIR_1 ] = getReservoirWeightLargeFilter( DG_RESERVOIR_1 ); - reservoirVolume[ DG_RESERVOIR_2 ] = getReservoirWeightLargeFilter( DG_RESERVOIR_2 ); - - setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); - setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); - cmdChangeDGValveSetting( DG_VALVE_SETTING_R1_TO_R2 ); - isValvesSettingSent = TRUE; - }*/ // TODO remove this code if the new wet self test works better - if ( FALSE == isValvesSettingSent ) { setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); @@ -1651,8 +1640,7 @@ if ( DG_CMD_REQUEST_REJECT_REASON_NONE == cmdResp.rejectCode ) { setDialInPumpTargetFlowRate( DIP_FLOW_RATE_FIRST_DISPLACEMENT_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - - settleStartTime = getMSTimerCount(); // TODO rename this variable + settleStartTime = getMSTimerCount(); state = WET_SELF_TESTS_FIRST_DISPLACEMENT_STATE; } } @@ -1678,13 +1666,13 @@ { WET_SELF_TESTS_STATE_T state = WET_SELF_TESTS_FIRST_DISPLACEMENT_STATE; - if ( ( TRUE == didTimeout( settleStartTime, 5000 ) ) && ( settleStartTime != 0 ) ) // TODO #define + if ( ( TRUE == didTimeout( settleStartTime, RESERVOIR_SETTLE_TIME_MS ) ) && ( settleStartTime != 0 ) ) { reservoirVolume[ DG_RESERVOIR_1 ] = getReservoirWeight( DG_RESERVOIR_1 ); reservoirVolume[ DG_RESERVOIR_2 ] = getReservoirWeight( DG_RESERVOIR_2 ); - displacementStartTime = getMSTimerCount(); - fmdIntegratedVolume = 0.0F; - settleStartTime = 0; + displacementStartTime = getMSTimerCount(); + fmdIntegratedVolume = 0.0F; + settleStartTime = 0; } if ( 0 == settleStartTime ) @@ -1696,9 +1684,8 @@ { signalDialInPumpHardStop(); fmdIntegratedVolume = ( ( fmdIntegratedVolume * TASK_GENERAL_INTERVAL ) / ( WET_SELF_TEST_DISPLACEMENT_TIME_MS ) ); - - settleStartTime = getMSTimerCount(); - state = WET_SELF_TESTS_FIRST_DISPLACEMENT_VERIFY_STATE; + settleStartTime = getMSTimerCount(); + state = WET_SELF_TESTS_FIRST_DISPLACEMENT_VERIFY_STATE; } } @@ -1721,43 +1708,39 @@ *************************************************************************/ static WET_SELF_TESTS_STATE_T handleWetSelfTestFirstDisplacementVerifyState( void ) { - WET_SELF_TESTS_STATE_T state = WET_SELF_TESTS_FIRST_DISPLACEMENT_VERIFY_STATE; + WET_SELF_TESTS_STATE_T state = WET_SELF_TESTS_FIRST_DISPLACEMENT_VERIFY_STATE; + F32 resOneDiffAfterDisplacement = reservoirVolume[ DG_RESERVOIR_1 ] - getReservoirWeight( DG_RESERVOIR_1 ); + F32 resTwoDiffAfterDisplacement = getReservoirWeight( DG_RESERVOIR_2 ) - reservoirVolume[ DG_RESERVOIR_2 ]; + F32 averageDisp = ( resOneDiffAfterDisplacement + resTwoDiffAfterDisplacement ) / 2.0F; + F32 integratedVolumeDiff = fabs( fmdIntegratedVolume - averageDisp ); + F32 integratedVolumeToTargetPercent = fabs( 1.0F - ( fmdIntegratedVolume / averageDisp ) ); + F32 integrateVolumeToleranceG = WET_SELF_TEST_INTEGRATED_VOLUME_TOLERANCE; - //if ( TRUE == didTimeout( settleStartTime, RESERVOIR_SETTLE_TIME_MS ) ) - { - F32 resOneDiffAfterDisplacement = reservoirVolume[ DG_RESERVOIR_1 ] - getReservoirWeight( DG_RESERVOIR_1 ); //getReservoirWeightLargeFilter( DG_RESERVOIR_1 ); - F32 resTwoDiffAfterDisplacement = /*getReservoirWeightLargeFilter( DG_RESERVOIR_2 )*/ getReservoirWeight( DG_RESERVOIR_2 ) - reservoirVolume[ DG_RESERVOIR_2 ]; - F32 averageDisp = ( resOneDiffAfterDisplacement + resTwoDiffAfterDisplacement ) / 2.0F; - F32 integratedVolumeDiff = fabs( fmdIntegratedVolume - averageDisp ); - F32 integratedVolumeToTargetPercent = fabs( 1.0F - ( fmdIntegratedVolume / averageDisp ) ); - F32 integrateVolumeToleranceG = WET_SELF_TEST_INTEGRATED_VOLUME_TOLERANCE; - #ifndef _RELEASE_ - if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_ENABLE_WET_SELF_TEST_WIDER_VOLUME_TOL ) ) - { - integrateVolumeToleranceG = 50.0F; - } + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_ENABLE_WET_SELF_TEST_WIDER_VOLUME_TOL ) ) + { + integrateVolumeToleranceG = 50.0F; + } #endif - SEND_EVENT_WITH_2_F32_DATA( HD_EVENT_WET_SELF_TEST_DISPLACEMENT_RESULT, resOneDiffAfterDisplacement, resTwoDiffAfterDisplacement ) - SEND_EVENT_WITH_2_F32_DATA( HD_EVENT_WET_SELF_TEST_DISPLACEMENT_RESULT, averageDisp, fmdIntegratedVolume ) + SEND_EVENT_WITH_2_F32_DATA( HD_EVENT_WET_SELF_TEST_DISPLACEMENT_RESULT, resOneDiffAfterDisplacement, resTwoDiffAfterDisplacement ) + SEND_EVENT_WITH_2_F32_DATA( HD_EVENT_WET_SELF_TEST_DISPLACEMENT_RESULT, averageDisp, fmdIntegratedVolume ) - if ( ( fabs( resOneDiffAfterDisplacement - resTwoDiffAfterDisplacement ) <= WET_SELF_TEST_DISPLACEMENT_TOLERANCE_G ) && - ( ( integratedVolumeDiff <= integrateVolumeToleranceG ) || - ( integratedVolumeToTargetPercent <= WET_SELF_TEST_INTEGRATED_VOLUME_PCT_TOLERANCE ) ) ) + if ( ( fabs( resOneDiffAfterDisplacement - resTwoDiffAfterDisplacement ) <= WET_SELF_TEST_DISPLACEMENT_TOLERANCE_G ) && + ( ( integratedVolumeDiff <= integrateVolumeToleranceG ) || + ( integratedVolumeToTargetPercent <= WET_SELF_TEST_INTEGRATED_VOLUME_PCT_TOLERANCE ) ) ) + { + state = WET_SELF_TESTS_SECOND_DISPLACEMENT_SETUP_STATE; + } + else + { + if ( fabs( resOneDiffAfterDisplacement - resTwoDiffAfterDisplacement) > WET_SELF_TEST_DISPLACEMENT_TOLERANCE_G ) { - state = WET_SELF_TESTS_SECOND_DISPLACEMENT_SETUP_STATE; + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_PRE_TREATMENT_WET_LC_TEST_FAILURE, resOneDiffAfterDisplacement, resTwoDiffAfterDisplacement ); } else { - if ( fabs( resOneDiffAfterDisplacement - resTwoDiffAfterDisplacement) > WET_SELF_TEST_DISPLACEMENT_TOLERANCE_G ) - { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_PRE_TREATMENT_WET_LC_TEST_FAILURE, resOneDiffAfterDisplacement, resTwoDiffAfterDisplacement ); - } - else - { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_PRE_TREATMENT_WET_FLOW_TEST_FAILURE, averageDisp, fmdIntegratedVolume ); - } + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_PRE_TREATMENT_WET_FLOW_TEST_FAILURE, averageDisp, fmdIntegratedVolume ); } } @@ -1783,17 +1766,6 @@ WET_SELF_TESTS_STATE_T state = WET_SELF_TESTS_SECOND_DISPLACEMENT_SETUP_STATE; DG_CMD_RESPONSE_T cmdResp; - /*if ( FALSE == isValvesSettingSent ) - { - reservoirVolume[ DG_RESERVOIR_1 ] = getReservoirWeightLargeFilter( DG_RESERVOIR_1 ); - reservoirVolume[ DG_RESERVOIR_2 ] = getReservoirWeightLargeFilter( DG_RESERVOIR_2 ); - - setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); - setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); - cmdChangeDGValveSetting( DG_VALVE_SETTING_R1_TO_R2 ); - isValvesSettingSent = TRUE; - }*/ - if ( FALSE == isValvesSettingSent ) { setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); @@ -1811,11 +1783,8 @@ if ( DG_CMD_REQUEST_REJECT_REASON_NONE == cmdResp.rejectCode ) { setDialInPumpTargetFlowRate( DIP_FLOW_RATE_SECOND_DISPLACEMENT_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - settleStartTime = getMSTimerCount(); - //displacementStartTime = getMSTimerCount(); - //fmdIntegratedVolume = 0.0; - state = WET_SELF_TESTS_SECOND_DISPLACEMENT_STATE; + state = WET_SELF_TESTS_SECOND_DISPLACEMENT_STATE; } } @@ -1840,13 +1809,13 @@ { WET_SELF_TESTS_STATE_T state = WET_SELF_TESTS_SECOND_DISPLACEMENT_STATE; - if ( ( TRUE == didTimeout( settleStartTime, 5000 ) ) && ( settleStartTime != 0 ) ) // TODO #define + if ( ( TRUE == didTimeout( settleStartTime, RESERVOIR_SETTLE_TIME_MS ) ) && ( settleStartTime != 0 ) ) { reservoirVolume[ DG_RESERVOIR_1 ] = getReservoirWeight( DG_RESERVOIR_1 ); reservoirVolume[ DG_RESERVOIR_2 ] = getReservoirWeight( DG_RESERVOIR_2 ); - displacementStartTime = getMSTimerCount(); - fmdIntegratedVolume = 0.0F; - settleStartTime = 0; + displacementStartTime = getMSTimerCount(); + fmdIntegratedVolume = 0.0F; + settleStartTime = 0; } if ( 0 == settleStartTime ) @@ -1857,9 +1826,8 @@ { signalDialInPumpHardStop(); fmdIntegratedVolume = ( ( fmdIntegratedVolume * TASK_GENERAL_INTERVAL ) / ( WET_SELF_TEST_DISPLACEMENT_TIME_MS ) ); - - settleStartTime = getMSTimerCount(); - state = WET_SELF_TESTS_SECOND_DISPLACEMENT_VERIFY_STATE; + settleStartTime = getMSTimerCount(); + state = WET_SELF_TESTS_SECOND_DISPLACEMENT_VERIFY_STATE; } } @@ -1882,43 +1850,39 @@ *************************************************************************/ static WET_SELF_TESTS_STATE_T handleWetSelfTestSecondDisplacementVerifyState( void ) { - WET_SELF_TESTS_STATE_T state = WET_SELF_TESTS_SECOND_DISPLACEMENT_VERIFY_STATE; + WET_SELF_TESTS_STATE_T state = WET_SELF_TESTS_SECOND_DISPLACEMENT_VERIFY_STATE; + F32 resOneDiffAfterDisplacement = getReservoirWeight( DG_RESERVOIR_1 ) - reservoirVolume[ DG_RESERVOIR_1 ]; + F32 resTwoDiffAfterDisplacement = reservoirVolume[ DG_RESERVOIR_2 ] - getReservoirWeight( DG_RESERVOIR_2 ); + F32 avgDisp = ( resOneDiffAfterDisplacement + resTwoDiffAfterDisplacement ) / 2.0F; + F32 integratedVolumeDiff = fabs( fmdIntegratedVolume - avgDisp ); + F32 integratedVolumeToTargetPercent = fabs( 1.0F - ( fmdIntegratedVolume / avgDisp ) ); + F32 integrateVolumeToleranceG = WET_SELF_TEST_INTEGRATED_VOLUME_TOLERANCE; - //if ( TRUE == didTimeout( settleStartTime, RESERVOIR_SETTLE_TIME_MS ) ) - { - F32 resOneDiffAfterDisplacement = getReservoirWeight( DG_RESERVOIR_1 ) - reservoirVolume[ DG_RESERVOIR_1 ]; //getReservoirWeightLargeFilter( DG_RESERVOIR_1 ); - F32 resTwoDiffAfterDisplacement = /*getReservoirWeightLargeFilter( DG_RESERVOIR_2 )*/ reservoirVolume[ DG_RESERVOIR_2 ] - getReservoirWeight( DG_RESERVOIR_2 ); - F32 avgDisp = ( resOneDiffAfterDisplacement + resTwoDiffAfterDisplacement ) / 2.0F; - F32 integratedVolumeDiff = fabs( fmdIntegratedVolume - avgDisp ); - F32 integratedVolumeToTargetPercent = fabs( 1.0F - ( fmdIntegratedVolume / avgDisp ) ); - F32 integrateVolumeToleranceG = WET_SELF_TEST_INTEGRATED_VOLUME_TOLERANCE; - #ifndef _RELEASE_ - if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_ENABLE_WET_SELF_TEST_WIDER_VOLUME_TOL ) ) - { - integrateVolumeToleranceG = 50.0F; - } + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_ENABLE_WET_SELF_TEST_WIDER_VOLUME_TOL ) ) + { + integrateVolumeToleranceG = 50.0F; + } #endif - SEND_EVENT_WITH_2_F32_DATA( HD_EVENT_WET_SELF_TEST_DISPLACEMENT_RESULT, resOneDiffAfterDisplacement, resTwoDiffAfterDisplacement ) - SEND_EVENT_WITH_2_F32_DATA( HD_EVENT_WET_SELF_TEST_DISPLACEMENT_RESULT, avgDisp, fmdIntegratedVolume ) + SEND_EVENT_WITH_2_F32_DATA( HD_EVENT_WET_SELF_TEST_DISPLACEMENT_RESULT, resOneDiffAfterDisplacement, resTwoDiffAfterDisplacement ) + SEND_EVENT_WITH_2_F32_DATA( HD_EVENT_WET_SELF_TEST_DISPLACEMENT_RESULT, avgDisp, fmdIntegratedVolume ) - if ( ( fabs( resOneDiffAfterDisplacement - resTwoDiffAfterDisplacement ) <= WET_SELF_TEST_DISPLACEMENT_TOLERANCE_G ) && - ( ( integratedVolumeDiff <= integrateVolumeToleranceG ) || - ( integratedVolumeToTargetPercent <= WET_SELF_TEST_INTEGRATED_VOLUME_PCT_TOLERANCE ) ) ) + if ( ( fabs( resOneDiffAfterDisplacement - resTwoDiffAfterDisplacement ) <= WET_SELF_TEST_DISPLACEMENT_TOLERANCE_G ) && + ( ( integratedVolumeDiff <= integrateVolumeToleranceG ) || + ( integratedVolumeToTargetPercent <= WET_SELF_TEST_INTEGRATED_VOLUME_PCT_TOLERANCE ) ) ) + { + state = WET_SELF_TESTS_COMPLETE_STATE; + } + else + { + if ( fabs( resOneDiffAfterDisplacement - resTwoDiffAfterDisplacement) > WET_SELF_TEST_DISPLACEMENT_TOLERANCE_G ) { - state = WET_SELF_TESTS_COMPLETE_STATE; + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_PRE_TREATMENT_WET_LC_TEST_FAILURE, resOneDiffAfterDisplacement, resTwoDiffAfterDisplacement ); } else { - if ( fabs( resOneDiffAfterDisplacement - resTwoDiffAfterDisplacement) > WET_SELF_TEST_DISPLACEMENT_TOLERANCE_G ) - { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_PRE_TREATMENT_WET_LC_TEST_FAILURE, resOneDiffAfterDisplacement, resTwoDiffAfterDisplacement ); - } - else - { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_PRE_TREATMENT_WET_FLOW_TEST_FAILURE, avgDisp, fmdIntegratedVolume ); - } + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_PRE_TREATMENT_WET_FLOW_TEST_FAILURE, avgDisp, fmdIntegratedVolume ); } }