Index: firmware/App/Controllers/DialysatePumps.c =================================================================== diff -u -r25e940840c5a54bd98fcadf582d3a1587b55a59d -rc4a199308f24cb8f6c805928b433903d95b59c6d --- firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision 25e940840c5a54bd98fcadf582d3a1587b55a59d) +++ firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision c4a199308f24cb8f6c805928b433903d95b59c6d) @@ -105,15 +105,10 @@ U32 controlTimerCounter; ///< Timer counter to perform control on dialysate pump. DIALYSATE_PUMP_STATE_T dialysatePumpState; ///< Current state of dialysate pump controller state machine. BOOL isDialPumpOn; ///< Flag indicates dialysate pump On or Off state - OVERRIDE_F32_T pumpTargetSpeed; ///< Target dialysate pumps' speed (mL/min).forward direction only, hence positive speed. F32 prevPumpTargetSpeed; ///< Previous target dialysate pumps' speed (mL/min). F32 currentPumpSpeed; ///< Current controlled dialysate pumps' speed (mL/min). - OVERRIDE_F32_T measuredPumpSpeed; ///< Measured dialysate pump speed (mL/min). - OVERRIDE_F32_T dialysatePumpMeasuredCurrentA; ///< Measured dialysate pump current feedback. - OVERRIDE_U32_T measuredDirection; ///< Measured dialysate pump direction. U32 directionErrorCount; ///< dialysate pump direction error count from power up. U32 lastDirectionErrorCount; ///< last dialysate pump direction error count from power up. - OVERRIDE_F32_T pumpTargetPressure; ///< Target dialysate pumps' pressure (PSI). U08 control; ///< Dialysate pump control } DIALYSATE_PUMP_DATA_T; @@ -134,6 +129,11 @@ //static DD_DIALYSATE_PUMP_CAL_RECORD_T dialysatePumpCalRecord; ///< Dialysate pump calibration record. static DIALYSATE_PUMP_DATA_T dialysatePumps[ NUM_OF_DIALYSATE_PUMPS ]; ///< Array of dialysate pumps data structure. +static OVERRIDE_F32_T pumpTargetSpeed[ NUM_OF_DIALYSATE_PUMPS ]; ///< Target dialysate pumps' speed (mL/min).forward direction only, hence positive speed. +static OVERRIDE_F32_T measuredPumpSpeed[ NUM_OF_DIALYSATE_PUMPS ]; ///< Measured dialysate pump speed (mL/min). +static OVERRIDE_F32_T dialysatePumpMeasuredCurrentA[ NUM_OF_DIALYSATE_PUMPS ]; ///< Measured dialysate pump current feedback. +static OVERRIDE_U32_T measuredDirection[ NUM_OF_DIALYSATE_PUMPS ]; ///< Measured dialysate pump direction. +static OVERRIDE_F32_T pumpTargetPressure[ NUM_OF_DIALYSATE_PUMPS ]; ///< Target dialysate pumps' pressure (PSI). //TODO : Validate once HDD defines the conversion. static const F32 CURRENT_CONVERSION_COEFF = (F32)( 2.5F / ( BITS_12_FULL_SCALE - 1.0F ) ); @@ -162,42 +162,42 @@ for ( pumpId = DIALYSATE_PUMPS_FIRST; pumpId < NUM_OF_DIALYSATE_PUMPS; pumpId++ ) { - dialysatePumps[ pumpId ].controlTimerCounter = 0; - dialysatePumps[ pumpId ].dialysatePumpState = DIALYSATE_PUMP_OFF_STATE; - dialysatePumps[ pumpId ].isDialPumpOn = FALSE; - dialysatePumps[ pumpId ].measuredPumpSpeed.data = 0.0F; - dialysatePumps[ pumpId ].measuredPumpSpeed.ovInitData = 0.0F; - dialysatePumps[ pumpId ].measuredPumpSpeed.override = OVERRIDE_RESET; - dialysatePumps[ pumpId ].measuredPumpSpeed.ovData = 0.0F; - dialysatePumps[ pumpId ].pumpTargetSpeed.data = 0.0F; - dialysatePumps[ pumpId ].pumpTargetSpeed.ovInitData = 0.0F; - dialysatePumps[ pumpId ].pumpTargetSpeed.override = OVERRIDE_RESET; - dialysatePumps[ pumpId ].pumpTargetSpeed.ovData = 0.0F; - dialysatePumps[ pumpId ].measuredDirection.data = DIALYSATE_PUMP_FORWARD_DIR; - dialysatePumps[ pumpId ].measuredDirection.ovInitData = DIALYSATE_PUMP_FORWARD_DIR; - dialysatePumps[ pumpId ].measuredDirection.ovData = DIALYSATE_PUMP_FORWARD_DIR; - dialysatePumps[ pumpId ].measuredDirection.override = OVERRIDE_RESET; - dialysatePumps[ pumpId ].dialysatePumpMeasuredCurrentA.data = 0.0F; - dialysatePumps[ pumpId ].dialysatePumpMeasuredCurrentA.ovInitData = 0.0F; - dialysatePumps[ pumpId ].dialysatePumpMeasuredCurrentA.ovData = 0.0F; - dialysatePumps[ pumpId ].dialysatePumpMeasuredCurrentA.override = OVERRIDE_RESET; - dialysatePumps[ pumpId ].currentPumpSpeed = MIN_DIALYSATE_PUMP_RPM; - dialysatePumps[ pumpId ].prevPumpTargetSpeed = 0.0F; - dialysatePumps[ pumpId ].control = DIALYSATE_PUMP_CONTROL_STOP; - dialysatePumps[ pumpId ].directionErrorCount = 0; - dialysatePumps[ pumpId ].lastDirectionErrorCount = 0; + dialysatePumps[ pumpId ].controlTimerCounter = 0; + dialysatePumps[ pumpId ].dialysatePumpState = DIALYSATE_PUMP_OFF_STATE; + dialysatePumps[ pumpId ].isDialPumpOn = FALSE; + measuredPumpSpeed[ pumpId ].data = 0.0F; + measuredPumpSpeed[ pumpId ].ovInitData = 0.0F; + measuredPumpSpeed[ pumpId ].override = OVERRIDE_RESET; + measuredPumpSpeed[ pumpId ].ovData = 0.0F; + pumpTargetSpeed[ pumpId ].data = 0.0F; + pumpTargetSpeed[ pumpId ].ovInitData = 0.0F; + pumpTargetSpeed[ pumpId ].override = OVERRIDE_RESET; + pumpTargetSpeed[ pumpId ].ovData = 0.0F; + measuredDirection[ pumpId ].data = DIALYSATE_PUMP_FORWARD_DIR; + measuredDirection[ pumpId ].ovInitData = DIALYSATE_PUMP_FORWARD_DIR; + measuredDirection[ pumpId ].ovData = DIALYSATE_PUMP_FORWARD_DIR; + measuredDirection[ pumpId ].override = OVERRIDE_RESET; + dialysatePumpMeasuredCurrentA[ pumpId ].data = 0.0F; + dialysatePumpMeasuredCurrentA[ pumpId ].ovInitData = 0.0F; + dialysatePumpMeasuredCurrentA[ pumpId ].ovData = 0.0F; + dialysatePumpMeasuredCurrentA[ pumpId ].override = OVERRIDE_RESET; + dialysatePumps[ pumpId ].currentPumpSpeed = MIN_DIALYSATE_PUMP_RPM; + dialysatePumps[ pumpId ].prevPumpTargetSpeed = 0.0F; + dialysatePumps[ pumpId ].control = DIALYSATE_PUMP_CONTROL_STOP; + dialysatePumps[ pumpId ].directionErrorCount = 0; + dialysatePumps[ pumpId ].lastDirectionErrorCount = 0; signalDialysatePumpHardStop( pumpId ); } - dialysatePumps[FRESH_DIALYSATE_PUMP].pumpTargetPressure.data = FRESH_DIALYSATE_TARGET_PRESSURE_PSI; - dialysatePumps[FRESH_DIALYSATE_PUMP].pumpTargetPressure.ovInitData = FRESH_DIALYSATE_TARGET_PRESSURE_PSI; - dialysatePumps[FRESH_DIALYSATE_PUMP].pumpTargetPressure.ovData = 0.0F; - dialysatePumps[FRESH_DIALYSATE_PUMP].pumpTargetPressure.override = OVERRIDE_RESET; + pumpTargetPressure[FRESH_DIALYSATE_PUMP].data = FRESH_DIALYSATE_TARGET_PRESSURE_PSI; + pumpTargetPressure[FRESH_DIALYSATE_PUMP].ovInitData = FRESH_DIALYSATE_TARGET_PRESSURE_PSI; + pumpTargetPressure[FRESH_DIALYSATE_PUMP].ovData = 0.0F; + pumpTargetPressure[FRESH_DIALYSATE_PUMP].override = OVERRIDE_RESET; - dialysatePumps[SPENT_DIALYSATE_PUMP].pumpTargetPressure.data = SPENT_DIALYSATE_TARGET_PRESSURE_PSI; - dialysatePumps[SPENT_DIALYSATE_PUMP].pumpTargetPressure.ovInitData = SPENT_DIALYSATE_TARGET_PRESSURE_PSI; - dialysatePumps[SPENT_DIALYSATE_PUMP].pumpTargetPressure.ovData = 0.0F; - dialysatePumps[SPENT_DIALYSATE_PUMP].pumpTargetPressure.override = OVERRIDE_RESET; + pumpTargetPressure[SPENT_DIALYSATE_PUMP].data = SPENT_DIALYSATE_TARGET_PRESSURE_PSI; + pumpTargetPressure[SPENT_DIALYSATE_PUMP].ovInitData = SPENT_DIALYSATE_TARGET_PRESSURE_PSI; + pumpTargetPressure[SPENT_DIALYSATE_PUMP].ovData = 0.0F; + pumpTargetPressure[SPENT_DIALYSATE_PUMP].override = OVERRIDE_RESET; // Initialize the fresh dialysate pump PI controller initializePIController( PI_CONTROLLER_ID_FRESH_DIALYSATE_PUMP, DIALYSATE_PUMP_MIN_PRESSURE_PSI, FRESH_DIALYSATE_PUMP_P_COEFFICIENT, FRESH_DIALYSATE_PUMP_I_COEFFICIENT, @@ -248,15 +248,15 @@ { if ( ( MIN_DIALYSATE_PUMP_RPM <= rpm ) && ( rpm <= MAX_DIALYSATE_PUMP_RPM ) ) { - dialysatePumps[ pumpId ].pumpTargetSpeed.data = rpm; + pumpTargetSpeed[ pumpId ].data = rpm; } else if ( rpm < MIN_DIALYSATE_PUMP_RPM ) { - dialysatePumps[ pumpId ].pumpTargetSpeed.data = 0.0; + pumpTargetSpeed[ pumpId ].data = 0.0; } else { - dialysatePumps[ pumpId ].pumpTargetSpeed.data = MAX_DIALYSATE_PUMP_RPM; + pumpTargetSpeed[ pumpId ].data = MAX_DIALYSATE_PUMP_RPM; } //handle target speed update when pump is running @@ -309,7 +309,7 @@ // Reset all the variables to stop mode dialysatePumps[ pumpId ].currentPumpSpeed = MIN_DIALYSATE_PUMP_RPM; - dialysatePumps[ pumpId ].pumpTargetSpeed.data = 0.0F; + pumpTargetSpeed[ pumpId ].data = 0.0F; dialysatePumps[ pumpId ].dialysatePumpState = DIALYSATE_PUMP_OFF_STATE; dialysatePumps[ pumpId ].controlTimerCounter = 0; dialysatePumps[ pumpId ].isDialPumpOn = FALSE; @@ -395,20 +395,20 @@ // Update the paramerters - dialysatePumps[ FRESH_DIALYSATE_PUMP ].dialysatePumpMeasuredCurrentA.data = (F32)freshDialCurrent * CURRENT_CONVERSION_COEFF; - dialysatePumps[ SPENT_DIALYSATE_PUMP ].dialysatePumpMeasuredCurrentA.data = (F32)spentDialCurrent * CURRENT_CONVERSION_COEFF; - dialysatePumps[ FRESH_DIALYSATE_PUMP ].measuredDirection.data = (U32)( ( getFPGAFreshDialysatePumpHallDirectionStatus() & DIALYSATE_PUMP_DIR_BIT_MASK ) >> SHIFT_BITS_BY_7 ); - dialysatePumps[ SPENT_DIALYSATE_PUMP ].measuredDirection.data = (U32)( ( getFPGASpentDialysatePumpHallDirectionStatus() & DIALYSATE_PUMP_DIR_BIT_MASK ) >> SHIFT_BITS_BY_7 ); - dialysatePumps[ FRESH_DIALYSATE_PUMP ].directionErrorCount = (U32)( getFPGAFreshDialysatePumpHallDirectionStatus() & DIALYSATE_PUMP_DIR_ERROR_CNT_BIT_MASK ); - dialysatePumps[ SPENT_DIALYSATE_PUMP ].directionErrorCount = (U32)( getFPGASpentDialysatePumpHallDirectionStatus() & DIALYSATE_PUMP_DIR_ERROR_CNT_BIT_MASK ); + dialysatePumpMeasuredCurrentA[ FRESH_DIALYSATE_PUMP ].data = (F32)freshDialCurrent * CURRENT_CONVERSION_COEFF; + dialysatePumpMeasuredCurrentA[ SPENT_DIALYSATE_PUMP ].data = (F32)spentDialCurrent * CURRENT_CONVERSION_COEFF; + measuredDirection[ FRESH_DIALYSATE_PUMP ].data = (U32)( ( getFPGAFreshDialysatePumpHallDirectionStatus() & DIALYSATE_PUMP_DIR_BIT_MASK ) >> SHIFT_BITS_BY_7 ); + measuredDirection[ SPENT_DIALYSATE_PUMP ].data = (U32)( ( getFPGASpentDialysatePumpHallDirectionStatus() & DIALYSATE_PUMP_DIR_BIT_MASK ) >> SHIFT_BITS_BY_7 ); + dialysatePumps[ FRESH_DIALYSATE_PUMP ].directionErrorCount = (U32)( getFPGAFreshDialysatePumpHallDirectionStatus() & DIALYSATE_PUMP_DIR_ERROR_CNT_BIT_MASK ); + dialysatePumps[ SPENT_DIALYSATE_PUMP ].directionErrorCount = (U32)( getFPGASpentDialysatePumpHallDirectionStatus() & DIALYSATE_PUMP_DIR_ERROR_CNT_BIT_MASK ); if ( freshDialSpeedCnt > SPEED_COUNT_ZERO ) { - dialysatePumps[ FRESH_DIALYSATE_PUMP ].measuredPumpSpeed.data = SPEED_CONV_FACTOR / freshDialSpeedCnt; + measuredPumpSpeed[ FRESH_DIALYSATE_PUMP ].data = SPEED_CONV_FACTOR / freshDialSpeedCnt; } if ( spentDialSpeedCnt > SPEED_COUNT_ZERO ) { - dialysatePumps[ SPENT_DIALYSATE_PUMP ].measuredPumpSpeed.data = SPEED_CONV_FACTOR / spentDialSpeedCnt; + measuredPumpSpeed[ SPENT_DIALYSATE_PUMP ].data = SPEED_CONV_FACTOR / spentDialSpeedCnt; } // Monitor dialysate pumps @@ -817,7 +817,7 @@ if ( pumpId < NUM_OF_DIALYSATE_PUMPS ) { - speed = getF32OverrideValue( &dialysatePumps[ pumpId ].pumpTargetSpeed ); + speed = getF32OverrideValue( &pumpTargetSpeed[ pumpId ] ); } else { @@ -843,7 +843,7 @@ if ( pumpId < NUM_OF_DIALYSATE_PUMPS ) { - speed = getF32OverrideValue( &dialysatePumps[ pumpId ].measuredPumpSpeed ); + speed = getF32OverrideValue( &measuredPumpSpeed[ pumpId ] ); } else { @@ -869,7 +869,7 @@ if ( pumpId < NUM_OF_DIALYSATE_PUMPS ) { - pressure = getF32OverrideValue( &dialysatePumps[ pumpId ].pumpTargetPressure ); + pressure = getF32OverrideValue( &pumpTargetPressure[ pumpId ] ); } else { @@ -894,7 +894,7 @@ if ( pumpId < NUM_OF_DIALYSATE_PUMPS ) { - current = getF32OverrideValue( &dialysatePumps[ pumpId ].dialysatePumpMeasuredCurrentA ); + current = getF32OverrideValue( &dialysatePumpMeasuredCurrentA[ pumpId ] ); } else { @@ -919,7 +919,7 @@ if ( pumpId < NUM_OF_DIALYSATE_PUMPS ) { - direction = getU32OverrideValue( &dialysatePumps[ pumpId ].measuredDirection ); + direction = getU32OverrideValue( &measuredDirection[ pumpId ] ); } else { @@ -1009,7 +1009,7 @@ *************************************************************************/ BOOL testDialysatePumpTargetSpeedOverride( MESSAGE_T *message ) { - BOOL result = f32ArrayOverride( message, &dialysatePumps[0].pumpTargetSpeed, NUM_OF_DIALYSATE_PUMPS - 1 ); + BOOL result = f32ArrayOverride( message, &pumpTargetSpeed[ 0 ], NUM_OF_DIALYSATE_PUMPS - 1 ); return result; } @@ -1026,7 +1026,7 @@ *************************************************************************/ BOOL testDialysatePumpMeasuredSpeedOverride( MESSAGE_T *message ) { - BOOL result = f32ArrayOverride( message, &dialysatePumps[0].measuredPumpSpeed, NUM_OF_DIALYSATE_PUMPS - 1 ); + BOOL result = f32ArrayOverride( message, &measuredPumpSpeed[ 0 ], NUM_OF_DIALYSATE_PUMPS - 1 ); return result; } @@ -1043,7 +1043,7 @@ *************************************************************************/ BOOL testDialysatePumpTargetPressureOverride( MESSAGE_T *message ) { - BOOL result = f32ArrayOverride( message, &dialysatePumps[0].pumpTargetPressure, NUM_OF_DIALYSATE_PUMPS - 1 ); + BOOL result = f32ArrayOverride( message, &pumpTargetPressure[ 0 ], NUM_OF_DIALYSATE_PUMPS - 1 ); return result; } @@ -1060,7 +1060,7 @@ *************************************************************************/ BOOL testDialysatePumpMeasuredCurrentOverride( MESSAGE_T *message ) { - BOOL result = f32ArrayOverride( message, &dialysatePumps[0].dialysatePumpMeasuredCurrentA, NUM_OF_DIALYSATE_PUMPS - 1 ); + BOOL result = f32ArrayOverride( message, &dialysatePumpMeasuredCurrentA[ 0 ], NUM_OF_DIALYSATE_PUMPS - 1 ); return result; } @@ -1077,7 +1077,7 @@ *************************************************************************/ BOOL testDialysatePumpMeasuredDirectionOverride( MESSAGE_T *message ) { - BOOL result = u32ArrayOverride( message, &dialysatePumps[0].measuredDirection, NUM_OF_DIALYSATE_PUMPS - 1, 0, DIALYSATE_PUMP_FORWARD_DIR ); + BOOL result = u32ArrayOverride( message, &measuredDirection[ 0 ], NUM_OF_DIALYSATE_PUMPS - 1, 0, DIALYSATE_PUMP_FORWARD_DIR ); return result; }