Question 1 : Il y avait deux grandes classes de solutions : un gros Grafcet ou plusieurs petits (un pour chaque zone où l'on ne fait qu'une chose à la fois). voici une proposition.
Question
2 :Dans le Gemma, on ne peut être que
dans un seul état à la fois. Les deux méthodes sont donc possibles, inutile
de faire une table des états accessibles. Ci-dessous, une proposition de solution :
#include "entrees-sorties.h"
int auto, marche, prepa, manu, finT1, finT2, atu, rearm, arret, finA5, CI;
void lire_entrees(void)
{
/*je suppose ici qu'il lit les entrées et affecte les variables globales correspondantes*/
}
/*ici devraient être les fonctions qui lancent une tâche (argument 1) ou l'arrêtent (argument 0)*/
int main(void)
{
eteindre_toutes_sorties();
etape1:
do lire_entrees(); while(!(manu || (marche && (prepa||auto))));
if(manu)goto etape8;
else if(auto) goto etape3;
etape2:
lancer_T2(1);
do lire_entrees(); while(!finT2);
lancer_T2(0);
etape3:
lancer_T1(1);
do lire_entrees(); while(!arret && !atu);
lancer_T1(0);
if(atu)goto etape4;
etape4:
lancer_A2(1);
do lire_entrees(); while(!finT1);
lancer_A2(0);
goto etape1;
etape5:
lancer_D1(1);
do lire_entrees(); while(atu || !rearm);
lancer_D1(0);
etape6:
lancer_A5(1);
do lire_entrees(); while(!finA5);
lancer_A5(0);
etape7:
lancer_A6(1);
do lire_entrees(); while(!CI);
lancer_A6(0);
goto etape1;
etape8:
lancer_T3(1);
do lire_entrees(); while(!auto && !prepa);
lancer_T3(0);
goto etape7;
}
Question subsidiaire : Voici ma proposition.
pour retourner au sujets de cet examen, cliquez ici (n'est-il pas dans une autre fenêtre ?).
Patrick
TRAU, ULP - IPST
avril 04