| |
libFAUDES
Sections
Index
|
diag_decentralizeddiagnosis.hGo to the documentation of this file.00001 /** @file diag_decentralizeddiagnosis.h 00002 Functions to check a system's decentralized diagnosability. 00003 */ 00004 00005 #ifndef DIAG_DECENTRALIZEDDIAGNOSIS_H 00006 #define DIAG_DECENTRALIZEDDIAGNOSIS_H 00007 00008 #include <vector> 00009 #include "corefaudes.h" 00010 #include "op_include.h" 00011 #include "diag_generator.h" 00012 #include "diag_languagediagnosis.h" 00013 #include "diag_attrdiagstate.h" 00014 #include "diag_attrfailureevents.h" 00015 #include "diag_attrfailuretypes.h" 00016 #include "diag_attrlabelset.h" 00017 00018 #include "diag_debug.h" 00019 00020 namespace faudes { 00021 00022 ////////////////////////////////////////////////////////////////////////////////// 00023 // Verifier State for Co-diagnosability 00024 ///////////////////////////////////////////////////////////////////////////////// 00025 00026 struct CoVerifierState{ 00027 std::vector<Idx> mSpec1State; 00028 Idx mSpec2State; 00029 Idx mPlantState; 00030 VerifierStateLabel mLabel; 00031 00032 00033 CoVerifierState(Idx number = 0, Idx state2 = 0, Idx state3 = 0, VerifierStateLabel label = NORMAL){ mSpec1State = std::vector<Idx>(number); mSpec2State = state2; mPlantState = state3; mLabel = label; } 00034 CoVerifierState(const CoVerifierState& rOther){ mSpec1State = rOther.mSpec1State; mSpec2State = rOther.mSpec2State; mPlantState = rOther.mPlantState; mLabel = rOther.mLabel;} 00035 00036 bool operator< (const CoVerifierState& rOther) const{ 00037 for(Idx i = 0; i < mSpec1State.size(); i++){ 00038 if(mSpec1State.at(i) < rOther.mSpec1State.at(i) ) 00039 return true; 00040 else if(mSpec1State.at(i) > rOther.mSpec1State.at(i) ) 00041 return false; 00042 } 00043 if(mSpec2State < rOther.mSpec2State) 00044 return true; 00045 else if(mSpec2State > rOther.mSpec2State) 00046 return false; 00047 if(mPlantState < rOther.mPlantState) 00048 return true; 00049 else 00050 return false; 00051 } 00052 }; 00053 00054 00055 /////////////////////////////////////////////////////////////////////////////// 00056 // Functions for decentralized diagnosability 00057 /////////////////////////////////////////////////////////////////////////////// 00058 00059 /** @name Functions (decentralized diagnosability) */ 00060 /** @{ doxygen group */ 00061 00062 00063 /** 00064 Checks co-diagnosability for a system G with respect to the specification K and the local observation alphabets rAlphabets. 00065 @param rGen 00066 Plant automaton. 00067 @param rKsubs 00068 Specification automaton. 00069 @param rAlphabets 00070 Local observation alphabets (for decentralized diagnosis) 00071 @param rReportString 00072 User-readable information of violating condition (in case of negative test result). 00073 @return 00074 True if system G is co-diagnosable. 00075 @ingroup DiagnosisPlugIn 00076 */ 00077 bool IsCoDiagnosable(const cGenerator& rGen, const Generator& rSpec, const std::vector<const EventSet*>& rAlphabets, std::string& rReportString); 00078 00079 /** @} doxygen group */ 00080 00081 00082 00083 /** 00084 Computes decentralized diagnosers for multiple local sites. 00085 @param rGen 00086 Plant automaton. 00087 @param rSpec 00088 Specification automaton. 00089 @param rAlphabets 00090 Observable events of the local sites. 00091 @param rDiags 00092 Decentralized diagnosers 00093 @param rReportString 00094 User-readable information of violating condition (in case of negative test result). 00095 @exception Exception 00096 - Number of alphabets does not equal number of local sites (id 305). 00097 @return 00098 True if system G is co-diagnosable. 00099 The result is allocated on the heap, ownership is with the calling function. 00100 @ingroup DiagnosisPlugIn 00101 */ 00102 bool ComputeDecentralizedDiagnoser(const cGenerator& rGen, const Generator& rSpec, const std::vector<const EventSet*>& rAlphabets, std::vector<diagGenerator*>& rDiags, std::string& rReportString); 00103 00104 /** @name Functions (modular diagnoser computation) */ 00105 /** @{ doxygen group */ 00106 00107 /** Function that computes decentralized diagnosers for the respective subsystems of a composed (modular) system 00108 * @param rGens 00109 * Local subsystem automata 00110 @param rSpec 00111 Specification automaton. 00112 @param rDiags 00113 Decentralized diagnosers 00114 @param rReportString 00115 User-readable information of violating condition (in case of negative test result). 00116 @exception Exception 00117 - Number of modular components does not equal number of decentralized diagnosers (id 306). 00118 @ingroup DiagnosisPlugIn 00119 */ 00120 void ComputeDecentralizedModularDiagnoser(const std::vector<const cGenerator*>& rGens, const Generator& rSpec, std::vector<diagGenerator*>& rDiags, std::string& rReportString); 00121 00122 /** @} doxygen group */ 00123 00124 /** 00125 * Function definition for run-time interface 00126 */ 00127 void IsCoDiagnosable(const cGenerator& rGen, const Generator& rSpec, const EventSetVector& rAlphabets, bool& rRes); 00128 00129 /** 00130 * Function definition for run-time interface 00131 */ 00132 bool IsCoDiagnosable(const cGenerator& rGen, const Generator& rSpec, const EventSetVector& rAlphabets); 00133 00134 /** 00135 * Function definition for run-time interface 00136 */ 00137 bool ComputeDecentralizedDiagnoser(const cGenerator& rGen, const Generator& rSpec, const EventSetVector& rAlphabets, GeneratorVector& rDiags); 00138 00139 /** 00140 * Function definition for run-time interface 00141 */ 00142 void ComputeDecentralizedDiagnoser(const cGenerator& rGen, const Generator& rSpec, const EventSetVector& rAlphabets, GeneratorVector& rDiags, bool& rRes); 00143 00144 /** 00145 * Function definition for run-time interface 00146 */ 00147 void ComputeDecentralizedModularDiagnoser(const cGeneratorVector& rGens, const Generator& rSpec, GeneratorVector& rDiags); 00148 00149 /** 00150 * Function definition for run-time interface 00151 */ 00152 //void ComputeModularDiagnoser(const cGeneratorVector& rGsubs, const GeneratorVector& rKsubs, GeneratorVector& rDiagsubs, bool& rRes); 00153 00154 /////////////////////////////////////////////////////////////////////////////// 00155 // Further Auxiliary Functions 00156 /////////////////////////////////////////////////////////////////////////////// 00157 00158 /** 00159 Parallel composition of multiple generators. 00160 @param rGens 00161 STL-vector of generators. 00162 @param rResGen 00163 Output variable for the resulting product generator. 00164 */ 00165 void cParallel(const std::vector<const cGenerator*>& rGens, cGenerator& rResGen); 00166 00167 00168 } // namespace faudes 00169 00170 #endif |
libFAUDES 2.14g --- 2009-12-3 --- c++ source docu by doxygen 1.5.6