Opérations sur le système piloté


o Les opérations en général
o Les opérations de transfert

Une opération est une entité qui permet de spécifier la nature et les modalités d'un changement d'état d'un système piloté.

Les classes d'opérations dans un domaine d'application sont des instances d'une seule des trois classes UnitGranulatedOperation, QuantityGranulatedOperation et TimeGranulatedOperation, qui sont elles-mêmes des particularisations de la classe générale Operation.

descripteurs :
Les descripteurs de type int représentent un nombre d'unités de temps simulé, à partir du début de la simulation (voir DIESE : Manuel de l'utilisateur). La valeur par défaut est en dernière colonne.

\noindent
INSTRUCTION_CONTAINER instructionContainer l'instruction 'mère' PrimitiveActivity*
OPERATED_ENTITY_ID opEntId symbole de classe int 0 (O_ENTITY)
de l'entité opérée
STEP step pas de progression de l'effet int 1
PROGRESSION_MODE progMode mode de progression C_ProgressionModeId UNIT
SUSPENSION_THRESHOLD suspThreshold seuil de suspension int 100
PRIORITY_DEGREE priorityDegree degre de priorité int 99 (la plus faible)
REQUIRED_RESOURCES reqResources ressources requises pEntityTab* NULL
ACHIEVEMENT_DEGREE achievementDegree degré de progression float
SITUATION situation état de l'opération C_StateId DORMANT
BEG_DATE begDate date de début int -9
END_DATE endDate date de fin int -9
LAST_RESTARTING_DATE restartDate date de la dernière reprise int -9
DURATION durée de début à fin int 0
NET_DURATION durée hors suspensions int 0

méthodes :

\noindent
STATE_TRANSITION_PROCEDURE stateTransitionProcedure procédure de transition d'état EntityPredicate
FEASIBILITY_CONDITION feasibilityCondition condition de faisabilité EntityPredicate

Le constructeur d'une classe d'opérations dans un domaine d'application doit spécifier le changement d'état du système que provoque l'opération. A cet effet, il doit comporter un appel qui affecte un corps à la méthode de la classe Operation, dite 'procédure de transition d'état' dont le symbole est STATE_TRANSITION_PROCEDURE :

\BTab4 AssignBody(STATE_TRANSITION_PROCEDURE, f);

f est une fonction écrite par le développeur.

Le corps de f exploite normalement son argument pM, qui est la méthode dont f est le corps. f a donc accès, notamment :

\BTab4 bool f (EntityMethod pM) {

\BTab4 Entity* pObj = pM->GetEntityArgValue(OPERATION_TARGET);

\BTab4 float x = pObj->GetFloatValue(TEMPERATURE);

\BTab4 x = x * 1.1;

\BTab4 pObj->SetValue(TEMPERATURE, x);

\BTab4

\BTab4 return TRUE;

\BTab4 \; }

Le corps de la procédure de transition d'état renvoie TRUE dans le cas général. Seulement pour les opérations de transfert (voir le paragraphe dédié), la valeur renvoyée est FALSE pour indiquer que le transfert n'a pas pu être réalisé comme spécifié.

C'est le moteur de simulation qui se charge d'invoquer la procédure de transition d'état ainsi affectée à l'opération. Il le fait à chaque pas de progression de l'opération (voir plus loin la définition du pas). De plus, à chaque pas, le moteur détermine le nombre d'invocations nécessaires et l'entité, valeur de l'argument OPERATION_TARGET, celle dont l'opération change l'état durant ce pas. Cette détermination est faite de manière spécifique à chacune des trois particularisations de la classe Operation, comme décrit ci-après.

Pour chaque instruction dans le jeu choisi (voir ...), la méthode de symbole ACT_INSTRUCTION_LIST de l'OperatingSystem accède à l'instance d'Operation et lui associe un processus continu, instance de la classe prédéfinie ProceedOperation, qui va prendre en charge la progression dans le temps de l'effet de l'opération.

Une fois construit, le processus est lui-même associé à un événement qui peut être de deux classes différentes, prédéfinies dans DIESE :

Enfin, cet événement est placé dans l'agenda de la simulation, à la date courante, pour un début ou une reprise immédiate de l'effet de l'opération.

Dans le constructeur de ProceedOperation, c'est l'opération qui est désignée, par le service ProcessedEntity de DIESE, comme l'entité sur laquelle l'instance de processus va opérer un changement d'état (essentiellement sur la situation, le degré de progression, les dates de début et de fin). Il établit le pas à la valeur du pas de l'opération (renvoyé par le message GetIntValue(STEP) adressé à l'opération). Il contient enfin l'assignation d'un corps standard aux méthodes d'initialisation, de poursuite et d'arrêt. Ceci est réalisé par les services de DIESE :

\BTab4 SetInitialize(f);

\BTab4 SetGoOneStepForward(g);

\BTab4 SetStop(h);

où :


This page was generated with the help of DOC++.