Page 1 sur 2

Langage IL : galères...

Posté : 29 sept. 2020, 16:41
par Kallysto
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 :
problème IL 1.PNG
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;
		
Répété pour chacune de mes 8 alarmes.

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

 
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

Re: Langage IL : galères...

Posté : 29 sept. 2020, 21:53
par itasoft
Slts,
La dernière fois que j’ai fait du IL ça devait être dans une vie antérieure.
On va attendre que les spécialistes « teutons » qui ont fait du IL de leur vivant se manifestent

ps:
ceci dit, en simplifiant ça rentre pas dans ton bloc fonction ?

For (cpt, 0, 249)
{
Compteur=cpt*10;
If (F 20 + compteur) ==1 Then Nombre_Alarmes_niveau_0++;
If (F 21 + compteur) ==1 Then Nombre_Alarmes_niveau_1++;
If (F 22 + Compteur) ==1 Then Nombre_Alarmes_niveau_2++;
//suite
cpt ++;
}

Tout sur une seule et même boucle

Re: Langage IL : galères...

Posté : 30 sept. 2020, 06:13
par philou77
Salut !

Que ce soit en c ou autre ça marche pas.

F20 + compteur c’est une addition de deux valeurs.
.
F20[compteur] c’est l’adressage indexé.
Je pense que tu veux plus faire la deuxième solution.


Faut faire 250 fois le test de 8 bits dont les adresses vont de 10 en 10.

Que je sais pas écrire en IL .lol

Re: Langage IL : galères...

Posté : 30 sept. 2020, 09:30
par itasoft
@philou
il faut être né "teuton" pour faire du IL

Re: Langage IL : galères...

Posté : 30 sept. 2020, 10:20
par Kallysto
philou77 a écrit : 30 sept. 2020, 06:13 Salut !

Que ce soit en c ou autre ça marche pas.

F20 + compteur c’est une addition de deux valeurs.
.
F20[compteur] c’est l’adressage indexé.
Je pense que tu veux plus faire la deuxième solution.


Faut faire 250 fois le test de 8 bits dont les adresses vont de 10 en 10.

Que je sais pas écrire en IL .lol
Si j'ai fait comme ça, c'est parce que c'est indiqué comme ça dans la doc :

Code : Tout sélectionner

XLA   R 100    ;load the media pointer of F 32 into R 100
	 F 32

Symbol1 EQU R     ;dynamic address
XLA   R 101       ;load media pointer to Symbol1 with offset 4 bytes
	Symbol1 + 4

XLA   R 102       ;load media pointer to Symbol1 with offset 4 bytes
	 Symbol1, 4

Je vais essayer avec ta syntaxe, si ça marche c'est gagné.

Edit : Et ça marche pas !

Re: Langage IL : galères...

Posté : 30 sept. 2020, 11:01
par itasoft
slts,
mais la fonction que je veux faire dépasse les capacité de mon API.

quelle capacité ? mémoire ou instructions inexistantes ?

Re: Langage IL : galères...

Posté : 30 sept. 2020, 14:28
par Kallysto
itasoft a écrit : 30 sept. 2020, 11:01 slts,
mais la fonction que je veux faire dépasse les capacité de mon API.

quelle capacité ? mémoire ou instructions inexistantes ?
Le nombre de Flag autorisés : dépassement de 3000.

Re: Langage IL : galères...

Posté : 30 sept. 2020, 15:11
par itasoft
slts,
comprends pas, ça utilise 3000 flags pour écrire l'équivalent de cette boucle ??

for (cpt, 0, 249)
{
Compteur=cpt*10;
If (F 20[compteur]) ==1 Then Nombre_Alarmes_niveau_0++;
If (F 21[compteur]) ==1 Then Nombre_Alarmes_niveau_1++;
If (F 22[Compteur]) ==1 Then Nombre_Alarmes_niveau_2++;
//idem pour les 5 autres alarmes
cpt ++;
}

Re: Langage IL : galères...

Posté : 30 sept. 2020, 16:56
par philou77
Je vais chercher un peu mais il semble que d'après tes infos, ton écriture n'est pas bonne.

Re: Langage IL : galères...

Posté : 30 sept. 2020, 17:45
par philou77
C'est quoi ton matos au juste et le soft utilisé ?