

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.

