op_mc.h

Go to the documentation of this file.
00001 /** @file op_mc.h 
00002 
00003 Method to verify mutual controllability for two given generators.
00004 A definition of mutual controllability is given in 
00005 S.-H. Lee and K. C. Wong, “Structural decentralised control of concurrent
00006 DES,” European Journal of Control, vol. 35, pp. 1125-1134,2002.
00007 */
00008 
00009 /* FAU Discrete Event Systems Library (libfaudes)
00010 
00011    Copyright (C) 2006  Bernd Opitz
00012    Exclusive copyright is granted to Klaus Schmidt
00013 
00014    This library is free software; you can redistribute it and/or
00015    modify it under the terms of the GNU Lesser General Public
00016    License as published by the Free Software Foundation; either
00017    version 2.1 of the License, or (at your option) any later version.
00018 
00019    This library is distributed in the hope that it will be useful,
00020    but WITHOUT ANY WARRANTY; without even the implied warranty of
00021    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00022    Lesser General Public License for more details.
00023 
00024    You should have receive a copy of the GNU Lesser General Public
00025    License along with this library; if not, write to the Free Software
00026    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */
00027 
00028 
00029   
00030 #include "corefaudes.h"
00031 #include "syn_include.h"
00032 #include "op_debug.h"
00033 
00034 #ifndef FAUDES_OP_MC_H
00035 #define FAUDES_OP_MC_H
00036 
00037 
00038 
00039 namespace faudes {
00040 
00041 /**
00042  * Verification of mutual controllability.
00043  * This function checks if two generators are mutually controllable w.r.t. each other.
00044  * A definition of mutual controllability is given in 
00045  * S.-H. Lee and K. C. Wong, “Structural decentralised control of concurrent
00046  * DES,” European Journal of Control, vol. 35, pp. 1125-1134,2002.
00047  *
00048  * @param rGen1
00049  *   Generator 1
00050  * @param rGen2 
00051  *   Generator 2
00052  *
00053  * @result
00054  *   True if mutual controllability is fulfilled
00055  *
00056  *
00057  * <h4>Example: </h4>
00058  * <p> Violation of mutual controllability </p>
00059  * <table> 
00060  * <tr> <td> rGen1 </td>  <td>  rGen2 </td> </tr>
00061  * <tr>
00062  * <td> @image html ex_mc1.png </td>
00063  * <td> @image html ex_mc2.png </td>
00064  * </tr>
00065  * </table> 
00066  * <p> Mutual controllability is fulfilled </p>
00067  * <table>
00068  * <tr> <td> rGen3 </td>  <td>  rGen2 </td> </tr>
00069  * <tr>
00070  * <td> @image html ex_mc3.png </td>
00071  * <td> @image html ex_mc2.png </td>
00072  * </tr>
00073  * </table> 
00074  *
00075  * @ingroup ObserverPlugin
00076  */
00077 bool IsMutuallyControllable(const System& rGen1, const System& rGen2);
00078 
00079 /**
00080  * Verification of mutual controllability.
00081  * This function checks if two generators are mutually controllable w.r.t. each other.
00082  * Additionally, this function provides the states where mutual controllability fails
00083  * in case the condition is violated. 
00084  *
00085  * @param rGen1
00086  *   Generator 1
00087  * @param rGen2 
00088  *   Generator 2
00089  * @param rForbidden1
00090  *   Forbidden states in Generator 1
00091  * @param rForbidden2
00092  *   Forbidden states in Generator 2
00093  *
00094  * @result
00095  *   True if mutual controllability is fulfilled
00096  */
00097 bool IsMutuallyControllable(const System& rGen1, const System& rGen2, StateSet& rForbidden1, StateSet& rForbidden2);
00098 
00099 /**
00100  * RTI wrapper
00101  */
00102 void IsMutuallyControllable(const System& rGen1, const System& rGen2, bool& rRes);
00103 
00104 
00105 } // namespace faudes
00106 
00107 #define FAUDES_OP_MC_H
00108 #endif 

libFAUDES 2.23h --- 2014.04.03 --- c++ api documentaion by doxygen