Index: firmware/App/Controllers/BloodFlow.h =================================================================== diff -u -r20d0c02f453b6dae1884fb1b5ba542053852ffc1 -r887e9a3dfbce1255c6469d33e49afe191af21d25 --- firmware/App/Controllers/BloodFlow.h (.../BloodFlow.h) (revision 20d0c02f453b6dae1884fb1b5ba542053852ffc1) +++ firmware/App/Controllers/BloodFlow.h (.../BloodFlow.h) (revision 887e9a3dfbce1255c6469d33e49afe191af21d25) @@ -14,30 +14,30 @@ * @date (original) 07-Nov-2019 * ***************************************************************************/ - -#ifndef __BLOOD_FLOW_H__ -#define __BLOOD_FLOW_H__ - -#include "HDCommon.h" - -/** - * @defgroup BloodFlow BloodFlow - * @brief Blood Pump & Blood Flow controller/monitor module. Monitors the - * blood flow rate and controls the blood pump. - * - * @addtogroup BloodFlow - * @{ - */ - -// ********** public definitions ********** - -#define MAX_SET_BLOOD_FLOW_RATE 500 ///< Maximum blood flow rate (in mL/min). + +#ifndef __BLOOD_FLOW_H__ +#define __BLOOD_FLOW_H__ + +#include "HDCommon.h" + +/** + * @defgroup BloodFlow BloodFlow + * @brief Blood Pump & Blood Flow controller/monitor module. Monitors the + * blood flow rate and controls the blood pump. + * + * @addtogroup BloodFlow + * @{ + */ + +// ********** public definitions ********** + +#define MAX_SET_BLOOD_FLOW_RATE 500 ///< Maximum blood flow rate (in mL/min). #define MIN_SET_BLOOD_FLOW_RATE 100 ///< Minimum blood flow rate (in mL/min). -#define SALINE_BOLUS_FLOW_RATE 150 ///< Saline bolus flow rate (in mL/min). +#define SALINE_BOLUS_FLOW_RATE 250 ///< Saline bolus flow rate (in mL/min). -#define VOLUME_PER_BP_MOTOR_REV_ML 0.216F ///< Theoretical volume (mL) of blood/saline volume per motor revolution. +#define VOLUME_PER_BP_MOTOR_REV_ML 0.216F ///< Theoretical volume (mL) of blood/saline volume per motor revolution. #define BP_HALL_EDGE_COUNTS_PER_REV 48 ///< Number of hall sensor edge counts per motor revolution. - + /// Payload record structure for a blood pump data message. typedef struct { @@ -53,49 +53,49 @@ U32 rotorHall; ///< Rotor hall in counts. } BLOOD_PUMP_STATUS_PAYLOAD_T; -// ********** public function prototypes ********** - -void initBloodFlow( void ); -void execBloodFlowMonitor( void ); -void execBloodFlowController( void ); - +// ********** public function prototypes ********** + +void initBloodFlow( void ); +void execBloodFlowMonitor( void ); +void execBloodFlowController( void ); + BOOL setBloodPumpTargetFlowRate( U32 flowRate, MOTOR_DIR_T dir, PUMP_CONTROL_MODE_T mode ); -BOOL setBloodPumpTargetRPM( U32 rpm, MOTOR_DIR_T dir ); -void signalBloodPumpHardStop( void ); -void signalBloodPumpRotorHallSensor( void ); +BOOL setBloodPumpTargetRPM( U32 rpm, MOTOR_DIR_T dir ); +void signalBloodPumpHardStop( void ); +void signalBloodPumpRotorHallSensor( void ); BOOL homeBloodPump( void ); U32 getBloodPumpMotorCount( void ); U32 getBloodPumpRotorCount( void ); BOOL isBloodPumpRunning( void ); BOOL isBloodPumpRampComplete( void ); -void resetBloodPumpRotorCount( void ); - -SELF_TEST_STATUS_T execBloodFlowTest( void ); +void resetBloodPumpRotorCount( void ); -S32 getTargetBloodFlowRate( void ); -F32 getMeasuredBloodFlowRate( void ); +SELF_TEST_STATUS_T execBloodFlowTest( void ); + +S32 getTargetBloodFlowRate( void ); +F32 getMeasuredBloodFlowRate( void ); F32 getMeasuredBloodPumpRotorSpeed( void ); F32 getMeasuredBloodPumpSpeed( void ); F32 getMeasuredBloodPumpMCSpeed( void ); F32 getMeasuredBloodPumpMCCurrent( void ); -BOOL testSetBloodFlowDataPublishIntervalOverride( U32 value ); -BOOL testResetBloodFlowDataPublishIntervalOverride( void ); -BOOL testSetTargetBloodFlowRateOverride( S32 value, U32 bloodPumpControlMode ); -BOOL testSetMeasuredBloodFlowRateOverride( F32 value ); -BOOL testResetMeasuredBloodFlowRateOverride( void ); -BOOL testSetMeasuredBloodPumpRotorSpeedOverride( F32 value ); -BOOL testResetMeasuredBloodPumpRotorSpeedOverride( void ); -BOOL testSetMeasuredBloodPumpSpeedOverride( F32 value ); -BOOL testResetMeasuredBloodPumpSpeedOverride( void ); -BOOL testSetMeasuredBloodPumpMCSpeedOverride( F32 value ); -BOOL testResetMeasuredBloodPumpMCSpeedOverride( void ); -BOOL testSetMeasuredBloodPumpMCCurrentOverride( F32 value ); -BOOL testResetMeasuredBloodPumpMCCurrentOverride( void ); +BOOL testSetBloodFlowDataPublishIntervalOverride( U32 value ); +BOOL testResetBloodFlowDataPublishIntervalOverride( void ); +BOOL testSetTargetBloodFlowRateOverride( S32 value, U32 bloodPumpControlMode ); +BOOL testSetMeasuredBloodFlowRateOverride( F32 value ); +BOOL testResetMeasuredBloodFlowRateOverride( void ); +BOOL testSetMeasuredBloodPumpRotorSpeedOverride( F32 value ); +BOOL testResetMeasuredBloodPumpRotorSpeedOverride( void ); +BOOL testSetMeasuredBloodPumpSpeedOverride( F32 value ); +BOOL testResetMeasuredBloodPumpSpeedOverride( void ); +BOOL testSetMeasuredBloodPumpMCSpeedOverride( F32 value ); +BOOL testResetMeasuredBloodPumpMCSpeedOverride( void ); +BOOL testSetMeasuredBloodPumpMCCurrentOverride( F32 value ); +BOOL testResetMeasuredBloodPumpMCCurrentOverride( void ); BOOL testSetBloodPumpRotorCountOverride( U32 value ); BOOL testResetBloodPumpRotorCountOverride( void ); BOOL testSetBloodPumpTargetDutyCycle( F32 value ); - -/**@}*/ - -#endif + +/**@}*/ + +#endif Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -r8121bf62592934e01f365a973ac813c3d4748cda -r887e9a3dfbce1255c6469d33e49afe191af21d25 --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 8121bf62592934e01f365a973ac813c3d4748cda) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 887e9a3dfbce1255c6469d33e49afe191af21d25) @@ -79,7 +79,7 @@ #define VENOUS_PRESSURE_MAX_MMHG ( 2000.0F ) ///< Maximum venous pressure reading (in mmHg) for range check. #define VENOUS_PRESSURE_MIN_MMHG ( -1500.0F ) ///< Minimum venous pressure reading (in mmHg) for range check. #define VENOUS_PRESSURE_LIMIT_MAX_MMHG ( 400.0F ) ///< Maximum venous pressure limit (in mmHg). -#define VENOUS_PRESSURE_LIMIT_MIN_MMHG ( 20.0F ) ///< Minimum venous pressure limit (in mmHg). +#define VENOUS_PRESSURE_LIMIT_MIN_MMHG ( 0.0F ) ///< Minimum venous pressure limit (in mmHg). #define VENOUS_PRESSURE_OCCL_OFFSET_MMHG ( 50.0F ) ///< Venous pressure occlusion threshold offset from max alarm limit (in mmHg). #define VENOUS_PRESSURE_EXEMPTION_PERIOD ( ( 2 * MS_PER_SECOND ) / \ TASK_GENERAL_INTERVAL ) ///< Venous pressure low exemption period (in task interval) after fill for all blood flow rate Index: firmware/App/Modes/BloodPrime.c =================================================================== diff -u -r736cc5b56cc9c784ab1d8fc8687a73d190c35759 -r887e9a3dfbce1255c6469d33e49afe191af21d25 --- firmware/App/Modes/BloodPrime.c (.../BloodPrime.c) (revision 736cc5b56cc9c784ab1d8fc8687a73d190c35759) +++ firmware/App/Modes/BloodPrime.c (.../BloodPrime.c) (revision 887e9a3dfbce1255c6469d33e49afe191af21d25) @@ -39,7 +39,7 @@ #define MIN_RAMP_TIME_SEC 60 ///< Minimum ramp time for blood prime (in seconds). /// Initial flow rate for blood pump when starting blood prime operation. -#define BLOOD_PRIME_INIT_BP_FLOW_RATE_ML_MIN 100 +#define BLOOD_PRIME_INIT_BP_FLOW_RATE_ML_MIN 250 /// Interval at which blood prime ramping is controlled. static const U32 BLOOD_PRIME_RAMPING_INTERVAL = ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ); @@ -85,6 +85,8 @@ void initBloodPrime( void ) { U32 setBPRate = getTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW ); + F32 rampRateSpan = 0.0F; + F32 estRampSeconds = 0.0F; bloodPrimeState = BLOOD_PRIME_RAMP_STATE; bloodPrimeRampControlTimerCtr = 0; @@ -94,22 +96,16 @@ bloodPrimeTargetVolume_mL = (F32)TUBING_BLOOD_PRIME_VOLUME_ML + (F32)getDialyzerBloodVolume(); bloodPrimeRampFlowRate_mL_min = (F32)BLOOD_PRIME_INIT_BP_FLOW_RATE_ML_MIN; + // Calculate BP ramp step size - if ( setBPRate <= BLOOD_PRIME_INIT_BP_FLOW_RATE_ML_MIN ) + rampRateSpan = (F32)( setBPRate - BLOOD_PRIME_INIT_BP_FLOW_RATE_ML_MIN ); + estRampSeconds = ( ( bloodPrimeTargetVolume_mL / (F32)setBPRate + bloodPrimeTargetVolume_mL / (F32)BLOOD_PRIME_INIT_BP_FLOW_RATE_ML_MIN ) / 2.0 ) * (F32)SEC_PER_MIN; + + if ( estRampSeconds < (F32)MIN_RAMP_TIME_SEC ) { - bloodPrimeRampStep_mL = 0.0; + estRampSeconds = (F32)MIN_RAMP_TIME_SEC; } - else - { - F32 rampRateSpan = (F32)( setBPRate - BLOOD_PRIME_INIT_BP_FLOW_RATE_ML_MIN ); - F32 estRampSeconds = ( ( bloodPrimeTargetVolume_mL / (F32)setBPRate + bloodPrimeTargetVolume_mL / (F32)BLOOD_PRIME_INIT_BP_FLOW_RATE_ML_MIN ) / 2.0 ) * (F32)SEC_PER_MIN; - - if ( estRampSeconds < (F32)MIN_RAMP_TIME_SEC ) - { - estRampSeconds = (F32)MIN_RAMP_TIME_SEC; - } - bloodPrimeRampStep_mL = rampRateSpan / estRampSeconds; - } + bloodPrimeRampStep_mL = rampRateSpan / estRampSeconds; } /*********************************************************************//** Index: firmware/App/Modes/Rinseback.c =================================================================== diff -u -rec17ff0ee8477fde41197b5cadb5b665cf56fd75 -r887e9a3dfbce1255c6469d33e49afe191af21d25 --- firmware/App/Modes/Rinseback.c (.../Rinseback.c) (revision ec17ff0ee8477fde41197b5cadb5b665cf56fd75) +++ firmware/App/Modes/Rinseback.c (.../Rinseback.c) (revision 887e9a3dfbce1255c6469d33e49afe191af21d25) @@ -42,7 +42,7 @@ #define MAX_TOTAL_ADDITIONAL_RINSEBACK_VOLUME_ML 300.0F ///< Maximum total additional rinseback volume allowed : all additionals (in mL). #define TARGET_ADDITIONAL_RINSEBACK_VOLUME_ML 50.0F ///< Target rinseback volume for an additional volume request (in mL). #define RINSEBACK_FLOW_RATE_ADJ_ML_MIN 25 ///< Adjustment amount (in mL/min) to apply when user requests increase/decrease in flow rate. -#define DEFAULT_RINSEBACK_FLOW_RATE_ML_MIN 200 ///< Default rinseback flow rate (in mL/min). +#define DEFAULT_RINSEBACK_FLOW_RATE_ML_MIN 250 ///< Default rinseback flow rate (in mL/min). #define MIN_RINSEBACK_FLOW_RATE_ML_MIN 100 ///< Minimum rinseback flow rate (in mL/min). #define MAX_RINSEBACK_FLOW_RATE_ML_MIN 300 ///< Maximum rinseback flow rate (in mL/min). #define DEFAULT_FILL_RESERVOIR_TO_VOLUME_ML 1500 ///< default Fill reservoir to this volume (in mL). Index: firmware/App/Modes/TreatmentEnd.c =================================================================== diff -u -r736cc5b56cc9c784ab1d8fc8687a73d190c35759 -r887e9a3dfbce1255c6469d33e49afe191af21d25 --- firmware/App/Modes/TreatmentEnd.c (.../TreatmentEnd.c) (revision 736cc5b56cc9c784ab1d8fc8687a73d190c35759) +++ firmware/App/Modes/TreatmentEnd.c (.../TreatmentEnd.c) (revision 887e9a3dfbce1255c6469d33e49afe191af21d25) @@ -36,8 +36,6 @@ /// Interval at which treatment end progress is to be published to UI. #define TREATMENT_END_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) -/// Target flow rate for blood while waiting for user to initiate final rinseback. -#define TX_END_BP_FLOW_RATE_ML_MIN 100 /// Max time to wait for user to initiate final rinseback. static const U32 TX_END_TIMEOUT_MS = ( ( 10 * 60 * MS_PER_SECOND ) / TASK_GENERAL_INTERVAL ); @@ -149,7 +147,7 @@ setValvePosition( VBA, VALVE_POSITION_B_OPEN ); setValvePosition( VBV, VALVE_POSITION_B_OPEN ); // Start blood pump at Tx End slow flow rate - setBloodPumpTargetFlowRate( TX_END_BP_FLOW_RATE_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + setBloodPumpTargetFlowRate( getTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW ), MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); bloodSittingTimerCtr = 0; // Continue air trap leveling control startAirTrapControl();