diag_decentralizeddiagnosis.h
Go to the documentation of this file.
1 /** @file diag_decentralizeddiagnosis.h
2 Functions to check a system's decentralized diagnosability.
3 */
4 
5 #ifndef DIAG_DECENTRALIZEDDIAGNOSIS_H
6 #define DIAG_DECENTRALIZEDDIAGNOSIS_H
7 
8 #include <vector>
9 #include "corefaudes.h"
10 #include "op_include.h"
11 #include "diag_generator.h"
12 #include "diag_languagediagnosis.h"
13 #include "diag_attrdiagstate.h"
14 #include "diag_attrfailureevents.h"
15 #include "diag_attrfailuretypes.h"
16 #include "diag_attrlabelset.h"
17 
18 #include "diag_debug.h"
19 
20 namespace faudes {
21 
22 //////////////////////////////////////////////////////////////////////////////////
23 // Verifier State for Co-diagnosability
24 /////////////////////////////////////////////////////////////////////////////////
25 
27  std::vector<Idx> mSpec1State;
31 
32 
33  CoVerifierState(Idx number = 0, Idx state2 = 0, Idx state3 = 0, VerifierStateLabel label = NORMAL){ mSpec1State = std::vector<Idx>(number); mSpec2State = state2; mPlantState = state3; mLabel = label; }
35 
36  bool operator< (const CoVerifierState& rOther) const{
37  for(Idx i = 0; i < mSpec1State.size(); i++){
38  if(mSpec1State.at(i) < rOther.mSpec1State.at(i) )
39  return true;
40  else if(mSpec1State.at(i) > rOther.mSpec1State.at(i) )
41  return false;
42  }
43  if(mSpec2State < rOther.mSpec2State)
44  return true;
45  else if(mSpec2State > rOther.mSpec2State)
46  return false;
47  if(mPlantState < rOther.mPlantState)
48  return true;
49  else
50  return false;
51  }
52 };
53 
54 
55 ///////////////////////////////////////////////////////////////////////////////
56 // Functions for decentralized diagnosability
57 ///////////////////////////////////////////////////////////////////////////////
58 
59 /** @name Functions (decentralized diagnosability) */
60 /** @{ doxygen group */
61 
62 
63 /**
64 Checks co-diagnosability for a system G with respect to the specification K and the local observation alphabets rAlphabets.
65 @param rGen
66  Plant automaton.
67 @param rSpec
68  Specification automaton.
69 @param rAlphabets
70  Local observation alphabets (for decentralized diagnosis)
71 @param rReportString
72  User-readable information of violating condition (in case of negative test result).
73 @return
74  True if system G is co-diagnosable.
75 @ingroup DiagnosisPlugIn
76 */
77 extern FAUDES_API bool IsCoDiagnosable(const System& rGen, const Generator& rSpec, const std::vector<const EventSet*>& rAlphabets, std::string& rReportString);
78 
79 /** @} doxygen group */
80 
81 
82 
83 /**
84 Computes decentralized diagnosers for multiple local sites.
85 @param rGen
86  Plant automaton.
87 @param rSpec
88  Specification automaton.
89 @param rAlphabets
90  Observable events of the local sites.
91 @param rDiags
92  Decentralized diagnosers
93 @param rReportString
94  User-readable information of violating condition (in case of negative test result).
95 @exception Exception
96  - Number of alphabets does not equal number of local sites (id 305).
97 @return
98  True if system G is co-diagnosable.
99  The result is allocated on the heap, ownership is with the calling function.
100 @ingroup DiagnosisPlugIn
101 */
102 extern FAUDES_API bool DecentralizedDiagnoser(const System& rGen, const Generator& rSpec, const std::vector<const EventSet*>& rAlphabets, std::vector<Diagnoser*>& rDiags, std::string& rReportString);
103 
104 /** @name Functions (modular diagnoser computation) */
105 /** @{ doxygen group */
106 
107 /** Function that computes decentralized diagnosers for the respective subsystems of a composed (modular) system
108  * @param rGens
109  * Local subsystem automata
110 @param rSpec
111  Specification automaton.
112 @param rDiags
113  Decentralized diagnosers
114 @param rReportString
115  User-readable information of violating condition (in case of negative test result).
116 @exception Exception
117  - Number of modular components does not equal number of decentralized diagnosers (id 306).
118  @ingroup DiagnosisPlugIn
119  */
120 extern FAUDES_API void DecentralizedModularDiagnoser(const std::vector<const System*>& rGens, const Generator& rSpec, std::vector<Diagnoser*>& rDiags, std::string& rReportString);
121 
122 /** @} doxygen group */
123 
124 /**
125  * Function definition for run-time interface
126  */
127 extern FAUDES_API bool IsCoDiagnosable(const System& rGen, const Generator& rSpec, const EventSetVector& rAlphabets);
128 
129 /**
130  * Function definition for run-time interface
131  */
132 extern FAUDES_API bool DecentralizedDiagnoser(const System& rGen, const Generator& rSpec, const EventSetVector& rAlphabets, GeneratorVector& rDiags);
133 
134 /**
135  * Function definition for run-time interface
136  */
137 extern FAUDES_API void DecentralizedModularDiagnoser(const SystemVector& rGens, const Generator& rSpec, GeneratorVector& rDiags);
138 
139 
140 ///////////////////////////////////////////////////////////////////////////////
141 // Further Auxiliary Functions
142 ///////////////////////////////////////////////////////////////////////////////
143 
144 /**
145 Parallel composition of multiple generators.
146 @param rGens
147  STL-vector of generators.
148 @param rResGen
149  Output variable for the resulting product generator.
150 */
151 void cParallel(const std::vector<const System*>& rGens, System& rResGen);
152 
153 
154 } // namespace faudes
155 
156 #endif
#define FAUDES_API
Interface export/import symbols: windows.
Definition: cfl_platform.h:81
Vector template.
Generator with controllability attributes.
Base class of all FAUDES generators.
Includes all libFAUDES headers, no plugins.
State estimates for the current status of the generator (as state attributes).
Failure and indicator events for a common failure type.
Contains the failure and indicator partition for a system (used as global attribute).
Label representation for state estimates.
Includes debugging to diagnosis plug-in.
Structure of diagnosers and methods to handle them.
Functions to check a system's diagnosability with respect to a specification automaton and compute a ...
void DecentralizedModularDiagnoser(const std::vector< const System * > &rGens, const Generator &rSpec, std::vector< Diagnoser * > &rDiags, std::string &rReportString)
Function that computes decentralized diagnosers for the respective subsystems of a composed (modular)...
bool DecentralizedDiagnoser(const System &rGen, const Generator &rSpec, const std::vector< const EventSet * > &rAlphabets, std::vector< Diagnoser * > &rDiags, std::string &rReportString)
Computes decentralized diagnosers for multiple local sites.
libFAUDES resides within the namespace faudes.
uint32_t Idx
Type definition for index type (allways 32bit)
bool IsCoDiagnosable(const System &rGen, const Generator &rSpec, const vector< const EventSet * > &rAlphabets, std::string &rReportString)
void cParallel(const std::vector< const System * > &rGens, System &rResGen)
Parallel composition of multiple generators.
Includes all observer plugin headers.
CoVerifierState(const CoVerifierState &rOther)
bool operator<(const CoVerifierState &rOther) const
CoVerifierState(Idx number=0, Idx state2=0, Idx state3=0, VerifierStateLabel label=NORMAL)

libFAUDES 2.32b --- 2024.03.01 --- c++ api documentaion by doxygen