Exercice — solution programmée d’une tâche (3 points), dans l’esprit des sessions 2018–2024
Machine de découpe de câble. Le câble est entraîné par le moteur Mt1 : KM1 seul donne la petite vitesse, KM1 et KA ensemble la grande vitesse. Un encodeur délivre une impulsion par centimètre de câble ; ces impulsions sont comptées par le module TMR0 d’un PIC 16F877A (entrée RA4/T0CKI) : TMR0 est le nombre de centimètres entraînés. La longueur à couper (en cm, entre 20 et 250) est lue sur le port D. La cisaille est actionnée par un vérin : 14M (descente, capteur ) et 12M (remontée, capteur ).
La tâche 2 « couper une longueur de câble » est appelée par les étapes 2 et 5 du GRAFCET de conduite ; sa fin autorise les étapes 3 et 6. Le câble avance en grande vitesse jusqu’à 10 cm de la longueur demandée (réceptivité ), puis en petite vitesse jusqu’à la longueur demandée (réceptivité ), avant la coupe.
Connexions du PIC 16F877A
| Broche | Signal | Sens |
|---|---|---|
| RA4/T0CKI | impulsions de l’encodeur | entrée |
| RB0, RB1, RB2, RB3 | , , , | entrées |
| RB4, RB5 | , | entrées |
| RC0, RC1 | préactionneurs KM1, KA | sorties |
| RC2, RC3 | préactionneurs 14M, 12M | sorties |
| RD0 à RD7 | (binaire) | entrées |
N.B. : les broches non connectées sont configurées en entrées. Un identificateur MikroC ne pouvant pas commencer par un chiffre, les bobines 14M et 12M sont déclarées M14 et M12.
// Déclarations
bit X20, X21, X22, X23, X24, X25;
bit Ap, Fl;
unsigned short Lc;
sbit X2 at RB0_bit;
sbit X3 at RB1_bit;
.........(a).........; // X5
sbit X6 at RB3_bit;
sbit L0 at RB4_bit;
sbit L1 at RB5_bit;
sbit KM1 at RC0_bit;
.........(b).........; // KA
sbit M14 at RC2_bit;
sbit M12 at RC3_bit;
void main() {
ADCON1 = 0x06; // port A numérique
OPTION_REG = 0x28; // TMR0 compte sur RA4
TRISA = ..(c)..; TRISB = 0xFF;
TRISC = ..(d)..; TRISD = ..(e)..;
PORTC = 0;
.........(f)......... // étapes
while (1) {
Lc = PORTD;
Ap = (TMR0 >= Lc - 10);
Fl = (TMR0 >= Lc);
X20 = (X25 && (X3 || X6)) || (!X21 && X20);
X21 = .........(g).........;
X22 = .........(h).........;
X23 = .........(i).........;
X24 = .........(j).........;
X25 = .........(k).........;
if (X20) ....(l)....; // TMR0 := 0
KM1 = ....(m)....;
KA = ....(n)....;
M14 = X23;
M12 = X24;
}
}- Équations d’activation et de désactivation, lues sur les transitions du GRAFCET.
- Écrire l’équation d’activation et l’équation de désactivation de l’étape 21.
- Écrire et pour l’étape initiale 20.
- En déduire les équations des étapes 20 à 25 sous la forme (forme de la ligne X20 du programme). Quelle priorité cette forme donne-t-elle à la mémoire d’étape ?
- Compléter les déclarations (a) et (b).
- Compléter (c), (d) et (e) en hexadécimal.
- Compléter l’initialisation (f).
- Traduire en MikroC les équations des étapes 21 à 25 : (g) à (k).
- Compléter la remise à zéro (l) et les équations des sorties (m) et (n).
- Pour cm : à quelle valeur de TMR0 le câble passe-t-il en petite vitesse ? Quelle longueur est entraînée en petite vitesse ? Pourquoi la ligne (l) est-elle indispensable pour le deuxième câble ?
Voir la correction commentéeAprès avoir posé votre démarche
1.a Idée : une étape s’active quand l’étape amont est active et que la réceptivité amont est vraie ; avec la convention des programmes du bac, elle se désactive quand l’étape aval est active. et .
1.b L’étape 20 est activée depuis l’étape 25 : et .
2. Avec , , , et () :
Si et étaient vraies ensemble, vaudrait 1 : c’est une mémoire à marche prioritaire.
3. (a) sbit X5 at RB2_bit; ; (b) sbit KA at RC1_bit; — une variable externe se déclare en sbit sur sa broche, une variable d’étape interne en bit.
4. Idée : un bit de TRIS à 1 = entrée, à 0 = sortie ; les broches non connectées sont des entrées. Port A : RA4 en entrée, les autres non connectées : (le port A n’a que six broches RA0 à RA5 : 0x3F est équivalent). Port C : RC0 à RC3 en sortie, RC4 à RC7 non connectées : , . Port D entièrement en entrée : .
5. Seule l’étape initiale est active au départ : (f) X20 = 1; X21 = 0; X22 = 0; X23 = 0; X24 = 0; X25 = 0;
6. Chaque équation de la question 2 se traduit avec && (ET), || (OU) et ! (NON) :
X21 = (X20 && (X2 || X5)) || (!X22 && X21);
X22 = (X21 && Ap) || (!X23 && X22);
X23 = (X22 && Fl) || (!X24 && X23);
X24 = (X23 && L1) || (!X25 && X24);
X25 = (X24 && L0) || (!X20 && X25);7. (l) TMR0 = 0 ; KM1 est commandé dans les étapes 21 et 22, KA seulement dans la 21 :
if (X20) TMR0 = 0;
KM1 = X21 || X22;
KA = X21;8. devient vrai pour : la petite vitesse entraîne , et la coupe est commandée à TMR0 = 150. Sans la remise à zéro dans l’étape 20, TMR0 vaudrait encore 150 au deuxième appel : et seraient vrais dès l’étape 21 et le câble serait coupé sans avancer.