Langage IL : galères...
Posté : 29 sept. 2020, 16:41
Salut,
Habituellement je programme en fonction bloc, mais la fonction que je veux faire dépasse les capacité de mon API.
Du coup je m'attaque à le faire en IL. Et la dernière fois que j'ai fait de l'IL c'était en TP en 1ère ou un Terminale.
Ce que je veux faire :
J'ai un automate qui reçoit l'état de 250 autres API. Chaque API envoient de quoi faire 8 alarmes : lifebit, niveau 0, 1 et 2, mode Urgence, Mode manuel, erreut T66x, info Libre.
Je veux savoir combien j'ai d'alarmes actives pour chaque type (lifebit, niveau, etc)
Les bits de mes alarmes sont adressés : Automate 1 : Flag 20 à 27,
Automate 2 : Flag 30 à 37;
Etc
Ce que je veux donc faire (en gros, si c'était en C, ça ressemblerait à ça):
Répété pour chacune de mes 8 alarmes.
Et j'y arrive pas en IL.
Le compilateur me dit que je ne peux pas utiliser "Compteur" Comme je le fais. Impossible d eocmprendre pourquoi
Bref, si vous savez comment faire je prends
Habituellement je programme en fonction bloc, mais la fonction que je veux faire dépasse les capacité de mon API.
Du coup je m'attaque à le faire en IL. Et la dernière fois que j'ai fait de l'IL c'était en TP en 1ère ou un Terminale.
Ce que je veux faire :
J'ai un automate qui reçoit l'état de 250 autres API. Chaque API envoient de quoi faire 8 alarmes : lifebit, niveau 0, 1 et 2, mode Urgence, Mode manuel, erreut T66x, info Libre.
Je veux savoir combien j'ai d'alarmes actives pour chaque type (lifebit, niveau, etc)
Les bits de mes alarmes sont adressés : Automate 1 : Flag 20 à 27,
Automate 2 : Flag 30 à 37;
Etc
Ce que je veux donc faire (en gros, si c'était en C, ça ressemblerait à ça):
Code : Tout sélectionner
Tampon1 =0 ;
Compteur =0;
For (cpt, 1, 250)
{
If (F 20 + Compteur) ==1 Then
{
Tampon1++ ;
}
compteur = compteur +10;
cpt ++;
}
Nombre_Alarmes = Tampon1;
Et j'y arrive pas en IL.
Code : Tout sélectionner
LD PCD.Alarme.Nb.Niveau_0.Temp ;
0
LD Compteur ;
0
LD PCD.Alarme.Test.Niveau_0 ;
1
LD Result_N0 ;
0
CompteurBis LDEF R 0
ResultBis LDEF R 0
SymbolB LDEF R 0
$FOR CompteurBis = 0 .. 20
XLA SymbolB ;
F 20 + Compteur
Compteur DEF Compteur+10
$IF SymbolB = 1 ;
INC PCD.Alarme.Nb.Niveau_0.Temp
$ENDIF
$ENDFOR
COPYX Result_N0
PCD.Alarme.Nb.Niveau_0.Value
Bref, si vous savez comment faire je prends