Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r867521a9810f2218c34d96164fab614494a63f8d -r3414e47b2664c56ab6b2f0cd5cd6b30ae9a5e333 --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 867521a9810f2218c34d96164fab614494a63f8d) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 3414e47b2664c56ab6b2f0cd5cd6b30ae9a5e333) @@ -100,6 +100,10 @@ static DG_BICARB_CONCENTRATES_RECORD_T bicarbConcentrateCalRecord; ///< Bicarb concentrate calibration record. static DG_CONC_PUMPS_CAL_RECORD_T concentratePumpsCalRecord; ///< Concentrate pumps calibration record. +static F32 cp1PulsetemporaryRemove; +static F32 cp2PulsetemporaryRemove; + + // ********** private function prototypes ********** static void stopConcentratePump( CONCENTRATE_PUMPS_T pumpId ); @@ -142,7 +146,8 @@ initPersistentAlarm( ALARM_ID_CP1_SPEED_CONTROL_ERROR, CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD, CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD ); initPersistentAlarm( ALARM_ID_CP2_SPEED_CONTROL_ERROR, CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD, CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD ); - initPersistentAlarm( ALARM_ID_DG_CONC_PUMP_HALL_SENSOR_OUT_OF_RANGE, CONCENTRATE_PUMP_HALL_SENSORS_OUT_OF_RANGE_TIME_MS, CONCENTRATE_PUMP_HALL_SENSORS_OUT_OF_RANGE_TIME_MS ); + initPersistentAlarm( ALARM_ID_DG_CONC_PUMP_HALL_SENSOR_OUT_OF_RANGE, CONCENTRATE_PUMP_HALL_SENSORS_OUT_OF_RANGE_TIME_MS, + CONCENTRATE_PUMP_HALL_SENSORS_OUT_OF_RANGE_TIME_MS ); } /*********************************************************************//** @@ -176,12 +181,8 @@ SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_CONCENTRATE_PUMP_FAULT, fpgaConcentratePumpsFault ); } - if ( ( concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].execState != CONCENTRATE_PUMP_OFF_STATE ) && - ( concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].execState != CONCENTRATE_PUMP_OFF_STATE ) ) - { - calcMeasuredPumpsSpeed( CONCENTRATEPUMPS_CP1_ACID, getFPGACP1HallSensePulseWidth() ); - calcMeasuredPumpsSpeed( CONCENTRATEPUMPS_CP2_BICARB, getFPGACP2HallSensePulseWidth() ); - } + calcMeasuredPumpsSpeed( CONCENTRATEPUMPS_CP1_ACID, getFPGACP1HallSensePulseWidth() ); + calcMeasuredPumpsSpeed( CONCENTRATEPUMPS_CP2_BICARB, getFPGACP2HallSensePulseWidth() ); // Get CP1 specifications U08 cp1Direction = concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].direction; @@ -200,6 +201,9 @@ data.cp1State = concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].execState; data.cp2State = concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].execState; + data.cp1PulseInSeconds = cp1PulsetemporaryRemove; + data.cp2PulseInSeconds = cp2PulsetemporaryRemove; + #ifndef DISABLE_DIALYSATE_CHECK F32 cp1Error = fabs( getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP1_ACID ) - concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].currentPumpSpeed ) / concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].currentPumpSpeed; F32 cp2Error = fabs( getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP2_BICARB ) - concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].currentPumpSpeed ) / concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].currentPumpSpeed; @@ -587,20 +591,36 @@ *************************************************************************/ static void calcMeasuredPumpsSpeed( CONCENTRATE_PUMPS_T pumpId, U16 pulseWidthCount ) { - F32 pulseWidthInSecond = ( (F32)pulseWidthCount * CONCENTRATE_PUMP_HALL_SENSE_PERIOD_RESOLUTION ) / US_PER_SECOND; - BOOL isPulseWidthOut = ( pulseWidthInSecond <= (F32)CONCENTRATE_PUMP_MIN_ALLOWED_HALL_SENSOR_COUNT ? TRUE : FALSE ); + if ( ( concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].execState != CONCENTRATE_PUMP_OFF_STATE ) && + ( concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].execState != CONCENTRATE_PUMP_OFF_STATE ) ) + { + F32 pulseWidthInMicroSecond = (F32)pulseWidthCount * CONCENTRATE_PUMP_HALL_SENSE_PERIOD_RESOLUTION; + BOOL isPulseWidthOut = ( pulseWidthInMicroSecond <= (F32)CONCENTRATE_PUMP_MIN_ALLOWED_HALL_SENSOR_COUNT ? TRUE : FALSE ); - // TODO remove this line once the below code is tested - concentratePumps[ pumpId ].measuredPumpSpeed.data = ( 1.0 / pulseWidthInSecond ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE * SEC_PER_MIN; + // TODO once the pulse is figured out remove this code + if ( CONCENTRATEPUMPS_CP1_ACID == pumpId ) + { + cp1PulsetemporaryRemove = pulseWidthInMicroSecond; + } + else + { + cp2PulsetemporaryRemove = pulseWidthInMicroSecond; + } + // TODO once the pulse is figured out remove this code - // TODO will implement in DEN-12224 - //checkPersistentAlarm( ALARM_ID_DG_CONC_PUMP_HALL_SENSOR_OUT_OF_RANGE, isPulseWidthOut, pulseWidthInSecond, CONCENTRATE_PUMP_MIN_ALLOWED_HALL_SENSOR_COUNT ); + checkPersistentAlarm( ALARM_ID_DG_CONC_PUMP_HALL_SENSOR_OUT_OF_RANGE, isPulseWidthOut, pulseWidthInMicroSecond, + CONCENTRATE_PUMP_MIN_ALLOWED_HALL_SENSOR_COUNT ); - //if ( FALSE == isPulseWidthOut ) - //{ - // concentratePumps[ pumpId ].measuredPumpSpeed.data = ( 1.0 / pulseWidthInSecond ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE * SEC_PER_MIN; - //} - // TODO will implement in DEN-12224 + if ( FALSE == isPulseWidthOut ) + { + concentratePumps[ pumpId ].measuredPumpSpeed.data = ( US_PER_SECOND / pulseWidthInMicroSecond ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE * SEC_PER_MIN; + } + } + else + { + // Clear the alarm + checkPersistentAlarm( ALARM_ID_DG_CONC_PUMP_HALL_SENSOR_OUT_OF_RANGE, FALSE, 0, CONCENTRATE_PUMP_MIN_ALLOWED_HALL_SENSOR_COUNT ); + } if ( CONCENTRATE_PUMP_ZERO_FLOW_RATE == pulseWidthCount ) { Index: firmware/App/Controllers/ConcentratePumps.h =================================================================== diff -u -r867521a9810f2218c34d96164fab614494a63f8d -r3414e47b2664c56ab6b2f0cd5cd6b30ae9a5e333 --- firmware/App/Controllers/ConcentratePumps.h (.../ConcentratePumps.h) (revision 867521a9810f2218c34d96164fab614494a63f8d) +++ firmware/App/Controllers/ConcentratePumps.h (.../ConcentratePumps.h) (revision 3414e47b2664c56ab6b2f0cd5cd6b30ae9a5e333) @@ -50,6 +50,8 @@ F32 cp2MeasuredSpeed; ///< Concentrate pump CP2 measured speed U32 cp1State; ///< Concentrate pump CP1 current state U32 cp2State; ///< Concentrate pump CP2 current state + F32 cp1PulseInSeconds; + F32 cp2PulseInSeconds; } CONCENTRATE_PUMP_DATA_T; // ********** public function prototypes ********** Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -r867521a9810f2218c34d96164fab614494a63f8d -r3414e47b2664c56ab6b2f0cd5cd6b30ae9a5e333 --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 867521a9810f2218c34d96164fab614494a63f8d) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 3414e47b2664c56ab6b2f0cd5cd6b30ae9a5e333) @@ -94,12 +94,13 @@ static OVERRIDE_F32_T compensatedConductivityValues[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Latest compensated conductivity values. static F32 rawConductivityValues[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Latest raw conductivity values. static F32 roRejectionRatio; ///< Latest RO rejection ratio. +static U32 sensorStatus[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Latest sensor hardware status. static OVERRIDE_U32_T conductivityDataPublishInterval = { COND_SENSOR_REPORT_PERIOD, COND_SENSOR_REPORT_PERIOD, 0, 0 }; ///< Conductivity sensors publish time interval override. static U32 conductivityDataPublicationTimerCounter; ///< Conductivity sensors data publish timer counter. -static BOOL packageStarted = FALSE; ///< Flag to indicate the start of a package measurement data. +static BOOL packageStarted; ///< Flag to indicate the start of a package measurement data. static U08 packageIndex; ///< Current package measurement data bytes index. static U08 package[ 50 ]; ///< Storage of package bytes until ready to process. static DG_COND_SENSORS_CAL_RECORD_T condSensorsCalRecord; ///< Conductivity sensors' calibration record. @@ -125,21 +126,22 @@ void initConductivitySensors( void ) { U32 i; + roRejectionRatio = 0.0; packageIndex = 0U; + packageStarted = FALSE; conductivityDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; for ( i = 0; i < NUM_OF_CONDUCTIVITY_SENSORS; i++ ) { - readCount[ i ] = 0; - internalErrorCount[ i ] = 0; + readCount[ i ] = 0; + internalErrorCount[ i ] = 0; + rawConductivityValues[ i ] = 0.0; - compensatedConductivityValues[ i ].data = 0.0; - compensatedConductivityValues[ i ].ovData = 0.0; + compensatedConductivityValues[ i ].data = 0.0; + compensatedConductivityValues[ i ].ovData = 0.0; compensatedConductivityValues[ i ].ovInitData = 0.0; - compensatedConductivityValues[ i ].override = OVERRIDE_RESET; - - rawConductivityValues[ i ] = 0.0; + compensatedConductivityValues[ i ].override = OVERRIDE_RESET; } setFPGACPiProbeType( COND_CPI_SENSOR_PROBE_TYPE ); @@ -193,6 +195,11 @@ data.cd1Raw = rawConductivityValues[ CONDUCTIVITYSENSORS_CD1_SENSOR ]; data.cd2Raw = rawConductivityValues[ CONDUCTIVITYSENSORS_CD2_SENSOR ]; + data.cpiSensorStatus = sensorStatus[ CONDUCTIVITYSENSORS_CPI_SENSOR ]; + data.cpoSensorStatus = sensorStatus[ CONDUCTIVITYSENSORS_CPO_SENSOR ]; + data.cd1SensorStatus = sensorStatus[ CONDUCTIVITYSENSORS_CD1_SENSOR ]; + data.cd2SensorStatus = sensorStatus[ CONDUCTIVITYSENSORS_CD2_SENSOR ]; + broadcastData( MSG_ID_DG_CONDUCTIVITY_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( CONDUCTIVITY_DATA_T ) ); } } @@ -348,9 +355,9 @@ { if ( ( readCount[ sensorId ] != fpgaReadCount ) ) { - F32 const temperature = getTemperatureValue( associateTempSensor[ sensorId ] ); - F32 const conductivity = ( (F32)( fgpaRead ) / COND_SENSOR_DECIMAL_CONVERSION ); - F32 const compensatedCond = calcCompensatedConductivity( conductivity, temperature ); + F32 temperature = getTemperatureValue( associateTempSensor[ sensorId ] ); + F32 conductivity = ( (F32)( fgpaRead ) / COND_SENSOR_DECIMAL_CONVERSION ); + F32 compensatedCond = calcCompensatedConductivity( conductivity, temperature ); readCount[ sensorId ] = fpgaReadCount; internalErrorCount[ sensorId ] = 0; @@ -422,7 +429,8 @@ static void processMeasurementDataPackage( U32 sensorId ) { EMSTAT_VARIABLE_T const * const measurementPtr = (EMSTAT_VARIABLE_T *)&package; - U32 status = hexStrToDec( (U08 *)&measurementPtr->status, sizeof( measurementPtr->status ) ); + U32 status = hexStrToDec( (U08 *)&measurementPtr->status, sizeof( measurementPtr->status ) ); + sensorStatus[ sensorId ] = status; if ( EMSTAT_PICO_GOOD_STATUS == status ) { @@ -441,8 +449,9 @@ } else { - // TODO ucomment this looks like we get bad status several times - //checkPersistentAlarm( ALARM_ID_DG_CONDUCTIVITY_SENSOR_BAD_STATUS, TRUE, status, EMSTAT_PICO_GOOD_STATUS ); +#ifndef DISABLE_COND_STATUS_CHECK + checkPersistentAlarm( ALARM_ID_DG_CONDUCTIVITY_SENSOR_BAD_STATUS, TRUE, status, EMSTAT_PICO_GOOD_STATUS ); +#endif } if ( EMSTAT_PICO_TIMING_NOT_MET_STATUS == status ) Index: firmware/App/Controllers/ConductivitySensors.h =================================================================== diff -u -ra9315539f527b92523b1598ff91e47db4d71dae2 -r3414e47b2664c56ab6b2f0cd5cd6b30ae9a5e333 --- firmware/App/Controllers/ConductivitySensors.h (.../ConductivitySensors.h) (revision a9315539f527b92523b1598ff91e47db4d71dae2) +++ firmware/App/Controllers/ConductivitySensors.h (.../ConductivitySensors.h) (revision 3414e47b2664c56ab6b2f0cd5cd6b30ae9a5e333) @@ -79,6 +79,10 @@ F32 cpoRaw; ///< CPo raw conductivity sensor value (without 2% temperature compensated) F32 cd1Raw; ///< CD1 raw conductivity sensor value (without 2% temperature compensated) F32 cd2Raw; ///< CD2 raw conductivity sensor value (without 2% temperature compensated) + U32 cpiSensorStatus; ///< CPi conductivity sensor status + U32 cpoSensorStatus; ///< CPo conductivity sensor status + U32 cd1SensorStatus; ///< CD1 conductivity sensor status + U32 cd2SensorStatus; ///< CD2 conductivity sensor status } CONDUCTIVITY_DATA_T; // ********** public function prototypes ********** Index: firmware/App/DGCommon.h =================================================================== diff -u -r867521a9810f2218c34d96164fab614494a63f8d -r3414e47b2664c56ab6b2f0cd5cd6b30ae9a5e333 --- firmware/App/DGCommon.h (.../DGCommon.h) (revision 867521a9810f2218c34d96164fab614494a63f8d) +++ firmware/App/DGCommon.h (.../DGCommon.h) (revision 3414e47b2664c56ab6b2f0cd5cd6b30ae9a5e333) @@ -55,6 +55,7 @@ #define IGNORE_CONC_PUMP_IN_HEAT_DISINFECT 1 // Not needed // #define NEW_FMD_FLOW_SENSOR 1 // Not needed #define DISABLE_HEATERS_EFFICIENCY 1 + #define DISABLE_COND_STATUS_CHECK 1 /// Build switch #define DISABLE_DISINFECT_CONDUCTIVITY 1 // Implement // #define DISABLE_CONC_PUMPS 1 // #define DISABLE_CAP_SWITCHES 1 // Implement Index: firmware/App/Modes/ModeChemicalDisinfect.c =================================================================== diff -u -r867521a9810f2218c34d96164fab614494a63f8d -r3414e47b2664c56ab6b2f0cd5cd6b30ae9a5e333 --- firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision 867521a9810f2218c34d96164fab614494a63f8d) +++ firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision 3414e47b2664c56ab6b2f0cd5cd6b30ae9a5e333) @@ -1884,18 +1884,18 @@ { if ( ++rsrvrFillStableTimeCounter >= RSRVRS_FULL_STABLE_TIME_COUNT ) { - status = DG_RESERVOIR_REACHED_TARGET; + status = DG_RESERVOIR_REACHED_TARGET; rsrvrFillStableTimeCounter = 0; // Set the state timer in case it needs to be used for another timeout check - stateTimer = getMSTimerCount(); + stateTimer = getMSTimerCount(); } } else if ( TRUE == didTimeout( stateTimer, timeout ) ) { // Failed to fill ontime. Update the previous chemical disinfect state and transition to basic cancellation - prevChemDisinfectState = chemDisinfectState; + prevChemDisinfectState = chemDisinfectState; alarmDetectedPendingTrigger = ALARM_ID_DG_RESERVOIR_FILL_TIMEOUT; - status = DG_RESERVOIR_NOT_REACHED_TARGET; + status = DG_RESERVOIR_NOT_REACHED_TARGET; } return status;