Langage IL : galères...

Partie du forum pour tout ce qui concerne la partie soft, ou logiciel, dans l'industrie. Forum, conseil, astuce et entraide sur les logiciels d'automatisme ou d'informatique industrielle .
Kallysto
Créateur de langage
Créateur de langage
Messages : 732
Enregistré le : 27 avr. 2017, 11:11
Localisation : Loin de la civilisation

Langage IL : galères...

Message 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
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7086
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Langage IL : galères...

Message 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
Modifié en dernier par itasoft le 30 sept. 2020, 08:12, modifié 2 fois.
Automaticien privé (de tout)
itasoft@free.fr
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2079
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Langage IL : galères...

Message 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
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7086
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Langage IL : galères...

Message par itasoft »

@philou
il faut être né "teuton" pour faire du IL
Automaticien privé (de tout)
itasoft@free.fr
Kallysto
Créateur de langage
Créateur de langage
Messages : 732
Enregistré le : 27 avr. 2017, 11:11
Localisation : Loin de la civilisation

Re: Langage IL : galères...

Message 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 !
Modifié en dernier par Kallysto le 30 sept. 2020, 11:32, modifié 1 fois.
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7086
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Langage IL : galères...

Message par itasoft »

slts,
mais la fonction que je veux faire dépasse les capacité de mon API.

quelle capacité ? mémoire ou instructions inexistantes ?
Automaticien privé (de tout)
itasoft@free.fr
Kallysto
Créateur de langage
Créateur de langage
Messages : 732
Enregistré le : 27 avr. 2017, 11:11
Localisation : Loin de la civilisation

Re: Langage IL : galères...

Message 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.
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7086
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Langage IL : galères...

Message 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 ++;
}
Automaticien privé (de tout)
itasoft@free.fr
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2079
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Langage IL : galères...

Message par philou77 »

Je vais chercher un peu mais il semble que d'après tes infos, ton écriture n'est pas bonne.
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2079
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Langage IL : galères...

Message par philou77 »

C'est quoi ton matos au juste et le soft utilisé ?
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Répondre