tp_1_tgenerator.cppGo to the documentation of this file.00001 /** @file tp_1_tgenerator.cpp 00002 00003 Tutorial, class faudes::TimedGenerator. This tutorial demonstrates 00004 basic maintenance of TimedGenerator objects 00005 00006 @ingroup Tutorials 00007 00008 @include tp_1_tgenerator.cpp 00009 00010 */ 00011 00012 #include "libfaudes.h" 00013 #include "tp_include.h" 00014 00015 00016 // make the faudes namespace available to our program 00017 using namespace faudes; 00018 00019 00020 00021 ///////////////// 00022 // main program 00023 ///////////////// 00024 00025 int main() { 00026 00027 //////////////////////////////////////////////////// 00028 // constructor and file io 00029 // EventSets 00030 //////////////////////////////////////////////////// 00031 00032 // Create an empty TimedGenerator object 00033 TimedGenerator g1; 00034 00035 // Create a TimedGenerator by reading a TimedGenerator file 00036 TimedGenerator g2("data/tsimplemachine.gen"); 00037 00038 // Create a TimedGenerator by reading a Generator file (no timing, no control) 00039 TimedGenerator g3("data/simplemachine.gen"); 00040 00041 // Read a TimedGenerator from a System file (no timing) 00042 g1.Read("data/csimplemachine.gen"); 00043 00044 // Copy a Generator to a TimedGenerator (no timing, no control) 00045 TimedGenerator g4; 00046 Generator g5("data/simplemachine.gen"); 00047 g4.Assign(g5); 00048 00049 // Write the TimedGenerator to a files 00050 g1.Write("tmp_tsimplemachine1.gen"); 00051 g2.Write("tmp_tsimplemachine2.gen"); 00052 g3.Write("tmp_tsimplemachine3.gen"); 00053 g4.Write("tmp_tsimplemachine4.gen"); 00054 00055 // See result on console 00056 std::cout << "######################################\n"; 00057 std::cout << "# tc simple machine (\n"; 00058 g2.DWrite(); 00059 std::cout << "######################################\n"; 00060 00061 // Test protocol 00062 FAUDES_TEST_DUMP("construct g1",g1); 00063 FAUDES_TEST_DUMP("construct g2",g2); 00064 FAUDES_TEST_DUMP("construct g3",g3); 00065 FAUDES_TEST_DUMP("construct g4",g4); 00066 00067 00068 //////////////////////////////////////////////////// 00069 // access to controllability status of events 00070 // 00071 // (using System methods) 00072 //////////////////////////////////////////////////// 00073 00074 // Retrieve an EventSet containing all the controllabe events 00075 00076 EventSet cevents = g2.ControllableEvents(); 00077 00078 // See result on console 00079 std::cout << "######################################\n"; 00080 std::cout << "# controllabel events\n"; 00081 cevents.DWrite(); 00082 std::cout << "######################################\n"; 00083 00084 // Test protocol 00085 FAUDES_TEST_DUMP("contr attrib",cevents); 00086 00087 00088 //////////////////////////////////////////////////// 00089 // access/edit timing 00090 //////////////////////////////////////////////////// 00091 00092 // Insert a clock to tcsimplemachine 00093 g2.InsClock("cRepair"); 00094 00095 // Read clocks from tcsimplemachine and set them for csimplemachine 00096 ClockSet clocks = g2.Clocks(); 00097 00098 // Report 00099 std::cout << "######################################\n"; 00100 std::cout << "# tcsimple machine clocks \n"; 00101 clocks.DWrite(); 00102 std::cout << "######################################\n"; 00103 00104 00105 // Add constraints to invariant 00106 TimeConstraint inv; 00107 inv.Insert("cRepair",ElemConstraint::LessEqual,20); 00108 g2.InsInvariant("down", inv); 00109 00110 // Add constraints to guard and a reset 00111 TransSet::Iterator tit; 00112 tit=g2.FindTransition("down","lambda","idle"); 00113 if(tit==g2.TransRelEnd()) {}; // not found 00114 TimeConstraint guard; 00115 guard.Insert("cRepair",ElemConstraint::GreaterEqual,10); 00116 g2.InsGuard(*tit, guard); 00117 tit=g2.FindTransition("busy","mue","down"); 00118 if(tit==g2.TransRelEnd()) {}; // not found 00119 ClockSet resets; 00120 resets.Insert("cRepair"); 00121 g2.InsResets(*tit, resets); 00122 00123 // Fix name 00124 g2.Name("tc simple machine with timed repair"); 00125 00126 // Report 00127 std::cout << "######################################\n"; 00128 std::cout << "# tcsimple machine with timed repair \n"; 00129 g2.DWrite(); 00130 g2.ActiveClocks().DWrite(); 00131 std::cout << "######################################\n"; 00132 00133 // Copy to g1 and remove a clock 00134 g1=g2; 00135 g1.DelClock("cBusy"); 00136 00137 // Report 00138 std::cout << "######################################\n"; 00139 std::cout << "# tcsimple machine with untimed busy \n"; 00140 g1.DWrite(); 00141 g1.ActiveClocks().DWrite(); 00142 std::cout << "######################################\n"; 00143 00144 00145 // Test protocol 00146 FAUDES_TEST_DUMP("edit timing 1",g1); 00147 FAUDES_TEST_DUMP("edit timing 2",g2); 00148 00149 00150 // Read clocks from tcsimplemachine and set them for csimplemachine 00151 std::cout << "######################################\n"; 00152 std::cout << "# csimple machine (active clocks) \n"; 00153 g3.InsClocks(g2.ActiveClocks()); 00154 std::cout << g3.Clocks().ToString() << "\n"; 00155 00156 // Read invriants from tcsimplemachine and set them for csimplemachine 00157 std::cout << "######################################\n"; 00158 std::cout << "# csimple machine (invariants) \n"; 00159 StateSet::Iterator sit; 00160 for(sit=g2.StatesBegin(); sit!=g2.StatesEnd(); sit++) { 00161 TimeConstraint invariant = g2.Invariant(*sit); 00162 std::string state = g2.StateName(*sit); 00163 std::cout << state << " inv " << invariant.ToString() << "\n"; 00164 g3.Invariant(state, invariant); 00165 } 00166 00167 // Read guards and resets from tcsimplemachine and set them for csimplemachine 00168 std::cout << "######################################\n"; 00169 std::cout << "# csimple machine (guards and resets) \n"; 00170 TransSet::Iterator stit, dtit; 00171 for(stit=g2.TransRelBegin(); stit!= g2.TransRelEnd(); stit++) { 00172 std::cout << "src transition: " << g2.TStr(*stit) << "\n"; 00173 std::cout << "guard: " << g2.Guard(*stit).ToString() << "\n"; 00174 std::cout << "resets: " << g2.Resets(*stit).ToString() << "\n"; 00175 dtit=g3.FindTransition(g2.StateName(stit->X1),g2.EventName(stit->Ev),g2.StateName(stit->X2)); 00176 g3.Guard(*dtit,g2.Guard(*stit)); 00177 g3.Resets(*dtit,g2.Resets(*stit)); 00178 } 00179 00180 // Report 00181 std::cout << "######################################\n"; 00182 std::cout << "# csimple machine with timing \n"; 00183 g3.DWrite(); 00184 std::cout << "######################################\n"; 00185 00186 00187 // Check validiy (internal names and symboltables) 00188 if(g3.Valid()) 00189 std::cout << "############# valid #################\n"; 00190 00191 // Test protocol 00192 FAUDES_TEST_DUMP("edit timing 3",g3); 00193 00194 return 0; 00195 } 00196 00197 00198 libFAUDES 2.23h --- 2014.04.03 --- c++ api documentaion by doxygen |