DEFINITION MODULE GroupMac; IMPORT EVENT, PROCS, STAT, RES; EXPORT QUALIFIED Num, ExtNum, EnsMach, Direction, Politique, DureeFonc, DureeRepar, Groupe, Create, Delete; (* FROM NUM IMPORT LONGREAL; *) CONST Nmax = 30; (* Nombre maximum de machines permis. *) TYPE Num = [1..Nmax]; (* Numero de machine. *) ExtNum = [0..Nmax]; EnsMach = SET OF ExtNum; (* Un ensemble de machines. *) Direction = (Gauche, Droite); Groupe = POINTER TO InfoGroupe; (* Un groupe de machines avec un robot.*) Politique = PROCEDURE (Groupe) : ExtNum; (* Une politique de commande du robot. *) (* Retourne 0 : repare mach. devant lui; *) (* Retourne 0 < i <= N : va vers i. *) DureeFonc = PROCEDURE () : LONGREAL; (* Type de proc. pour retourner *) (* une duree de fonctionnement. *) DureeRepar = PROCEDURE (VAR BOOLEAN) : LONGREAL; (* Retourne une duree de repar. et met *) (* Succes a TRUE ssi la repar. a reussi. *) InfoGroupe = RECORD N : Num; (* Nb. de machines. *) NbOK : ExtNum; (* Nb. de machines qui fonctionnent. *) Pos : LONGREAL; (* Position courante du robot. *) TDepart : LONGREAL; (* Instant de la derniere mise-a-jour *) (* de Pos, si le robot voyage. *) Dir : Direction; (* Derniere direction de deplacement. *) Devant : ExtNum; (* Si > 0, le robot est en face de la *) (* mach. i, sinon il est entre 2 mach. *) Dest : ExtNum; (* Si > 0, le robot va vers cette machine *) (* (ou s'y trouve), si = 0, il repare *) (* la machine en face de lui. *) EnPanne : EnsMach; (* Ensemble des machines en panne. *) Decision : Politique; (* Regle de decision utilisee. *) DFonc : DureeFonc; (* Genere une duree de fonctionnement. *) DRepar : DureeRepar; (* Une duree de reparation par le robot. *) DReparMan : DureeRepar; (* Une duree de rep. par le reparateur. *) Reparateur : RES.Resource; (* Le reparateur affecte a ce groupe. *) Prod : STAT.Block; (* Bloc stat. sur la productivite. *) Robot : PROCS.ProcessInstance; Machine : ARRAY Num OF PROCS.ProcessInstance; AvisArrivee : EVENT.EventNotice (* Arriv. prevue du robot a une mach.*) END; PROCEDURE Create ( VAR G : Groupe; N, Devant : Num; Decision : Politique; DFonc : DureeFonc; DRepar : DureeRepar; DReparMan : DureeRepar; Reparateur : RES.Resource ); (* Cree le groupe de machines G, et initialise les champs du RECORD *) (* aux valeurs passees en parametres. *) PROCEDURE Delete (VAR G : Groupe); (* Detruit le groupe de machines G et recupere l'espace. *) END GroupMac.