hio_3_hiofunctions.cpp
Go to the documentation of this file.
1/** @file hio_3_hiofunctions.cpp
2
3Tutorial, functions provided by hiosys plugin.
4
5@ingroup Tutorials
6
7@include hio_3_hiofunctions.cpp
8
9*/
10
11#include "libfaudes.h"
12
13// make the faudes namespace available to our program
14using namespace faudes;
15using namespace std;
16
17/** simple machine example to demonstrate I/O controller synthesis */
19
20 /*
21 % Simple machine example for hiosys-tutorial.
22 % Machine sends YP-event "A_wait" to operator.
23 % Does nothing after UP-event "A_stp", or executes
24 % the process "A_do", which requires a shared
25 % resource from the environment, modelled by
26 % "A_req". The environment may provide or
27 % deny access to the resource ("A_pack" or
28 % "A_nack", respectively).
29 */
30
31 // read plant A model
32 HioPlant plantA;
33 plantA.Read("data/3_hiofunctions/hio_simplemachine_A.gen");
34 plantA.GraphWrite("tmp_hio_simplemachine_A.png");
35 // must be in I/O plant form
36 if(!IsHioPlantForm(plantA)){
37 std::stringstream errstr;
38 errstr << "plant A not in HioPlantForm.\n";
39 throw Exception("simpleMachine", errstr.str(), 0);
40 }
41
42 /*
43 % Environment constraint:
44 % Resources are always provided as requested.
45 */
46 // read plant A environment constraint
47 HioConstraint SeA;
48 SeA.Read("data/3_hiofunctions/hio_simpleEnvConstr_A.gen");
49 //should be in I/O constraint form:
50 if(!IsHioConstraintForm(SeA)) {
51 std::cout<<"Warning: environment constraint A not in I/O constraint form.";
52 }
53 SeA.GraphWrite("tmp_hio_simpleEnvConstr_A.png");
54
55 /*
56 % Operator constraint:
57 % simple machine is complete and YP-life wrt. to the
58 % environment constraint and a minimal operator
59 % constraint, which - for convenience - can be
60 % modelled by an epsilon language HioConstraint.
61 */
62 // construct epsilon language operator constraint
63 HioConstraint SpA;
64 Idx init=SpA.InsInitState();
65 SpA.SetMarkedState(init);
66
67 // first, we synthesise a controller for the single plant A:
68/*============================================================================
69================ CONTROLLER SYNTHESIS FOR MONOLITHIC PLANT =============
70==============================================================================*/
71
72 /*
73 % Specification:
74 % Send YC-event "A_READY" as feedback to operator.
75 % Accept UC-events "A_STANDBY" or "A_OPERATE" as
76 % operator inputs.
77 % Command "A_STANDBY": do nothing.
78 % Command "A_OPERATE": Process two resources.
79 */
80 HioPlant specA;
81 specA.Read("data/3_hiofunctions/hio_simplespec_A.gen");
82 specA.GraphWrite("tmp_hio_simplespec_A.png");
83
84 /*
85 % external operator constraint:
86 % also specification A is complete and YP-life wrt. to the
87 % environment constraint and a minimal operator
88 % constraint.
89 */
90 // construct epsilon language external operator constraint
91 HioConstraint ScA;
92 init=ScA.InsInitState();
93 ScA.SetMarkedState(init);
94
95 // run controller synthesis algorithm
96 HioController controllerA;
97 HioSynthMonolithic(plantA,specA,ScA,SpA,SeA,controllerA);
98 FAUDES_TEST_DUMP("HioSynthMonolithic",controllerA);
99 controllerA.Write("tmp_hio_simpleController_A.gen");
100 controllerA.GraphWrite("tmp_hio_simpleController_A.png");
101
102 // now, we synthesise a controller for two plants A and B:
103/*============================================================================
104===================== HIERARCHICAL CONTROLLER SYNTHESIS =================
105==============================================================================*/
106
107 /*
108 % Machine B Sends YP-event "B_wait" to operator.
109 % Does nothing after UP-event "B_stp", or executes
110 % the process "B_do", which produces a shared
111 % resource provided to the environment, modelled
112 % by "B_prov". The environment may or may not
113 % accept the resource ("B_pack" or "B_nack",
114 % respectively).
115 */
116
117 // read plant B model
118 HioPlant plantB;
119 plantB.Read("data/3_hiofunctions/hio_simplemachine_B.gen");
120 plantB.GraphWrite("tmp_hio_simplemachine_B.png");
121 // must be in I/O plant form
122 if(!IsHioPlantForm(plantB)){
123 std::stringstream errstr;
124 errstr << "plant B not in HioPlantForm.\n";
125 throw Exception("simpleMachine", errstr.str(), 0);
126 }
127
128 /*
129 % Environment constraint:
130 % Resources are always provided as requested.
131 */
132 // read plant A environment constraint
133 HioConstraint SeB;
134 SeB.Read("data/3_hiofunctions/hio_simpleEnvConstr_B.gen");
135 if(!IsHioConstraintForm(SeB)) {
136 std::cout<<"Warning: environment constraint B not in I/O constraint form.";
137 }
138 SeB.GraphWrite("tmp_hio_simpleEnvConstr_B.png");
139
140 /*
141 % Operator constraint:
142 % simple machine B is complete and YP-life wrt. to the
143 % environment constraint and a minimal operator
144 % constraint, which - for convenience - can be
145 % modelled by an epsilon language HioConstraint.
146 */
147 // construct epsilon language operator constraint
148 HioConstraint SpB;
149 init=SpB.InsInitState();
150 SpB.SetMarkedState(init);
151
152 /*===============================================
153 I/O SHUFFLE OF PLANT A AND PLANT B
154 =================================================*/
155
156 HioPlant ioShuffleAB;
157 HioShuffle(plantA,plantB,ioShuffleAB);
158 FAUDES_TEST_DUMP("HioShuffle",ioShuffleAB);
159 ioShuffleAB.Write("tmp_hio_simpleHioShuffle_AB.gen");
160 ioShuffleAB.GraphWrite("tmp_hio_simpleHioShuffle_AB.png");
161
162 // compose constraints of plant A and B_do
163 HioConstraint intConstrAB;
164 Parallel(SpA,SpB,intConstrAB);
165 Parallel(intConstrAB,SeA,intConstrAB);
166 Parallel(intConstrAB,SeB,intConstrAB);
167 intConstrAB.StateNamesEnabled(false);
168
169 /*===============================================
170 ENVIRONMENT MODEL FOR PLANT AB
171 =================================================*/
172 /*
173 % Simple machine example for hiosys-tutorial.
174 % Environment:
175 % A request of machine A (A_req) for a resource is
176 % denied (A_nack) until machine B provides it
177 % (B_prov, B_pack). Then, machine A has to request
178 % the resource until machine B can provide the next
179 % one. A resource provided by machine B and
180 % requested by machine A is readily processed
181 % and can be provided to the external
182 % environment (AB_prov), which may or may not
183 % accept the processed resource (AB_pack,
184 % AB_nack).
185 */
186 HioEnvironment envAB("data/3_hiofunctions/hio_simpleenvironment_AB.gen");
187 envAB.GraphWrite("tmp_hio_simpleenvironment_AB.png");
188
189 /*
190 % Environment constraint:
191 % Processed resources are always accepted as provided.
192 */
193 // read plant A environment constraint
194 HioConstraint SlAB;
195 SlAB.Read("data/3_hiofunctions/hio_simpleEnvConstr_AB.gen");
196 if(!IsHioConstraintForm(SlAB)) {
197 std::cout<<"Warning: environment constraint AB not in I/O constraint form.";
198 }
199 SlAB.GraphWrite("tmp_hio_simpleEnvConstr_AB.png");
200
201 /*====================================================
202 SPECIFICATION AND EXTERNAL OPERATOR CONSTRAINT
203 ======================================================*/
204 /*
205 % Simple machine example for hiosys-tutorial.
206 % Specification:
207 % Send YC-event "AB_READY" as feedback to operator.
208 % Accept UC-events "AB_STANDBY" or "AB_OPERATE" as
209 % operator inputs.
210 % Command "AB_STANDBY": do nothing.
211 % Command "AB_OPERATE": Provide processed resource (AB_prov).
212 */
213 HioPlant specAB;
214 specAB.Read("data/3_hiofunctions/hio_simplespec_AB.gen");
215 specAB.GraphWrite("tmp_hio_simplespec_AB.png");
216
217 /*
218 % external operator constraint:
219 % also specification AB is complete and YP-life wrt. to the
220 % environment constraint and a minimal operator
221 % constraint.
222 */
223 // construct epsilon language external operator constraint
224 HioConstraint ScAB;
225 init=ScAB.InsInitState();
226 ScAB.SetMarkedState(init);
227
228 // run controller synthesis algorithm
229 HioController controllerAB;
230 HioSynthHierarchical(ioShuffleAB,envAB,specAB,intConstrAB,ScAB,SlAB,controllerAB);
231 FAUDES_TEST_DUMP("HioSynthHierarchical",controllerAB);
232 controllerAB.Write("tmp_hio_simpleController_AB.gen");
233 controllerAB.GraphWrite("tmp_hio_simpleController_AB.png");
234
235 return;
236}
237
238
239/** Run the tutorial */
240int main() {
241 // call simple machine example
242 try {
244 }
245 catch (Exception& e) {
246 std::cout << "function: " << e.Where() << std::endl;
247 std::cout << "exception description: " << e.What() << std::endl;
248 std::cout << "exception id: " << e.Id() << std::endl;
249}
250 return 0;
251}
#define FAUDES_TEST_DUMP(mes, dat)
Definition cfl_utils.h:505
virtual const char * What() const
virtual unsigned int Id() const
virtual const char * Where() const
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
void Parallel(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
void HioSynthMonolithic(const HioPlant &rPlant, const HioPlant &rSpec, const HioConstraint &rSc, const HioConstraint &rSp, const HioConstraint &rSe, HioController &rController)
void HioSynthHierarchical(const HioPlant &rHioShuffle, const HioEnvironment &rEnvironment, const HioPlant &rSpec, const Generator &rIntConstr, const HioConstraint &rSc, const HioConstraint &rSl, HioController &rController)
void HioShuffle(const Generator &rPlantA, const Generator &rPlantB, const EventSet &rYp, const EventSet &rUp, const EventSet &rYe, const EventSet &rUe, Generator &rIOShuffAB)
void simpleMachine()
int main()
uint32_t Idx
bool IsHioConstraintForm(HioConstraint &rHioConstraint, StateSet &rQY, StateSet &rQU, EventSet &rErrEvSet, TransSet &rErrTrSet, StateSet &rErrStSet, std::string &rReportStr)
bool IsHioPlantForm(HioPlant &rHioPlant, StateSet &rQYpYe, StateSet &rQUp, StateSet &rQUe, EventSet &rErrEvSet, TransSet &rErrTrSet, StateSet &rErrStSet, std::string &rReportStr)
Definition hio_plant.cpp:16

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