/************************************************************************** * * Copyright (c) 2020-2025 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 ROPump.h * * @author (last) Sean Nash * @date (last) 22-Sep-2023 * * @author (original) Sean * @date (original) 04-Apr-2020 * ***************************************************************************/ #ifndef __RO_PUMP_H__ #define __RO_PUMP_H__ #include "DGCommon.h" /** * @defgroup ROPump ROPump * @brief RO Pump monitor and controller module. Controls and monitors the RO pump and the flow meter. * The flow meter is manufactured by SwissFlow, PN: 82015311. * The diaphragm (RO) pump is manufactured by Aquatec, PN: 5889-2MM1-V724DY. * * @addtogroup ROPump * @{ */ // ********** public definitions ********** #define MAX_RO_FLOWRATE_LPM 1.8F ///< Maximum target RO flow rate in L/min. #define MIN_RO_FLOWRATE_LPM 0.0F ///< Minimum target RO flow rate in L/min. #define CLEANING_MODE_HIGH_TEMP_MAX_RO_PRESSURE_PSI 30 ///< Cleaning mode high temperature maximum RO pressure in psi. /// Enumerations of RO pump PI controller profiles. typedef enum { RO_PI_FLOW_PROFILE_FLUSH = 0, ///< RO pump control profile for flush mode RO_PI_FLOW_PROFILE_GEN_IDLE, ///< RO pump control profile for generate idle mode RO_PI_FLOW_PROFILE_FILL, ///< RO pump control profile for fill mode RO_PI_FLOW_PROFILE_DRAIN, ///< RO pump control profile for drain mode RO_PI_FLOW_PROFILE_HEAT, ///< RO pump control profile for heat disinfect mode RO_PI_FLOW_PROFILE_OPEN_LOOP, ///< RO pump control profile for oppen loop control NUM_OF_RO_PI_FLOW_PROFILES, ///< Number of RO pump control profiles } RO_PI_FLOW_PROFILES_T; /// RO pump data struct. typedef struct { F32 roPumpTgtPressurePSI; ///< RO pump target pressure. F32 roMeasFlowRateLPM; ///< RO pump measured flow rate F32 roPumpDutyCycle; ///< RO pump duty cycle. U32 roPumpState; ///< RO pump current state. F32 roPumpTgtFlowRateLPM; ///< RO pump target flow rate in L/min. F32 roPumpFBDutyCycle; ///< RO pump feedback duty cycle. } RO_PUMP_DATA_T; // ********** public function prototypes ********** void initROPump( void ); void execROPumpMonitor( void ); void execROPumpController( void ); BOOL setROPumpTargetFlowRateLPM( F32 roFlowRate, U32 maxPressure ); BOOL setROPumpTargetFlowRateDelayed( F32 roFlowRate, U32 maxPressure, U32 delayMs ); BOOL setROPumpTargetDutyCycle( F32 duty ); void signalROPumpHardStop( void ); BOOL isROPumpRunning( void ); F32 getTargetROPumpFlowRateLPM( void ); F32 getTargetROPumpPressurePSI( void ); F32 getROGeneratedVolumeL( void ); void resetROGenerateVolumeL( void ); void setROPIFlowProfile( RO_PI_FLOW_PROFILES_T profileID ); BOOL testSetROPumpDataPublishIntervalOverride( U32 value ); BOOL testResetROPumpDataPublishIntervalOverride( void ); BOOL testSetTargetROPumpFlow( F32 flow ); BOOL testSetTargetROPumpPressure( U32 value ); BOOL testSetTargetDutyCycle( F32 value ); BOOL testSetROPumpMeasuredFeedbackDutyCycleOverride( F32 value ); BOOL testResetROPumpMeasuredFeedbackDutyCycleOverride( void ); /**@}*/ #endif