hio_1_introduction.cpp
Go to the documentation of this file.
1/** @file hio_1_introduction.cpp
2
3Tutorial, simple i/o-based controller synthesis.
4
5This tutorial uses a very simple example to exhibit
6monolithic input-/output based controller synthesis.
7The purpose is to generate graphs for the
8introduction of hiosys in the libFAUDES user
9reference, see "hiosys_index.html".
10For other purposes such as learning how to use hiosys,
11we refer to the tutorials hio_2_hiogenerators,
12hio_3_hiofunctions and hio_4_transport_unit.
13
14@ingroup Tutorials
15
16@include hio_1_introduction.cpp
17
18*/
19
20#include "libfaudes.h"
21
22// make the faudes namespace available to our program
23using namespace faudes;
24
25/////////////////
26// main program
27/////////////////
28
29int main() {
30
31 ////////////////////////////////////////////
32 // PLANT MODEL WITH INPUTS AND OUTPUTS
33 ////////////////////////////////////////////
34
35 // plant dynamics of machines 1 and 2
36 // note: only the plant-I/O port (Up,Yp) of HioPlant is used in this
37 // simple non-hierarchical example. The remaining port (Ue,Ye)
38 // is introduced as dummmy.
39 HioPlant tempgen, machine1, machine2;
40 tempgen.Read("data/1_introduction/hio_simplemachine_intro.gen");
41 tempgen.Version("1",machine1);
42 tempgen.Version("2",machine2);
43 machine1.Write("tmp_hio_machine1_intro.gen");
44 machine1.GraphWrite("tmp_hio_machine1_intro.png");
45 machine2.Write("tmp_hio_machine2_intro.gen");
46 machine2.GraphWrite("tmp_hio_machine2_intro.png");
47
48 // plant inputs up and outputs yp
49 EventSet up1, up2, yp1, yp2;
50 up1=machine1.UpEvents();
51 up2=machine2.UpEvents();
52 yp1=machine1.YpEvents();
53 yp2=machine2.YpEvents();
54
55 ////////////////////
56 // IOSHUFFLE
57 ////////////////////
58
59 // note: only the plant-I/O port (Up,Yp) of HioPlant is used in this
60 // simple non-hierarchical example. The remaining port (Ue,Ye)
61 // is introduced as dummmy.
62 HioPlant plant;
63 HioShuffle(machine1,machine2,plant);
64 // ignore marking
65 PrefixClosure(plant);
66 // cosmetics
67 StateMin(plant,plant);
68 plant.StateNamesEnabled(false);
69 //remove dummy events for file output
70 tempgen=plant;
71 Project(plant,yp1+yp2+up1+up2,tempgen);
72 tempgen.SetYp(yp1+yp2);
73 tempgen.SetUp(up1+up2);
74 tempgen.Name("HioShuffle(Simple Machine_1,Simple Machine_2)");
75 tempgen.Write("tmp_hio_ioshuffle_intro.gen");
76 tempgen.GraphWrite("tmp_hio_ioshuffle_intro.png");
77 // constraint to avoid err-states of ioshuffle
78 HioConstraint ioconstr("data/1_introduction/hio_ioconstraint_intro.gen");
79
80 ////////////////////
81 // SPECIFICATION
82 // (poses a constraint, in the non-hierarchical case)
83 ////////////////////
84
85 HioConstraint spec("data/1_introduction/hio_specification_intro.gen");
86 spec.Write("tmp_hio_specification_intro.gen");
87 spec.GraphWrite("tmp_hio_specification_intro.png");
88 // compose constraint and specification to compound requirement to be met by controller
89 Parallel(spec,ioconstr,spec);
90 // in the hierarchical case, the actual specification is formulated over additional alphabets.
91 // here, this spec and according alphabets and constraint are introduced as dummies
92 HioPlant dummy_spec;
93 Idx ds1=dummy_spec.InsInitState();
94 dummy_spec.SetMarkedState(ds1);
95 EventSet dummy_yc, dummy_uc;
96 dummy_yc.Insert("yc");
97 dummy_uc.Insert("uc");
98 HioConstraint dummy_constraint;
99 ds1=dummy_constraint.InsInitState();
100 dummy_constraint.SetMarkedState(ds1);
101
102 ////////////////////
103 // SYNTHESIS
104 ////////////////////
105
106 // note: only the controller-I/O port (Up,Yp) of HioController is used in this
107 // simple non-hierarchical example. The remaining port (Uc,Yc)
108 // is introduced as dummmy.
109 HioController controller;
110 HioSynthUnchecked(plant,dummy_spec,dummy_constraint,spec,dummy_yc,dummy_uc,yp1+yp2,up1+up2,plant.YeEvents(),plant.UeEvents(),controller);
111
112 // remove dummies yc,uc,ye,ue
113 Project(controller,yp1+up1+yp2+up2,controller);
114 // restore event attributes
115 controller.SetYp(yp1+yp2);
116 controller.SetUp(up1+up2);
117 controller.Write("tmp_hio_controller_intro.gen");
118
119 ////////////////////
120 // CLOSED LOOP
121 ////////////////////
122 Generator closedloop;
123 Parallel(plant,controller,closedloop);
124 // remove dummy events
125 Project(closedloop,yp1+up1+yp2+up2,closedloop);
126 closedloop.Write("tmp_hio_closedloop_intro.gen");
127
128 ////////////////////
129 // COMPARE WITH SCT
130 ////////////////////
131
132 // remove nonphysical io events
133 Generator supervisor;
134 EventSet alphabeta;
135 alphabeta.Insert("alpha_1");
136 alphabeta.Insert("alpha_2");
137 alphabeta.Insert("beta_1");
138 alphabeta.Insert("beta_2");
139 Project(closedloop,alphabeta,supervisor);
140 supervisor.Write("tmp_hio_physical_intro.gen");
141 // -> should lead to same supervisor as in Synthesis PlugIn example !
142
143 return 0;
144}
145
146
147
const std::string & Name(void) const
bool Insert(const Idx &rIndex)
void SetYp(Idx index)
Definition hio_plant.h:1033
EventSet UeEvents(void) const
Definition hio_plant.h:1252
EventSet UpEvents(void) const
Definition hio_plant.h:1118
void SetUp(Idx index)
Definition hio_plant.h:1058
EventSet YpEvents(void) const
Definition hio_plant.h:1107
EventSet YeEvents(void) const
Definition hio_plant.h:1241
void Read(const std::string &rFileName, const std::string &rLabel="", const Type *pContext=0)
void Write(const Type *pContext=0) const
void SetMarkedState(Idx index)
bool StateNamesEnabled(void) const
void GraphWrite(const std::string &rFileName, const std::string &rOutFormat="", const std::string &rDotExec="dot") const
virtual void Version(const std::string &rVersion, vGenerator &rResGen) const
void StateMin(const Generator &rGen, Generator &rResGen)
void PrefixClosure(Generator &rGen)
void Project(const Generator &rGen, const EventSet &rProjectAlphabet, Generator &rResGen)
void Parallel(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
void HioSynthUnchecked(const Generator &rPlant, const Generator &rSpec, const Generator &rExtConstr, const Generator &rLocConstr, const EventSet &rYc, const EventSet &rUc, const EventSet &rYp, const EventSet &rUp, const EventSet &rYel, const EventSet &rUel, Generator &rController)
void HioShuffle(const Generator &rPlantA, const Generator &rPlantB, const EventSet &rYp, const EventSet &rUp, const EventSet &rYe, const EventSet &rUe, Generator &rIOShuffAB)
int main()
uint32_t Idx

libFAUDES 2.33k --- 2025.09.16 --- c++ api documentaion by doxygen