Index: firmware/App/Modes/BalancingChamber.c =================================================================== diff -u -r9102c5da21a15bdaf4bb3bc38795ceb064e3c443 -rbc30c54270ec51f947b129da3c7daad54ec4eb5f --- firmware/App/Modes/BalancingChamber.c (.../BalancingChamber.c) (revision 9102c5da21a15bdaf4bb3bc38795ceb064e3c443) +++ firmware/App/Modes/BalancingChamber.c (.../BalancingChamber.c) (revision bc30c54270ec51f947b129da3c7daad54ec4eb5f) @@ -19,11 +19,14 @@ #include "Conductivity.h" #include "ConcentratePumps.h" #include "FpgaDD.h" +#include "ModeStandby.h" +#include "Messaging.h" #include "OperationModes.h" #include "Pressure.h" -#include "Temperature.h" -#include "TDInterface.h" #include "TaskGeneral.h" +#include "TDInterface.h" +#include "Temperature.h" +#include "TestSupport.h" #include "Valves.h" /** @@ -34,23 +37,30 @@ // ********** private definitions ********** #define BAL_CHAMBER_FILL_VOLUME_ML 30.0F ///< Balancing chamber fill/drain volume per batch operation. -#define FRESH_DIAL_PRESSURE_MIN_PSIG 23.0F ///< Minimum fresh dialysate pressure (PDf) limit for balancing chamber fill operations. -#define FRESH_DIAL_PRESSURE_MAX_PSIG 25.0F ///< Maximum fresh dialysate pressure (PDf) limit for balancing chamber fill operations. -#define SPENT_DIAL_PRESSURE_MIN_PSIG 29.0F ///< Minimum spent dialysate pressure (PDs) limit for balancing chamber fill operations. -#define SPENT_DIAL_PRESSURE_MAX_PSIG 30.0F ///< Maximum spent dialysate pressure (PDs) limit for balancing chamber fill operations. #define BAL_CHAMBER_DATA_PUBLISH_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the balancing chamber data published. +#define TEST_ACID_VOLUME_ML 0.67F ///< Acid concentrate volume in ml. +#define TEST_BICARB_VOLUME_ML 1.15F ///< Bicarb concentrate volume in ml. +/// Payload record structure for balancing chamber switch only request +typedef struct +{ + U32 startStop; ///< balancing chamber switching only start:1 and stop: 0 + F32 flowrate; ///< dialysate flowrate in ml/min +} BC_SWITCHING_ONLY_START_CMD_PAYLOAD_T; + // ********** private data ********** static BAL_CHAMBER_EXEC_STATE_T balChamberExecState; ///< Current balancing chamber executive state. static OVERRIDE_F32_T balChamberSwitchingFreq; ///< Balancing chamber switching rate ( switches per min) based on the dialysate flow rate ( overrideable) static U32 balChamberSwitchingPeriod; ///< Periodic balancing chamber switching time in task interval count. +static U32 balChamberValveClosePeriod; ///< Close balancing chamber valves with the defined time prior switching state. static U32 currentBalChamberSwitchingCounter; ///< Counter (in task interval) to monitor the timing spent during balancing chamber fill/drain operation. static BOOL isBalChamberFillInProgress; ///< Flag indicating balancing chamber fill/drain is in progress. static BOOL isPressureStalbilizedDuringFill; ///< Flag indicating that the pressure is stablized due to fill complete. static BAL_CHAMBER_SW_STATE_T balChamberSWState; ///< Current balancing chamber switching state ( state 1 or state 2). static U32 balChamberDataPublicationTimerCounter; ///< Used to schedule balancing chamber data publication to CAN bus. static OVERRIDE_U32_T balChamberDataPublishInterval; ///< Balancing chamber data publish interval. +static BOOL balanceChamberSwitchingOnly; ///< Balancing chamber switching without any pressure check and dosing delivery. // ********** private function prototypes ********** @@ -81,7 +91,9 @@ balChamberDataPublishInterval.ovData = BAL_CHAMBER_DATA_PUBLISH_INTERVAL; balChamberDataPublishInterval.ovInitData = 0; balChamberDataPublishInterval.override = OVERRIDE_RESET; + balanceChamberSwitchingOnly = FALSE; balChamberSwitchingPeriod = 0; + balChamberValveClosePeriod = 0; isBalChamberFillInProgress = FALSE; currentBalChamberSwitchingCounter = 0; isPressureStalbilizedDuringFill = FALSE; @@ -120,6 +132,10 @@ // finish the balancing chamber fill 50 ms prior completing the regular cycle time. balChamberSwitchingPeriod -= 1; + + //Testing + balChamberValveClosePeriod = balChamberSwitchingPeriod; + balChamberValveClosePeriod -= 1; // Close valves prior 50 msecond for testing } /*********************************************************************//** @@ -132,11 +148,8 @@ *************************************************************************/ U32 execBalancingChamberControl( void ) { - // Increment counter during fill time only, Also check dialysate needs to be bypassed. - if ( TRUE == isBalChamberFillInProgress ) - { - currentBalChamberSwitchingCounter += 1; - } + // Increment counter indicating fill is in progress. + currentBalChamberSwitchingCounter += 1; // execute current balancing chamber exec state switch ( balChamberExecState ) @@ -191,17 +204,17 @@ *************************************************************************/ static void valveControlForBCState1FillStart( void ) { - // Close balancing chamber valve combinations V1,V6 and V4,V7 - setValveState( BCV1, VALVE_STATE_CLOSED ); - setValveState( BCV6, VALVE_STATE_CLOSED ); - setValveState( BCV4, VALVE_STATE_CLOSED ); - setValveState( BCV7, VALVE_STATE_CLOSED ); + // Close balancing chamber valve combinations D23,D20 and D21,D26 + setValveState( D23_VALV, VALVE_STATE_CLOSED ); + setValveState( D20_VALV, VALVE_STATE_CLOSED ); + setValveState( D21_VALV, VALVE_STATE_CLOSED ); + setValveState( D26_VALV, VALVE_STATE_CLOSED ); - //Open balancing chamber valve combinations V2,V5 and V3,V8 - setValveState( BCV2, VALVE_STATE_OPEN ); - setValveState( BCV5, VALVE_STATE_OPEN ); - setValveState( BCV3, VALVE_STATE_OPEN ); - setValveState( BCV8, VALVE_STATE_OPEN ); + //Open balancing chamber valve combinations D19,D24 and D25,D22 + setValveState( D19_VALV, VALVE_STATE_OPEN ); + setValveState( D24_VALV, VALVE_STATE_OPEN ); + setValveState( D25_VALV, VALVE_STATE_OPEN ); + setValveState( D22_VALV, VALVE_STATE_OPEN ); } /*********************************************************************//** @@ -214,11 +227,11 @@ *************************************************************************/ static void valveControlForBCState1FillEnd( void ) { - //Close balancing chamber valve combinations V2,V5 and V3,V8 - setValveState( BCV2, VALVE_STATE_CLOSED ); - setValveState( BCV5, VALVE_STATE_CLOSED ); - setValveState( BCV3, VALVE_STATE_CLOSED ); - setValveState( BCV8, VALVE_STATE_CLOSED ); + //Close balancing chamber valve combinations D19,D24 and D25,D22 + setValveState( D19_VALV, VALVE_STATE_CLOSED ); + setValveState( D24_VALV, VALVE_STATE_CLOSED ); + setValveState( D25_VALV, VALVE_STATE_CLOSED ); + setValveState( D22_VALV, VALVE_STATE_CLOSED ); } /*********************************************************************//** @@ -231,17 +244,17 @@ *************************************************************************/ static void valveControlForBCState2FillStart( void ) { - //Close balancing chamber valve combinations V2,V5 and V3,V8 - setValveState( BCV2, VALVE_STATE_CLOSED ); - setValveState( BCV5, VALVE_STATE_CLOSED ); - setValveState( BCV3, VALVE_STATE_CLOSED ); - setValveState( BCV8, VALVE_STATE_CLOSED ); + //Close balancing chamber valve combinations D19,D24 and D25,D22 + setValveState( D19_VALV, VALVE_STATE_CLOSED ); + setValveState( D24_VALV, VALVE_STATE_CLOSED ); + setValveState( D25_VALV, VALVE_STATE_CLOSED ); + setValveState( D22_VALV, VALVE_STATE_CLOSED ); - // Open balancing chamber valve combinations V1,V6 and V4,V7 - setValveState( BCV1, VALVE_STATE_OPEN ); - setValveState( BCV6, VALVE_STATE_OPEN ); - setValveState( BCV4, VALVE_STATE_OPEN ); - setValveState( BCV7, VALVE_STATE_OPEN ); + // Open balancing chamber valve combinations D23,D20 and D21,D26 + setValveState( D23_VALV, VALVE_STATE_OPEN ); + setValveState( D20_VALV, VALVE_STATE_OPEN ); + setValveState( D21_VALV, VALVE_STATE_OPEN ); + setValveState( D26_VALV, VALVE_STATE_OPEN ); } /*********************************************************************//** @@ -254,11 +267,11 @@ *************************************************************************/ static void valveControlForBCState2FillEnd( void ) { - // Close balancing chamber valve combinations V1,V6 and V4,V7 - setValveState( BCV1, VALVE_STATE_CLOSED ); - setValveState( BCV6, VALVE_STATE_CLOSED ); - setValveState( BCV4, VALVE_STATE_CLOSED ); - setValveState( BCV7, VALVE_STATE_CLOSED ); + // Close balancing chamber valve combinations D23,D20 and D21,D26 + setValveState( D23_VALV, VALVE_STATE_CLOSED ); + setValveState( D20_VALV, VALVE_STATE_CLOSED ); + setValveState( D21_VALV, VALVE_STATE_CLOSED ); + setValveState( D26_VALV, VALVE_STATE_CLOSED ); } /*********************************************************************//** @@ -271,17 +284,17 @@ *************************************************************************/ void valveControlForBCClosedState( void ) { - // Close balancing chamber valve combinations V1,V6 and V4,V7 - setValveState( BCV1, VALVE_STATE_CLOSED ); - setValveState( BCV6, VALVE_STATE_CLOSED ); - setValveState( BCV4, VALVE_STATE_CLOSED ); - setValveState( BCV7, VALVE_STATE_CLOSED ); + // Close balancing chamber valve combinations D23,D20 and D21,D26 + setValveState( D23_VALV, VALVE_STATE_CLOSED ); + setValveState( D20_VALV, VALVE_STATE_CLOSED ); + setValveState( D21_VALV, VALVE_STATE_CLOSED ); + setValveState( D26_VALV, VALVE_STATE_CLOSED ); - //Close balancing chamber valve combinations V2,V5 and V3,V8 - setValveState( BCV2, VALVE_STATE_CLOSED ); - setValveState( BCV5, VALVE_STATE_CLOSED ); - setValveState( BCV3, VALVE_STATE_CLOSED ); - setValveState( BCV8, VALVE_STATE_CLOSED ); + //Close balancing chamber valve combinations D19,D24 and D25,D22 + setValveState( D19_VALV, VALVE_STATE_CLOSED ); + setValveState( D24_VALV, VALVE_STATE_CLOSED ); + setValveState( D25_VALV, VALVE_STATE_CLOSED ); + setValveState( D22_VALV, VALVE_STATE_CLOSED ); } /*********************************************************************//** @@ -294,17 +307,17 @@ *************************************************************************/ void valveControlForBCOpenState( void ) { - // Open balancing chamber valve combinations V1,V6 and V4,V7 - setValveState( BCV1, VALVE_STATE_OPEN ); - setValveState( BCV6, VALVE_STATE_OPEN ); - setValveState( BCV4, VALVE_STATE_OPEN ); - setValveState( BCV7, VALVE_STATE_OPEN ); + // Open balancing chamber valve combinations D23,D20 and D21,D26 + setValveState( D23_VALV, VALVE_STATE_OPEN ); + setValveState( D20_VALV, VALVE_STATE_OPEN ); + setValveState( D21_VALV, VALVE_STATE_OPEN ); + setValveState( D26_VALV, VALVE_STATE_OPEN ); - //Open balancing chamber valve combinations V2,V5 and V3,V8 - setValveState( BCV2, VALVE_STATE_OPEN ); - setValveState( BCV5, VALVE_STATE_OPEN ); - setValveState( BCV3, VALVE_STATE_OPEN ); - setValveState( BCV8, VALVE_STATE_OPEN ); + //Open balancing chamber valve combinations D19,D24 and D25,D22 + setValveState( D19_VALV, VALVE_STATE_OPEN ); + setValveState( D24_VALV, VALVE_STATE_OPEN ); + setValveState( D25_VALV, VALVE_STATE_OPEN ); + setValveState( D22_VALV, VALVE_STATE_OPEN ); } /*********************************************************************//** @@ -323,12 +336,15 @@ isPressureStalbilizedDuringFill = FALSE; balChamberSWState = BAL_CHAMBER_SW_STATE1; - F32 freshDialPressure = getFilteredPressure( PRESSURE_SENSOR_FRESH_DIALYSATE ); - F32 spentDialPressure = getFilteredPressure( PRESSURE_SENSOR_SPENT_DIALYSATE ); + F32 freshDialPressure = getFilteredPressure( D18_PRES ); + F32 spentDialPressure = getFilteredPressure( D51_PRES ); - // Check fresh and spent dialysate pressure in range - if ( ( ( freshDialPressure >= FRESH_DIAL_PRESSURE_MIN_PSIG ) && ( freshDialPressure <= FRESH_DIAL_PRESSURE_MAX_PSIG ) ) && - ( ( spentDialPressure >= SPENT_DIAL_PRESSURE_MIN_PSIG ) && ( spentDialPressure <= SPENT_DIAL_PRESSURE_MAX_PSIG ) ) ) + // Check fresh and spent dialysate pressure in range or BC switch only flag set + //TODO : comment the pressure check + if ( 1 ) + //if ( ( ( freshDialPressure >= FRESH_DIAL_PRESSURE_MIN_PSIG ) && ( freshDialPressure <= FRESH_DIAL_PRESSURE_MAX_PSIG ) ) && + // ( ( spentDialPressure >= SPENT_DIAL_PRESSURE_MIN_PSIG ) && ( spentDialPressure <= SPENT_DIAL_PRESSURE_MAX_PSIG ) ) || + // ( TRUE == getBalChamberSwitchingOnlyStatus() ) ) { //Valve control for state 1 fill valveControlForBCState1FillStart(); @@ -358,9 +374,18 @@ static BAL_CHAMBER_EXEC_STATE_T handleBalChamberConcentrateControl( void ) { BAL_CHAMBER_EXEC_STATE_T state; - // TODO : start acid and bicarb pump with the expected quantity - // On completion of dosing, transition to next state based on the current switching state + // Deliver dosing during generate dialysate mode + if ( FALSE == getBalChamberSwitchingOnlyStatus() ) + { + // start acid and bicarb pump with the expected quantity + setConcentratePumpTargetSpeed( D11_PUMP, CONCENTRATE_PUMP_MAX_SPEED, TEST_ACID_VOLUME_ML ); + setConcentratePumpTargetSpeed( D10_PUMP, CONCENTRATE_PUMP_MAX_SPEED, TEST_BICARB_VOLUME_ML ); + requestConcentratePumpOn( D11_PUMP ); + requestConcentratePumpOn( D10_PUMP ); + } + + // On triggering of dosing, transition to next state based on the current switching state if ( BAL_CHAMBER_SW_STATE1 == balChamberSWState ) { state = BAL_CHAMBER_STATE1_FILL_END; @@ -385,32 +410,46 @@ { BAL_CHAMBER_EXEC_STATE_T state = BAL_CHAMBER_STATE1_FILL_END; - F32 freshDialPressure = getFilteredPressure( PRESSURE_SENSOR_FRESH_DIALYSATE ); - F32 spentDialPressure = getFilteredPressure( PRESSURE_SENSOR_SPENT_DIALYSATE ); + F32 freshDialPressure = getFilteredPressure( D18_PRES ); + F32 spentDialPressure = getFilteredPressure( D51_PRES ); // Check fresh and spent dialysate pressure back in range to indicate fill complete. - if ( ( ( freshDialPressure >= FRESH_DIAL_PRESSURE_MIN_PSIG ) && ( freshDialPressure <= FRESH_DIAL_PRESSURE_MAX_PSIG ) ) && - ( ( spentDialPressure >= SPENT_DIAL_PRESSURE_MIN_PSIG ) && ( spentDialPressure <= SPENT_DIAL_PRESSURE_MAX_PSIG ) ) ) + //TODO : comment the pressure check + //if ( 1 ) + if ( currentBalChamberSwitchingCounter >= balChamberValveClosePeriod ) + //if ( ( ( freshDialPressure >= FRESH_DIAL_PRESSURE_MIN_PSIG ) && ( freshDialPressure <= FRESH_DIAL_PRESSURE_MAX_PSIG ) ) && + // ( ( spentDialPressure >= SPENT_DIAL_PRESSURE_MIN_PSIG ) && ( spentDialPressure <= SPENT_DIAL_PRESSURE_MAX_PSIG ) ) ) { // stabilized pressure indicating fill is complete + //TODO : due to pressure testing override, comment the code below for now isPressureStalbilizedDuringFill = TRUE; + // isPressureStalbilizedDuringFill = FALSE; } - // Swithcing time met or pressure in range, close valves + // Switching time met or pressure in range, close valves if ( ( currentBalChamberSwitchingCounter >= balChamberSwitchingPeriod ) || ( TRUE == isPressureStalbilizedDuringFill ) ) { // close the state 1 opened valves valveControlForBCState1FillEnd(); + + //Stop the concentrate pumps + requestConcentratePumpOff( D11_PUMP, NO_PARK_CONC_PUMPS ); + requestConcentratePumpOff( D10_PUMP, NO_PARK_CONC_PUMPS ); } // On completion of cycle time, transition to next state if ( currentBalChamberSwitchingCounter >= balChamberSwitchingPeriod ) { - if ( TRUE != isPressureStalbilizedDuringFill ) + if ( ( TRUE != isPressureStalbilizedDuringFill ) && + ( FALSE == getBalChamberSwitchingOnlyStatus() ) ) { // Alarm when switching time expired, but still pressure not in range, SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DD_BC_STATE1_FILL_END_PRESSURE_OUT_OF_RANGE, freshDialPressure, spentDialPressure ); + + //TODO : Temporarily allow to proceed next state even though pressure is not stabilized. + isBalChamberFillInProgress = FALSE; + state = BAL_CHAMBER_STATE2_FILL_START; } else { @@ -438,12 +477,15 @@ isPressureStalbilizedDuringFill = FALSE; balChamberSWState = BAL_CHAMBER_SW_STATE2; - F32 freshDialPressure = getFilteredPressure( PRESSURE_SENSOR_FRESH_DIALYSATE ); - F32 spentDialPressure = getFilteredPressure( PRESSURE_SENSOR_SPENT_DIALYSATE ); + F32 freshDialPressure = getFilteredPressure( D18_PRES ); + F32 spentDialPressure = getFilteredPressure( D51_PRES ); // Check fresh and spent dialysate pressure in range - if ( ( ( freshDialPressure >= FRESH_DIAL_PRESSURE_MIN_PSIG ) && ( freshDialPressure <= FRESH_DIAL_PRESSURE_MAX_PSIG ) ) && - ( ( spentDialPressure >= SPENT_DIAL_PRESSURE_MIN_PSIG ) && ( spentDialPressure <= SPENT_DIAL_PRESSURE_MAX_PSIG ) ) ) + //TODO : comment the pressure check + if ( 1 ) + //if ( ( ( freshDialPressure >= FRESH_DIAL_PRESSURE_MIN_PSIG ) && ( freshDialPressure <= FRESH_DIAL_PRESSURE_MAX_PSIG ) ) && + // ( ( spentDialPressure >= SPENT_DIAL_PRESSURE_MIN_PSIG ) && ( spentDialPressure <= SPENT_DIAL_PRESSURE_MAX_PSIG ) ) || + // ( TRUE == getBalChamberSwitchingOnlyStatus() ) ) { // Valve control for state 2 fill valveControlForBCState2FillStart(); @@ -473,15 +515,20 @@ { BAL_CHAMBER_EXEC_STATE_T state = BAL_CHAMBER_STATE2_FILL_END; - F32 freshDialPressure = getFilteredPressure( PRESSURE_SENSOR_FRESH_DIALYSATE ); - F32 spentDialPressure = getFilteredPressure( PRESSURE_SENSOR_SPENT_DIALYSATE ); + F32 freshDialPressure = getFilteredPressure( D18_PRES ); + F32 spentDialPressure = getFilteredPressure( D51_PRES ); // Check fresh and spent dialysate pressure back in range to indicate fill complete. - if ( ( ( freshDialPressure >= FRESH_DIAL_PRESSURE_MIN_PSIG ) && ( freshDialPressure <= FRESH_DIAL_PRESSURE_MAX_PSIG ) ) && - ( ( spentDialPressure >= SPENT_DIAL_PRESSURE_MIN_PSIG ) && ( spentDialPressure <= SPENT_DIAL_PRESSURE_MAX_PSIG ) ) ) + //TODO : comment the pressure check + //if ( 1 ) + if ( currentBalChamberSwitchingCounter >= balChamberValveClosePeriod ) + //if ( ( ( freshDialPressure >= FRESH_DIAL_PRESSURE_MIN_PSIG ) && ( freshDialPressure <= FRESH_DIAL_PRESSURE_MAX_PSIG ) ) && + // ( ( spentDialPressure >= SPENT_DIAL_PRESSURE_MIN_PSIG ) && ( spentDialPressure <= SPENT_DIAL_PRESSURE_MAX_PSIG ) ) ) { // stabilized pressure indicating fill is complete + //TODO : due to pressure testing override, comment the code below for now isPressureStalbilizedDuringFill = TRUE; + //isPressureStalbilizedDuringFill = FALSE; } // Check switching cycle time or pressure check for valve closure @@ -490,15 +537,24 @@ { // close the valves valveControlForBCState2FillEnd(); + + //Stop the concentrate pumps + requestConcentratePumpOff( D11_PUMP, NO_PARK_CONC_PUMPS ); + requestConcentratePumpOff( D10_PUMP, NO_PARK_CONC_PUMPS ); } // On completion of cycle time, transition to next state if ( currentBalChamberSwitchingCounter >= balChamberSwitchingPeriod ) { - if ( TRUE != isPressureStalbilizedDuringFill ) + if ( ( TRUE != isPressureStalbilizedDuringFill ) && + ( FALSE == getBalChamberSwitchingOnlyStatus() ) ) { // Alarm when switching time expired, but still pressure not in range, SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DD_BC_STATE2_FILL_END_PRESSURE_OUT_OF_RANGE, freshDialPressure, spentDialPressure ); + + //TODO : Temporarily allow to proceed next state even though pressure is not stabilized. + isBalChamberFillInProgress = FALSE; + state = BAL_CHAMBER_STATE1_FILL_START; } else { @@ -558,6 +614,33 @@ /*********************************************************************//** * @brief + * The setBalChamberSwitchingOnlyStatus function sets the balancing chamber + * switching only On/Off status. + * @details \b Inputs: balanceChamberSwitchingOnly + * @details \b Outputs: none + * @return none + *************************************************************************/ +void setBalChamberSwitchingOnlyStatus( BOOL OnOff ) +{ + balanceChamberSwitchingOnly = OnOff; +} + +/*********************************************************************//** + * @brief + * The getBalChamberSwitchingOnlyStatus function gets the balancing chamber + * switching only status. + * @details \b Inputs: balanceChamberSwitchingOnly + * @details \b Outputs: none + * @return balancing chamber switching only without any pressure validation + * and dosing delivery + *************************************************************************/ +BOOL getBalChamberSwitchingOnlyStatus( void ) +{ + return balanceChamberSwitchingOnly; +} + +/*********************************************************************//** + * @brief * The getBalChamberDataPublishInterval function gets the balancing chamber * data publish interval. * @details \b Inputs: balChamberDataPublishInterval @@ -599,6 +682,7 @@ data.isBalChamberFillInProgress = isBalChamberFillInProgress; data.currentBalChamberSwitchingCounter = currentBalChamberSwitchingCounter; data.isPressureStalbilizedDuringFill = isPressureStalbilizedDuringFill; + data.balChamberSWOnlyState = balanceChamberSwitchingOnly; broadcastData( MSG_ID_DD_BAL_CHAMBER_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( BAL_CHAMBER_DATA_T ) ); @@ -646,4 +730,56 @@ return result; } +/*********************************************************************//** + * @brief + * The testBCSwitchOnlyStartStopOverride function starts/stops balancing + * chamber switching only without dosing delivery and pressure check condition. + * @details \b Inputs: tester logged in + * @details \b Outputs: tdDialysateFlowrate,balanceChamberSwitchingOnly + * pendingBalanceChamberSwOnlyRequest + * @param message set message from Dialin which includes the balancing chamber + * to start/stop switching and update switching rate based on the flow rate. + * @return TRUE if set request is successful, FALSE if not + *************************************************************************/ +BOOL testBCSwitchOnlyStartStopOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // Verify tester has logged in with TD + if ( TRUE == isTestingActivated() ) + { + // Verify payload length is valid + if ( sizeof( BC_SWITCHING_ONLY_START_CMD_PAYLOAD_T ) == message->hdr.payloadLen ) + { + BC_SWITCHING_ONLY_START_CMD_PAYLOAD_T payload; + + memcpy( &payload, message->payload, sizeof(BC_SWITCHING_ONLY_START_CMD_PAYLOAD_T) ); + + // Handle start command + if ( ( TRUE == payload.startStop ) && + ( ( payload.flowrate >= MIN_DIALYSIS_FLOW_RATE ) && ( payload.flowrate <= MAX_DIALYSIS_FLOW_RATE ) ) ) + { + // First set BC switching frequency based on the dialysate flow rate + setTDDialysateFlowrate( payload.flowrate ); + // then set BC switching only flag to ignore pressure check and dosing. + setBalChamberSwitchingOnlyStatus( TRUE ); + // Now, if the current operating mode is standby mode idle state, execute the balancing chamber switching only control + result = requestBCSwitchingOnlyStart(); + } + + //Handle stop command + if ( FALSE == payload.startStop ) + { + //Reset the flag + setBalChamberSwitchingOnlyStatus( FALSE ); + //Stop the BC switching execution only control + requestBCSwitchingOnlyStop(); + result = TRUE; + } + } + } + + return result; +} + /**@}*/ Index: firmware/App/Modes/BalancingChamber.h =================================================================== diff -u -r6679a2cd813b21a8cb4c58b3eeb721e0eef9a10b -rbc30c54270ec51f947b129da3c7daad54ec4eb5f --- firmware/App/Modes/BalancingChamber.h (.../BalancingChamber.h) (revision 6679a2cd813b21a8cb4c58b3eeb721e0eef9a10b) +++ firmware/App/Modes/BalancingChamber.h (.../BalancingChamber.h) (revision bc30c54270ec51f947b129da3c7daad54ec4eb5f) @@ -31,6 +31,11 @@ // ********** public definitions ********** +#define FRESH_DIAL_PRESSURE_MIN_PSIG 21.0F ///< Minimum fresh dialysate pressure (PDf) limit for balancing chamber fill operations. +#define FRESH_DIAL_PRESSURE_MAX_PSIG 27.0F ///< Maximum fresh dialysate pressure (PDf) limit for balancing chamber fill operations. +#define SPENT_DIAL_PRESSURE_MIN_PSIG 27.0F ///< Minimum spent dialysate pressure (PDs) limit for balancing chamber fill operations. +#define SPENT_DIAL_PRESSURE_MAX_PSIG 31.0F ///< Maximum spent dialysate pressure (PDs) limit for balancing chamber fill operations. + /// balancing chamber data structure typedef struct { @@ -41,6 +46,7 @@ BOOL isBalChamberFillInProgress; ///< Whether balancing chamber fill in progress or not U32 currentBalChamberSwitchingCounter; ///< Current balancing chamber switching counter BOOL isPressureStalbilizedDuringFill; ///< Whether pressure stabilized during fill or not + BOOL balChamberSWOnlyState; ///< Balancing chamber switching only status ( On/Off) } BAL_CHAMBER_DATA_T; // ********** public function prototypes ********** @@ -56,9 +62,12 @@ BOOL getBalancingChamberFillinProgressStatus( void ); // Get the balancing chamber fill in progress status void valveControlForBCClosedState( void ); // Closes all balancing chamber valves void valveControlForBCOpenState( void ); // Open all balancing chamber valves +BOOL getBalChamberSwitchingOnlyStatus( void ); // Get balancing chamber switching only status +void setBalChamberSwitchingOnlyStatus( BOOL OnOff ); // Set balancing chamber switching only status BOOL testDDBalChamberDataPublishIntervalOverride( MESSAGE_T *message ); // To override the balancing chamber data publish interval BOOL testBalChamberSwFreqOverride( MESSAGE_T *message ); // To override the balancing chamber switching frequency +BOOL testBCSwitchOnlyStartStopOverride( MESSAGE_T *message ); // To override the balancning chamber switching only start/stop control /**@}*/ Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -r48ca7fd644c67920acc29a80b7af379d0a134d1a -rbc30c54270ec51f947b129da3c7daad54ec4eb5f --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 48ca7fd644c67920acc29a80b7af379d0a134d1a) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision bc30c54270ec51f947b129da3c7daad54ec4eb5f) @@ -146,20 +146,20 @@ // De-energize all the hydraulics valves // TODO : valve state name needs to be updated - setValveStateDelayed( VDR, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); - setValveStateDelayed( VTD, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); - setValveStateDelayed( VHB, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); - setValveStateDelayed( VRP, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); - setValveStateDelayed( VHO, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); - setValveStateDelayed( VDB1, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); - setValveStateDelayed( VP1, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); - setValveStateDelayed( VPT, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); - setValveStateDelayed( VDB2, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); - setValveStateDelayed( VDI, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); - setValveStateDelayed( VDO, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); - setValveStateDelayed( VP2, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); - setValveStateDelayed( VHI, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); - setValveStateDelayed( VWI, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); + setValveStateDelayed( D53_VALV, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); + setValveStateDelayed( D52_VALV, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); + setValveStateDelayed( D8_VALV, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); + setValveStateDelayed( D54_VALV, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); + setValveStateDelayed( D14_VALV, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); + setValveStateDelayed( D65_VALV, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); + setValveStateDelayed( D64_VALV, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); + setValveStateDelayed( D31_VALV, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); + setValveStateDelayed( D34_VALV, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); + setValveStateDelayed( D35_VALV, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); + setValveStateDelayed( D40_VALV, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); + setValveStateDelayed( D47_VALV, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); + setValveStateDelayed( D3_VALV, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); + setValveStateDelayed( M4_VALV, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); // De-energize Balancing chamber and Ultrafiltration valves for ( i = FIRST_BC_VALVE; i <= LAST_BC_VALVE; i++ ) @@ -172,12 +172,12 @@ setValveStateDelayed( (VALVES_T)i, VALVE_STATE_CLOSED, DELAY_VALVE_MS ); } - requestConcentratePumpOff( CONCENTRATEPUMPS_CP1_ACID, parkPumps ); - requestConcentratePumpOff( CONCENTRATEPUMPS_CP2_BICARB, parkPumps ); - signalDialysatePumpHardStop( FRESH_DIALYSATE_PUMP ); - signalDialysatePumpHardStop( SPENT_DIALYSATE_PUMP ); - stopHeater( DD_PRIMARY_HEATER ); - stopHeater( DD_TRIMMER_HEATER ); + requestConcentratePumpOff( D11_PUMP, parkPumps ); + requestConcentratePumpOff( D10_PUMP, parkPumps ); + signalDialysatePumpHardStop( D12_PUMP ); + signalDialysatePumpHardStop( D48_PUMP ); + stopHeater( D5_HEAT ); + stopHeater( D45_HEAT ); } /*********************************************************************//** Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -r9102c5da21a15bdaf4bb3bc38795ceb064e3c443 -rbc30c54270ec51f947b129da3c7daad54ec4eb5f --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 9102c5da21a15bdaf4bb3bc38795ceb064e3c443) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision bc30c54270ec51f947b129da3c7daad54ec4eb5f) @@ -20,6 +20,7 @@ #include "Conductivity.h" #include "DialysatePumps.h" #include "FpgaDD.h" +#include "Heaters.h" #include "Level.h" #include "ModeGenDialysate.h" #include "ModeStandby.h" @@ -39,29 +40,28 @@ // ********** private definitions ********** #define FRESH_DIAL_PUMP_INITIAL_RPM 2500 ///< Nominal RPM target for fresh dialysate pump to maintain required pressure. -#define SPENT_DIAL_PUMP_INITIAL_RPM 2500 ///< Nominal RPM target for spent dialysate pump to maintain required pressure. +#define SPENT_DIAL_PUMP_INITIAL_RPM 2000 ///< Nominal RPM target for spent dialysate pump to maintain required pressure. #define HYD_CHAMBER_FLUID_TEMP_C_MIN 35.0F ///< Minimum hydraulics fluid temperature in deg celcius #define HYD_CHAMBER_PRES_CHECK_TIME_OUT ( 1 * SEC_PER_MIN * MS_PER_SECOND ) ///< Time out period when hydraulics chamber pressure check initiated #define SPENT_DIAL_PRES_CHECK_TIME_OUT ( 1 * SEC_PER_MIN * MS_PER_SECOND ) ///< Time out period when spent dialysate pressure check initiated -#define HYD_CHAMBER_TARGET_NEG_PRESS_MIN_PSI (-11.7877F) ///< Hydraulics chamber minimum negative pressure(D9/PHo) in psi. -#define HYD_CHAMBER_TARGET_NEG_PRESS_MAX_PSI (-12.2789F) ///< Hydraulics chamber maximum negative pressure(D9/PHo) in psi. -#define HYD_CHAMBER_TARGET_POS_PRESS_MIN_PSI ( 23.0F ) ///< Hydraulics chamber or fresh dialysate minimum positive pressure(D18/PDf) in psi. -#define HYD_CHAMBER_TARGET_POS_PRESS_MAX_PSI ( 25.0F ) ///< Hydraulics chamber or fresh dialysate maximum positive pressure(D18/PDf) in psi. -#define SPENT_DIAL_TARGET_POS_PRESS_MIN_PSI ( 29.0F ) ///< Spent dialysate minimum positive pressure(D51/PDs) in psi. -#define SPENT_DIAL_TARGET_POS_PRESS_MAX_PSI ( 30.0F ) ///< Spent dialysate maximum positive pressure(D18/PDs) in psi. +//TODO : Needs further finetuning. currently max negative pressure reaches around 11.5 psi +/- 5% values defined for now +//#define HYD_CHAMBER_TARGET_NEG_PRESS_MIN_PSI (-11.7877F) ///< Hydraulics chamber minimum negative pressure(D9/PHo) in psi. +//#define HYD_CHAMBER_TARGET_NEG_PRESS_MAX_PSI (-12.2789F) ///< Hydraulics chamber maximum negative pressure(D9/PHo) in psi. +#define HYD_CHAMBER_TARGET_NEG_PRESS_MIN_PSI (-10.000F) ///< Hydraulics chamber minimum negative pressure(D9/PHo) in psi. +#define HYD_CHAMBER_TARGET_NEG_PRESS_MAX_PSI (-12.075F) ///< Hydraulics chamber maximum negative pressure(D9/PHo) in psi. #define GEN_DIALYSATE_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the gen dialysate mode data published. // ********** private data ********** static DD_GEND_MODE_STATE_T genDialysateState = DD_GEND_STATE_START; ///< Currently active gen dialysate state. -//static OVERRIDE_F32_T targetHydChamberFluidTemp; ///< Target hydraulics chamber fluid temperature. -//static BOOL isHydChamberTempinRange = FALSE; ///< Flag indicating hydraulics chamber water temperature is in range. +static OVERRIDE_F32_T targetHydChamberFluidTemp; ///< Target hydraulics chamber fluid temperature. static U32 hydChamberPressureCheckStartTimeMS; ///< Current time when hydraulics chamber pressure check satrted in milliseconds. static U32 spentDialPressureCheckStartTimeMS; ///< Current time when spent dialysate pressure check started in milliseconds. static OVERRIDE_U32_T isDialDeliveryInProgress; ///< To indicate dialysate started delivering to dialyzer for treatment (overrideable) static OVERRIDE_U32_T isDialysateGoodtoDeliver; ///< Flag indicating whether ready to deliver dialysate or not. static U32 genDialysateDataPublicationTimerCounter; ///< Used to schedule generate dialysate data publication to CAN bus. static OVERRIDE_U32_T genDialysateDataPublishInterval; ///< Generate dialysate mode data publish interval. +static F32 lastDialTargetTemperatureSet; ///< last dialysate target temperature set for heater control // ********** private function prototypes ********** @@ -74,6 +74,7 @@ static DD_GEND_MODE_STATE_T handleGenDProduceDialysateState( void ); static DD_GEND_MODE_STATE_T handleGenDDialysateDeliveryState( void ); static DD_GEND_MODE_STATE_T handleGenDDialysateDeliveryPauseState( void ); +static F32 getGenDilaysateTargetTemperature( void ); static void publishGenDialysateModeData( void ); /*********************************************************************//** @@ -85,11 +86,10 @@ *************************************************************************/ void initGenDialysateMode( void ) { -// targetHydChamberFluidTemp.data = HYD_CHAMBER_FLUID_TEMP_C_MIN; -// targetHydChamberFluidTemp.ovInitData = HYD_CHAMBER_FLUID_TEMP_C_MIN; -// targetHydChamberFluidTemp.ovData = HYD_CHAMBER_FLUID_TEMP_C_MIN; -// targetHydChamberFluidTemp.override = OVERRIDE_RESET; -// isHydChamberTempinRange = FALSE; + targetHydChamberFluidTemp.data = HYD_CHAMBER_FLUID_TEMP_C_MIN; + targetHydChamberFluidTemp.ovInitData = HYD_CHAMBER_FLUID_TEMP_C_MIN; + targetHydChamberFluidTemp.ovData = HYD_CHAMBER_FLUID_TEMP_C_MIN; + targetHydChamberFluidTemp.override = OVERRIDE_RESET; genDialysateState = DD_GEND_STATE_START; isDialysateGoodtoDeliver.data = FALSE; isDialysateGoodtoDeliver.ovData = FALSE; @@ -106,6 +106,7 @@ genDialysateDataPublishInterval.ovInitData = 0; genDialysateDataPublishInterval.override = OVERRIDE_RESET; genDialysateDataPublicationTimerCounter = 0; + lastDialTargetTemperatureSet = 0.0F; //Initialize balancing chamber module initBalanceChamber(); @@ -138,9 +139,9 @@ void execGenDialysateMonitor( void ) { // Read temperature and conducitivity - //F32 hydChamberTemperature = getTemperatureValue( TEMPSENSORS_HYDRAULICS_PRIMARY_HEATER ); - //F32 biCarbConductivity = getConductivityValue( CONDUCTIVITYSENSORS_CD1_SENSOR ); - //F32 acidBicarbMixConductivity = getConductivityValue( CONDUCTIVITYSENSORS_CD3_SENSOR ); + //F32 hydChamberTemperature = getTemperatureValue( D4_TEMP ); + //F32 biCarbConductivity = getConductivityValue( D17_COND ); + //F32 acidBicarbMixConductivity = getConductivityValue( D29_COND ); // Monitor critical parameter while balancing chamber fill is in progress if ( TRUE == getBalancingChamberFillinProgressStatus() ) @@ -175,18 +176,24 @@ valveControlForBCClosedState(); setHydValvesStatetoClosedState(); setUFValvesStatetoClosedState(); + setValveState( M4_VALV, VALVE_STATE_OPEN ); //M4 // Get the target temperature from TD - //targetHydChamberFluidTemp.data = HYD_CHAMBER_FLUID_TEMP_C_MIN; + targetHydChamberFluidTemp.data = getTDTargetDialysateTemperature(); + + // Turn on the primary heater + setHeaterTargetTemperature( D5_HEAT, getGenDilaysateTargetTemperature() ); + startHeater( D5_HEAT ); + lastDialTargetTemperatureSet = getGenDilaysateTargetTemperature(); break; case DD_GEND_HYD_CHAMBER_PRESSURE_CHECK_STATE: // Open up VHo valve - setValveState( VHO, VALVE_STATE_OPEN ); //D14 + setValveState( D14_VALV, VALVE_STATE_OPEN ); //D14 // Start timer for hyd chamber negative pressure check state hydChamberPressureCheckStartTimeMS = getMSTimerCount(); // Start D12/DGP pump - setDialysatePumpTargetRPM( FRESH_DIALYSATE_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM ); + setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM ); break; case DD_GEND_FRESH_DIALYSATE_PRESSURE_CHECK_STATE: @@ -199,37 +206,58 @@ spentDialPressureCheckStartTimeMS = getMSTimerCount(); // Open all balancing chamber valves for free flow - valveControlForBCOpenState(); + //valveControlForBCOpenState(); + // Open fresh balancing chamber valves D19,D20,D21,D22 + setValveState( D19_VALV, VALVE_STATE_OPEN ); + setValveState( D20_VALV, VALVE_STATE_OPEN ); + setValveState( D21_VALV, VALVE_STATE_OPEN ); + setValveState( D22_VALV, VALVE_STATE_OPEN ); + + // Close spent side valves D23,D24,D25,D26 + setValveState( D23_VALV, VALVE_STATE_CLOSED ); + setValveState( D25_VALV, VALVE_STATE_CLOSED ); + setValveState( D24_VALV, VALVE_STATE_CLOSED ); + setValveState( D26_VALV, VALVE_STATE_CLOSED ); + + // Make sure valves are in correct position - setValveState( VDR, VALVE_STATE_OPEN ); // Drain valve : D53 - setValveState( VDI, VALVE_STATE_CLOSED ); - setValveState( VDO, VALVE_STATE_CLOSED ); - setValveState( VDB2, VALVE_STATE_OPEN ); + setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve : D53 + setValveState( D35_VALV, VALVE_STATE_CLOSED ); // VDI + setValveState( D40_VALV, VALVE_STATE_CLOSED ); // VDO + setValveState( D34_VALV, VALVE_STATE_OPEN ); // Bypass valve // Start D48/SDP pump - setDialysatePumpTargetRPM( SPENT_DIALYSATE_PUMP, SPENT_DIAL_PUMP_INITIAL_RPM ); + setDialysatePumpTargetRPM( D48_PUMP, SPENT_DIAL_PUMP_INITIAL_RPM ); break; case DD_GEND_PRODUCE_DIALYSATE_STATE: - // Enable bypass valve - setValveState( VDI, VALVE_STATE_CLOSED ); - setValveState( VDO, VALVE_STATE_CLOSED ); - setValveState( VDB2, VALVE_STATE_OPEN ); + //Close previously opened BC valves + valveControlForBCClosedState(); + + // Make sure bypass valve open condition + setValveState( D35_VALV, VALVE_STATE_CLOSED ); // VDI + setValveState( D40_VALV, VALVE_STATE_CLOSED ); // VDO + setValveState( D34_VALV, VALVE_STATE_OPEN ); // Bypass valve break; case DD_GEND_DIALYSATE_DELIVERY_STATE: // Disable bypass valve - setValveState( VDB2, VALVE_STATE_CLOSED ); - setValveState( VDI, VALVE_STATE_OPEN ); - setValveState( VDO, VALVE_STATE_OPEN ); + setValveState( D34_VALV, VALVE_STATE_CLOSED ); // Bypass valve + setValveState( D35_VALV, VALVE_STATE_OPEN ); // VDI + setValveState( D40_VALV, VALVE_STATE_OPEN ); // VDO break; case DD_GEND_DIALYSATE_DELIVERY_PAUSE: // stop the motor during pause conditions - signalDialysatePumpHardStop( FRESH_DIALYSATE_PUMP ); - signalDialysatePumpHardStop( SPENT_DIALYSATE_PUMP ); + signalDialysatePumpHardStop( D12_PUMP ); + signalDialysatePumpHardStop( D48_PUMP ); + requestConcentratePumpOff( D11_PUMP, FALSE ); + requestConcentratePumpOff( D10_PUMP, FALSE ); + stopHeater( D5_HEAT ); + stopHeater( D45_HEAT ); + //close the DD - water inlet and drain valves? break; @@ -324,50 +352,37 @@ { // Read floater switch BOOL result = FALSE; - LEVEL_STATE_T floaterLevel1 = getLevelStatus( FLOATER_1 ); - //LEVEL_STATE_T floaterLevel2 = getLevelStatus( FLOATER_2 ); - //F32 hydChamberTemperature = getTemperatureValue( TEMPSENSORS_HYDRAULICS_PRIMARY_HEATER ); + LEVEL_STATE_T floaterLevel = getLevelStatus( D6_LEVL ); + //LEVEL_STATE_T spentDialLevel = getLevelStatus( D46_LEVL ); + // Get the target temperature from TD + targetHydChamberFluidTemp.data = getTDTargetDialysateTemperature(); + // High level is met - if ( STATE_HIGH == floaterLevel1 ) + if ( LEVEL_STATE_HIGH == floaterLevel ) { + // Get the target dialysate temperature + F32 targetTemperature = getGenDilaysateTargetTemperature(); + //turn off inlet water valve - setValveState( VHI, VALVE_STATE_CLOSED ); + setValveState( D3_VALV, VALVE_STATE_CLOSED ); -// // read latest fluid temperature -// hydChamberTemperature = getTemperatureValue( TEMPSENSORS_HYDRAULICS_PRIMARY_HEATER ); -// -// if ( hydChamberTemperature < HYD_CHAMBER_FLUID_TEMP_C_MIN ) -// { -// //if fluid temp is lesser, turn on heater -// setHeaterTargetTemperature( DD_PRIMARY_HEATER, targetHydChamberFluidTemp ); -// startHeater( DD_PRIMARY_HEATER ); -// } -// else -// { -// //Turn heater off -// if ( TRUE == isHeaterOn( DD_PRIMARY_HEATER ) ) -// { -// stopHeater( DD_PRIMARY_HEATER ); -// } -// } + if ( lastDialTargetTemperatureSet != targetTemperature ) + { + // Update the target temperature for heater control + setHeaterTargetTemperature( D5_HEAT, targetTemperature ); + lastDialTargetTemperatureSet = targetTemperature; + } - // For now, lets not wait for temperature to reach target, as soon as water level is high - // enough, update results to true. + // Water level reached high. result = TRUE; } else { // if level is not met,allow inlet water to hydraulics chamber - setValveState( VHI, VALVE_STATE_OPEN ); + setValveState( D3_VALV, VALVE_STATE_OPEN ); } - // Invalid levels -// if ( ( STATE_LOW == floaterLevel1 ) && ( STATE_HIGH == floaterLevel2 ) ) -// { -// //TODO : check for invalid levels and trigger alarm -// } - return result; } @@ -405,10 +420,10 @@ static DD_GEND_MODE_STATE_T handleGenDHydChamberPressureCheckState( void ) { DD_GEND_MODE_STATE_T state = DD_GEND_HYD_CHAMBER_PRESSURE_CHECK_STATE; - F32 hydPressure = getFilteredPressure( PRESSURE_SENSOR_HYDRAULICS_OUTLET ); + F32 hydPressure = getFilteredPressure( D9_PRES ); // Hydraulics chamber negative pressure is in range ( -24 to -25 inHg ) - if ( ( hydPressure >= HYD_CHAMBER_TARGET_NEG_PRESS_MIN_PSI ) && ( hydPressure <= HYD_CHAMBER_TARGET_NEG_PRESS_MAX_PSI ) ) + if ( ( hydPressure <= HYD_CHAMBER_TARGET_NEG_PRESS_MIN_PSI ) && ( hydPressure >= HYD_CHAMBER_TARGET_NEG_PRESS_MAX_PSI ) ) { // Proceed to next state setModeGenDStateTransition( DD_GEND_FRESH_DIALYSATE_PRESSURE_CHECK_STATE );