/** * @file State_Fail.cpp * @brief Implementation of the FailState class. * @author Emmanuel Hernandez Cruz * @date 2025-09-05 * * This file contains the implementation for the FailState, which defines * the behavior of the equipment when it has entered a fault condition. */ #include "ModbusPoints/Modbus_Point.h" #include "Equipment/Equipment.h" #include "Strategies/Strategy_Ramp.h" #include "Strategies/Strategy_SingleValue.h" #include "Strategies/Strategy_PID.h" #include "States/State_Standby.h" #include "States/State_Running.h" #include "States/State_Fail.h" #if defined(USE_MODBUS_IP) #include #else #include #endif /** * @brief Constructs a new FailState object with a list of active alarms. * * This constructor receives a list of alarm descriptions and creates strategies * to set the corresponding Modbus points to a value of 1, indicating an * active alarm. It also initializes a PID strategy for the 'CW Valve Position' * to maintain its state during the fault. * @param activeAlarms A vector of strings, where each string is the * description of a Modbus point to be set as an active alarm. */ template<> FailState::FailState(const std::vector& activeAlarms) { // Simulate a failure: set common alarm and a specific fan alarm. } /** * @brief Executes the fail state's logic for one update cycle. * * This method checks the "Alarm Reset" Modbus point for a command to * transition back to Standby, which would typically happen after a fault * is cleared by a user. If no transition is requested, it continues to apply * the failure strategies (e.g., keeping alarm bits active). * * @param equipment Pointer to the Equipment instance. * @return A pointer to a new State if a transition should occur, otherwise nullptr. */ template<> State* FailState::update(Equipment* equipment) { // STATE control, add conditions if change to a different state is needed Serial.println("Fail update function"); _applyStrategies(equipment); return nullptr; } /** * @brief Logic to execute once when entering the fail state. * Sets the "Alarm Common" point to 1 to indicate a general fault condition. * @param equipment Pointer to the Equipment instance. */ template<> void FailState::enterState(Equipment* equipment) { // Logic to run when the equipment enters this state Serial.println("Enter Fail State..."); } /** * @brief Logic to execute once when exiting the fail state. * Clears the "Alarm Common" point to 0 before transitioning to the next state. * @param equipment Pointer to the Equipment instance. */ template<> void FailState::exitState(Equipment* equipment) { // Cleanup logic to run when the equipment leaves this state Serial.println("Exit Fail State..."); }