Index: firmware/App/Controllers/PermeateTank.c =================================================================== diff -u -r9cbb00a9eba347697bdf5cee63962061ffa36c92 -r7e4bcfd25226dcac849ba52f417fd08865d04c2c --- firmware/App/Controllers/PermeateTank.c (.../PermeateTank.c) (revision 9cbb00a9eba347697bdf5cee63962061ffa36c92) +++ firmware/App/Controllers/PermeateTank.c (.../PermeateTank.c) (revision 7e4bcfd25226dcac849ba52f417fd08865d04c2c) @@ -33,6 +33,7 @@ #define PERMEATE_TANK_PUMP_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) for permeate tank broadcast #define PERMEATE_TANK_PUBLISH_COUNTER_START_COUNT 9 +#define PERMEATE_TANK_FILL_SWITCH_MS ( 6 * MS_PER_SECOND ) #define PERMEATE_TANK_FULL_SWITCH_MS ( 6 * MS_PER_SECOND ) ///< state switch timeout (in ms) #define PERMEATE_TANK_FULL_TIMEOUT_MS ( 60 * MS_PER_SECOND ) @@ -45,6 +46,7 @@ static BOOL pendingStopPermeateTankController; ///< Flag indicates an air trap controller stop request is pending. static U32 tankFullAlarmTimeout; ///< Time stamp to track alarm timeout. static U32 tankFullDelayTime; ///< Time stamp to track delay before valve switch. +static U32 tankFillDelayTime; ///< Time stamp to track fill timeout. // ********** private function prototypes ********** @@ -69,6 +71,7 @@ permeateTankPublishInterval.ovData = PERMEATE_TANK_PUMP_DATA_PUB_INTERVAL; permeateTankPublishInterval.ovInitData = PERMEATE_TANK_PUMP_DATA_PUB_INTERVAL; permeateTankPublishInterval.override = OVERRIDE_RESET; + tankFillDelayTime = 0; tankFullDelayTime = 0; tankFullAlarmTimeout = 0; } @@ -251,11 +254,12 @@ { state = PERMEATE_TANK_FULL_STATE; } - - else if ( level <= LEVEL_STATE_MEDIUM ) + else if ( level == LEVEL_STATE_LOW ) { - // expected state. No action required. - // If level is low we still want to fill. + if ( TRUE == didTimeout( tankFillDelayTime, PERMEATE_TANK_FILL_SWITCH_MS ) ) + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_FP_GEN_PERMEATE_TANK_FILL_TIMEOUT, level ) + } } return state; @@ -285,8 +289,7 @@ pendingStopPermeateTankController = FALSE; state = PERMEATE_TANK_MANUAL_CONTROL_STATE; } - else if ( ( ( level == LEVEL_STATE_MEDIUM ) && ( TRUE == didTimeout( tankFullDelayTime, PERMEATE_TANK_FULL_SWITCH_MS ) ) ) || - ( level == LEVEL_STATE_LOW ) ) + else if ( level == LEVEL_STATE_LOW ) { state = PERMEATE_TANK_FILL_STATE; } @@ -323,6 +326,7 @@ setValveState( P39_VALV, VALVE_STATE_OPEN ); setValveState( P20_VALV, VALVE_STATE_CLOSED ); setValveState( P43_VALV, VALVE_STATE_CLOSED ); + tankFillDelayTime = getMSTimerCount(); break; case PERMEATE_TANK_FULL_STATE: Index: firmware/App/Drivers/PressureSensor.c =================================================================== diff -u -r3a5cc585b69ffa194e3601a005915d23b48bd865 -r7e4bcfd25226dcac849ba52f417fd08865d04c2c --- firmware/App/Drivers/PressureSensor.c (.../PressureSensor.c) (revision 3a5cc585b69ffa194e3601a005915d23b48bd865) +++ firmware/App/Drivers/PressureSensor.c (.../PressureSensor.c) (revision 7e4bcfd25226dcac849ba52f417fd08865d04c2c) @@ -33,6 +33,7 @@ #define COUNTS_TO_MILLI_BAR 100 ///< Counts to milli-bar conversion. #define BAR_TO_MMHG ( 750.062F ) ///< Conversion factor for converting bar to mmHg. #define PRES_SENSORS_READ_ERR_MAX_CNT 0xFF ///< Pressure sensor read and error max count value +#define PRES_MIN_PSI_ALPHA 0.0F #define PRES_MIN_PSI -14.5038F ///< Minimum value for PSI conversion #define HIGH_PRES_MAX_PSI 145.038F ///< Maximum range of pressure sensors (in PSI) @@ -99,12 +100,12 @@ // Update and convert raw pressures to mmHg currentPressureReadings[ M1_PRES ].data = convertPressureReading( getFPGAM1RawPressure(), PRES_MIN_PSI, HIGH_PRES_MAX_PSI ); currentPressureReadings[ M3_PRES ].data = convertPressureReading( getFPGAM3RawPressure(), PRES_MIN_PSI, HIGH_PRES_MAX_PSI ); - currentPressureReadings[ P8_PRES ].data = convertPressureReading( getFPGAP8RawPressure(), PRES_MIN_PSI, HIGH_PRES_MAX_PSI ); + currentPressureReadings[ P8_PRES ].data = convertPressureReading( getFPGAP8RawPressure(), PRES_MIN_PSI_ALPHA, HIGH_PRES_MAX_PSI ); currentPressureReadings[ P13_PRES ].data = convertPressureReading( getFPGAP13RawPressure(), PRES_MIN_PSI, HIGH_PRES_MAX_PSI ); currentPressureReadings[ P17_PRES ].data = convertPressureReading( getFPGAP17RawPressure(), PRES_MIN_PSI, HIGH_PRES_MAX_PSI ); - currentPressureReadings[ X1_PRES ].data = convertPressureReading( getFPGAX1RawPressure(), PRES_MIN_PSI, HIGH_PRES_MAX_PSI ); + currentPressureReadings[ X1_PRES ].data = convertPressureReading( getFPGAX1RawPressure(), PRES_MIN_PSI_ALPHA, HIGH_PRES_MAX_PSI ); currentPressureReadings[ X2_PRES ].data = convertPressureReading( getFPGAX2RawPressure(), PRES_MIN_PSI, HIGH_PRES_MAX_PSI ); - currentPressureReadings[ X3_PRES ].data = convertPressureReading( getFPGAX3RawPressure(), PRES_MIN_PSI, HIGH_PRES_MAX_PSI ); + currentPressureReadings[ X3_PRES ].data = convertPressureReading( getFPGAX3RawPressure(), PRES_MIN_PSI_ALPHA, HIGH_PRES_MAX_PSI ); currentPressureReadings[ X4_PRES ].data = convertPressureReading( getFPGAX4RawPressure(), PRES_MIN_PSI, HIGH_PRES_MAX_PSI ); // Update and convert raw pressure sensor temperatures to deg C