/************************************************************************** * * Copyright (c) 2020-2023 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file DialOutFlow.h * * @author (last) Dara Navaei * @date (last) 05-Sep-2023 * * @author (original) Sean * @date (original) 24-Jan-2020 * ***************************************************************************/ #ifndef __DIALYSATE_OUT_FLOW_H__ #define __DIALYSATE_OUT_FLOW_H__ #include "HDCommon.h" /** * @defgroup DialysateOutlet DialysateOutlet * @brief Dialysate outlet pump and load cells controller/monitor module. * Monitors the dialysate outlet pump and load cells. Controls the dialysate * outlet pump for ultrafiltration. * * @addtogroup DialysateOutlet * @{ */ // ********** public definitions ********** #pragma pack(push, 1) /// Dialysate outlet pump broadcast record typedef struct DialOutBroadcastingRecord { F32 refUFVolMl; ///< Reference ultrafiltration volume in mL. F32 measUFVolMl; ///< Total measured ultrafiltration volume in mL. F32 measRotSpdRPM; ///< Latest measured rotor speed for dialysate outlet pump in RPM. F32 measSpdRPM; ///< Latest measured motor speed for dialysate outlet pump in RPM. F32 measMCSpdRPM; ///< Latest measured motor controller speed for dialysate outlet pump in RPM. F32 measMCCurrmA; ///< Latest measured motor controller current for dialysate outlet pump in mA. F32 setPWMpct; ///< Latest PWM duty cycle for dialysate outlet pump in % (0..100). F32 dopCorrOffset; ///< Latest correction offset for calculated DPo flow rate. F32 dopCalcRate; ///< Latest calculated DPo flow rate. F32 ufCalcRate; ///< Latest calculated UF rate. U32 rotorHall; ///< Latest rotor hall sensor state (1=home, 0=not home) F32 currentSetUFRate; ///< Latest UF set rate. } DIAL_OUT_FLOW_DATA_T; #pragma pack(pop) // ********** public function prototypes ********** void initDialOutFlow( void ); void execDialOutFlowMonitor( void ); void execDialOutFlowController( void ); BOOL setDialOutPumpTargetRate( U32 flowRate, MOTOR_DIR_T dir, PUMP_CONTROL_MODE_T mode ); BOOL setDialOutPumpTargetRPM( U32 rpm, MOTOR_DIR_T dir ); void setDialOutUFVolumes( F32 refVol, F32 totVol ); void signalDialOutPumpHardStop( void ); void signalDialOutPumpRotorHallSensor( void ); void signalDialOutControl( void ); void resetDialOutRateOffset( void ); BOOL homeDialOutPump( void ); BOOL isDialOutPumpRunning( void ); BOOL isDialOutPumpRampComplete( void ); SELF_TEST_STATUS_T execDialOutFlowTest( void ); F32 getTotalTargetDialOutUFVolumeInMl( void ); F32 getTotalMeasuredUFVolumeInMl( void ); F32 getMeasuredDialOutPumpMCSpeed( void ); F32 getMeasuredDialOutPumpMCCurrent( void ); F32 getMeasuredDialOutPumpRotorSpeed( void ); F32 getMeasuredDialOutPumpSpeed( void ); BOOL testSetDialOutPumpAndLoadCellDataPublishIntervalOverride( U32 value ); BOOL testResetDialOutPumpAndLoadCellDataPublishIntervalOverride( void ); BOOL testSetTargetDialOutFlowRateOverride( S32 value, U32 ctrlMode ); BOOL testSetDialOutUFRefVolumeOverride( F32 value ); BOOL testResetDialOutUFRefVolumeOverride( void ); BOOL testSetDialOutUFTotVolumeOverride( F32 value ); BOOL testResetDialOutUFTotVolumeOverride( void ); BOOL testSetMeasuredDialOutPumpRotorSpeedOverride( F32 value ); BOOL testResetMeasuredDialOutPumpRotorSpeedOverride( void ); BOOL testSetMeasuredDialOutPumpSpeedOverride( F32 value ); BOOL testResetMeasuredDialOutPumpSpeedOverride( void ); BOOL testSetMeasuredDialOutPumpMCSpeedOverride( F32 value ); BOOL testResetMeasuredDialOutPumpMCSpeedOverride( void ); BOOL testSetMeasuredDialOutPumpMCCurrentOverride( F32 value ); BOOL testResetMeasuredDialOutPumpMCCurrentOverride( void ); BOOL testSetDialOutPumpTargetDutyCycle( F32 value ); /**@}*/ #endif