// node vanne // state debit : [0,2]; // init debit := 0; // event inc, dec; // trans // debit < 2 |- inc -> debit := debit + 1; // debit > 0 |- dec -> debit := debit - 1; // edon node Vanne state debit : [0,2]; state panne : bool; init debit := 0; init panne := false; event inc, dec, estEnPanne, estRepare; trans ~panne |- inc -> debit := debit + 1; ~panne |- dec -> debit := debit - 1; // La panne est une transition comme les autres // elle intervien de maniere non deterministe // comme le Zabbix ~panne |- inc -> panne := true; ~panne |- dec -> panne := true; panne |- inc -> ; panne |- dec -> ; debit = 0 |- dec ->; debit = 2 |- inc ->; edon node Cuve state niveau : [0,4]; flow amont: [0,4]; aval: [0,2]; init niveau := 2; event time; trans // On modelise exactement ce qui est dit dans l'énoncé amont > aval |- time -> niveau := niveau + 1; amont < aval |- time -> niveau := niveau - 1; amont = aval & amont = 0 |- time ->; amont = aval & amont = 0 |- time -> niveau := niveau + 1; amont = aval & amont = 0 |- time -> niveau := niveau - 1; amont = aval & amont = 0 |- time ->; edon node Controlleur edon node Systeme sub // Valves amont Am: Vanne[2]; //Valve Aval Av: Vanne; C: Cuve; Ctrl: Controlleur; assert C.amont = (Am[0].debit + Am[1].debit); C.aval = Av.debit; sync // d decremente, i incrémente, n nop ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; edon