/* * AddFailure.hh * * Created on: 2 мар. 2023 г. * Author: titov */ #ifndef UMLIBRARY_APPLICATION_SAFETY_ADDFAILURE_HH_ #define UMLIBRARY_APPLICATION_SAFETY_ADDFAILURE_HH_ #include "../ISetupStep.hh" #include "../../processing/failure/FailureDiagnostics.hh" #include "../../systemic/IStatus.hh" #include "../../units/LogicalEntities.hpp" namespace application { namespace safety { //!Модуль регистрирует условие для диагностики отказа в соответсвующем процессе. /*!Модуль позволяет добавить отказ по заданному условию "condtion" с кодом отказа "failure_id". * Отказ будет диагностироваться во время работы процесса диагностики отказов "diagnostic". * Дополнительный статус "stored" позволяет контролировать наличие зафиксированного события отказа. */ struct AddFailure : public ISetupStep { typedef processing::failure::FailureDiagnostics FD; FD * diagnostic = nullptr; systemic::IStatus * failure_status = nullptr; struct Links { Environment::StatusId condition; //!<Условие возникновения отказа. Environment::Id diagnostic; //!<Процесс диагностики отказов. Environment::StatusId stored; //!<Состояние отказа. }; struct Setting { units::ErrorCode failure_id; //!<Идентификатор отказа. }; bool input( Environment & env ); void build( Environment & env ); const Links & links; const Setting & setting; AddFailure( const Links & links, const Setting & setting ) : links(links), setting(setting) {} }; } } #include "../../systemic/IFunctor.hh" //with reset namespace application { namespace safety { //!Модуль регистрирует условие для диагностики отказа в соответсвующем процессе. /*!Модуль позволяет добавить отказ по заданному условию "condtion" с кодом отказа "failure_id". * Отказ будет диагностироваться во время работы процесса диагностики отказов "diagnostic". * Дополнительный статус "stored" позволяет контролировать наличие зафиксированного события отказа. * Дополнительно модуль позволяет задать условие сброса отказа, которое будет проверенно в момент сброса. */ struct AddFailureWithReset : public ISetupStep { typedef processing::failure::FailureDiagnostics FD; FD * diagnostic = nullptr; systemic::IStatus * failure_status = nullptr; typedef systemic::IFunctor ResetFunction; ResetFunction * reset = nullptr; struct Links { Environment::StatusId condition; //!<Условие возникновения отказа. Environment::Id reset; //!<Функция сборса отказа. Environment::Id diagnostic; //!<Процесс диагностики отказов. Environment::StatusId stored; //!<Состояние отказа. }; struct Setting { units::ErrorCode failure_id; //!<Идентификатор отказа. }; bool input( Environment & env ); void build( Environment & env ); const Links & links; const Setting & setting; AddFailureWithReset( const Links & links, const Setting & setting ) : links(links), setting(setting) {} }; } } #endif /* UMLIBRARY_APPLICATION_SAFETY_ADDFAILURE_HH_ */