Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r6f2991204047ccbceeb5461f7c35af6d8f5dfd0b -r7d4711edd7b40cd3e29f43e766f79a8a09586fe9 --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 6f2991204047ccbceeb5461f7c35af6d8f5dfd0b) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 7d4711edd7b40cd3e29f43e766f79a8a09586fe9) @@ -1,19 +1,20 @@ /************************************************************************** * -* Copyright (c) 2020-2022 Diality Inc. - All Rights Reserved. +* Copyright (c) 2020-2024 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 Valves.c * -* @author (last) Dara Navaei -* @date (last) 18-Oct-2022 +* @author (last) Vinayakam Mani +* @date (last) 26-Sep-2023 * * @author (original) Sean * @date (original) 06-May-2020 * ***************************************************************************/ +#include // For memcpy #include "FPGA.h" #include "MessageSupport.h" @@ -33,7 +34,7 @@ #define ENERGIZED 1 ///< 1 for energized valve. #define ALL_VALVES_DEENERGIZED 0x0000 ///< 0 in U16 bit field for all valves. -#define MAX_VALVE_STATE_MISMATCH_COUNT 3 ///< Maximum number of times commanded valves state can fail to match read back valve states in a row. +#define MAX_VALVE_STATE_MISMATCH_TIMER_COUNT (100 / TASK_PRIORITY_INTERVAL ) ///< Maximum time commanded valves state can fail to match read back valve states in a row. #define VALVES_STATE_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval ( ms / task time) at which valves states are published on CAN bus. #define DATA_PUBLISH_COUNTER_START_COUNT 50 ///< Data publish counter start count. @@ -53,7 +54,7 @@ static U32 valvesStatesPublicationTimerCounter; ///< Timer counter used to schedule valve state publication to CAN bus. static U16 commandedValvesStates = ALL_VALVES_DEENERGIZED; ///< Initialize commanded valves states bit field. -static U32 valveStateMismatchCounter; ///< Initialize valve state mismatch counter. +static U32 valveStateMismatchTimerCounter; ///< Initialize valve state mismatch timer. static U32 pendingValveStateChanges[ NUM_OF_VALVES ]; ///< Delayed (pending) valve state changes. static U32 pendingValveStateChangeCountDowns[ NUM_OF_VALVES ]; ///< Delayed (pending) valve state change count down timers (in task intervals). @@ -102,8 +103,8 @@ memset( &vpiTime, 0, sizeof( VPI_OPEN_CLOSE_TIME_T ) ); - valveStateMismatchCounter = 0; - commandedValvesStates = fromU32ArrayToU16(); + valveStateMismatchTimerCounter = 0; + commandedValvesStates = fromU32ArrayToU16(); setFPGAValveStates( commandedValvesStates ); // initially set all valves to de-energized state via FPGA valvesStatesPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; // reset valves states publication timer @@ -124,15 +125,15 @@ // Verify read back FPGA valve states match last commanded valve states if ( readValvesStates != commandedValvesStates ) { - valveStateMismatchCounter++; // increment valve state mismatch counter by 1 - if ( valveStateMismatchCounter > MAX_VALVE_STATE_MISMATCH_COUNT ) + valveStateMismatchTimerCounter++; // increment valve state mismatch counter by 1 + if ( valveStateMismatchTimerCounter > MAX_VALVE_STATE_MISMATCH_TIMER_COUNT ) { - activateAlarmNoData( ALARM_ID_VALVE_CONTROL_FAILURE ); + activateAlarmNoData( ALARM_ID_DG_VALVE_CONTROL_FAILURE ); } } else { - valveStateMismatchCounter = 0; + valveStateMismatchTimerCounter = 0; } // Handle pending delayed valve state changes @@ -473,6 +474,12 @@ case VRF: name = ( DEENERGIZED == valveState ? VALVE_STATE_R2_C_TO_NO : VALVE_STATE_R1_C_TO_NC ); break; + +#ifndef _VECTORCAST_ + default: + name = ( DEENERGIZED == valveState ? VALVE_STATE_CLOSED : VALVE_STATE_OPEN ); + break; +#endif } } else @@ -525,7 +532,7 @@ data.valvesSensedState[ i ] = (U08)getValveStateName( (VALVES_T)i ); } - broadcastData( MSG_ID_DG_VALVES_STATES, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( DG_VALVES_DATA_T ) ); + broadcastData( MSG_ID_DG_VALVES_STATES_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( DG_VALVES_DATA_T ) ); valvesStatesPublicationTimerCounter = 0; }