140 lines
3.4 KiB
Text
140 lines
3.4 KiB
Text
|
|
|
|
type level = None | Low | Normal | High | Bad
|
|
type elevel = Zero| Un | Deux | Trois | Quatre | Cinq
|
|
type wSize = NonW | Norm | Larg
|
|
|
|
|
|
|
|
node metrics(input :level) returns (st :level)
|
|
let
|
|
automaton
|
|
state Normal
|
|
do st = Normal;
|
|
unless (input = Low) then Low
|
|
| (input = High) then High
|
|
| (input = Bad) then Bad
|
|
|
|
state High
|
|
do st = High;
|
|
unless (input = Low) then Low
|
|
| (input = Normal) then Normal
|
|
| (input = Bad) then Bad
|
|
|
|
|
|
state Low
|
|
do st = Low;
|
|
unless (input = Normal) then Normal
|
|
| (input = High) then High
|
|
| (input = Bad) then Bad
|
|
|
|
|
|
state Bad
|
|
do st = Bad;
|
|
unless (input = Low) then Low
|
|
| (input = High) then High
|
|
| (input = Normal) then Normal
|
|
|
|
end
|
|
tel
|
|
|
|
|
|
|
|
node trackeur (s, c1, c2, e : bool) returns (res: int; wEx: elevel; win : wSize; running : bool)
|
|
let
|
|
automaton
|
|
state Off
|
|
do res = 0;
|
|
wEx = Zero;
|
|
win = NonW;
|
|
running = false;
|
|
unless (s & c1) then Untrackeur_nf
|
|
| (s & c2) then Untrackeur_lf
|
|
|
|
state Untrackeur_nf
|
|
do res = 1;
|
|
wEx = Cinq;
|
|
win = Norm;
|
|
running = true;
|
|
unless (e) then Off
|
|
| (not c1 & c2) then Untrackeur_lf
|
|
|
|
state Untrackeur_lf
|
|
do res = 2;
|
|
wEx = Quatre;
|
|
win = Larg;
|
|
running = true;
|
|
unless (e) then Off
|
|
| (c1 & not c2) then Untrackeur_nf
|
|
|
|
end
|
|
tel
|
|
|
|
|
|
|
|
|
|
node tracking(i_objvt, i_deadline, i_indice :level; s, e : bool)
|
|
returns (objectives:bool; st_objvt, st_deadline, st_indice :level; res: int; wEx: elevel; win : wSize; running : bool)
|
|
|
|
contract
|
|
assume true
|
|
enforce objectives
|
|
with ( c3, c1, c2 :bool)
|
|
|
|
var increase_window_size, speed_up:bool;
|
|
sst_objvt, sst_deadline : level;
|
|
winbis : wSize;
|
|
wExbis : elevel;
|
|
st_objvtbis, st_deadlinebis : level;
|
|
let
|
|
st_objvt = st_objvtbis;
|
|
st_deadline = st_deadlinebis;
|
|
|
|
sst_objvt = (None fby st_objvtbis) ;
|
|
sst_deadline = (None fby st_deadlinebis);
|
|
|
|
increase_window_size = (not (st_objvtbis = High & not ((NonW fby winbis) = NonW)) or not (winbis = Norm));
|
|
speed_up = (not (st_deadlinebis = Low & ((Zero fby wExbis) = Cinq)) or not (wExbis = Cinq)) &
|
|
(not (st_deadlinebis = Low & ((Zero fby wExbis) = Quatre)) or not (wExbis = Cinq));
|
|
objectives = (speed_up) & increase_window_size;
|
|
|
|
|
|
st_objvtbis = inlined metrics(i_objvt);
|
|
st_deadlinebis = inlined metrics(i_deadline);
|
|
st_indice = inlined metrics(i_indice);
|
|
(res, wExbis, winbis, running) = inlined trackeur (s, c1, c2, e);
|
|
|
|
win = winbis;
|
|
wEx = wExbis;
|
|
|
|
|
|
tel
|
|
|
|
|
|
|
|
|
|
(*
|
|
|
|
|
|
reax -s -a 'sB:d={P:D}' --triang tracking_ctrln/tracking.ctrln
|
|
|
|
|
|
./clean
|
|
clear && heptc -hepts -s tracking -target c -target ctrln tracking.ept
|
|
reax -a 'sS:d={I:D}' --triang tracking_ctrln/tracking.ctrln && ctrl2ept -n Tracking.tracking
|
|
heptc -target c tracking_controller.ept
|
|
|
|
|
|
|
|
PDW=$(pwd)
|
|
gcc -o sim -I/home/ctrl-a/.opam/4.02.3/lib/heptagon/c/ -I$PDW/tracking_c -I$PDW/tracking_controller_c -I$PDW/tracking_c tracking_c/_main.c tracking_c/tracking.c tracking_c/tracking_types.c tracking_controller_c/tracking_controller.c tracking_controller_c/tracking_controller_types.c
|
|
hepts -mod Tracking -node tracking -exec ./sim
|
|
|
|
|
|
PDW=$(pwd)
|
|
gcc -o sim -I/home/ctrl-a/.opam/4.02.3/lib/heptagon/c/ -I$PDW/tracking_c -I$PDW/tracking_c tracking_c/_main.c tracking_c/tracking.c tracking_c/tracking_types.c
|
|
hepts -mod tracking -node tracking -exec ./sim
|
|
|
|
*)
|
|
|
|
|