Page 2 sur 2

Re: Langage IL : galères...

Posté : 01 oct. 2020, 05:34
par tuscaonline
Salut Kalysto.
A tu regarder du coter des DB dans PG5, ce sera plus adapté pour stocker ta structure de donnée.
As tu regarder dans les Build Options de PG5, en configurant un projet vite fait j'ai le droit a 8192 flags.

En deuxième, je modifierais le format de tes messages inter api pour utilisé des registres a la place des flag, ainsi tu n'aurais que 250 Registre au lieux des 2500.
Apres tu utilises des masque binaires sur tes registres pour tester tes bits d'info.

Je suis pas au bureau, j'ai pas mon PCD M5560 pour faire des tests.

++

Re: Langage IL : galères...

Posté : 01 oct. 2020, 08:50
par Kallysto
itasoft a écrit : 30 sept. 2020, 15:11 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 ++;
}
Pour compteur le nombre d'alarmes présentes dans les groupes :
- Niveau 0
- Niveau 1
- Niveau 2
- Mot de vie
- Mode urgence
- Mode Manuel,
- Erreur T66x
- Info Libre,
En fonction bloc, il me faut 10 000 flags. Et eux plus ceux qui sont présents par le programme : liste d'alarmes (4000 flags rien que pour elles), décomposition des registres, etc, ça dépasse de 3000 le nombre de flags disponible dans l'automate (16 300 et quelques).

Re: Langage IL : galères...

Posté : 01 oct. 2020, 08:58
par itasoft
ok,
ceci dit, moi ça me dépasse aussi, ça dépasse de tous les cotés, LOL

Re: Langage IL : galères...

Posté : 01 oct. 2020, 09:20
par Kallysto
tuscaonline a écrit : 01 oct. 2020, 05:34 Salut Kalysto.
A tu regarder du coter des DB dans PG5, ce sera plus adapté pour stocker ta structure de donnée.
As tu regarder dans les Build Options de PG5, en configurant un projet vite fait j'ai le droit a 8192 flags.

En deuxième, je modifierais le format de tes messages inter api pour utilisé des registres a la place des flag, ainsi tu n'aurais que 250 Registre au lieux des 2500.
Apres tu utilises des masque binaires sur tes registres pour tester tes bits d'info.

Je suis pas au bureau, j'ai pas mon PCD M5560 pour faire des tests.

++
C'est pas mes variables qui posent problèmes, mais celles générées par les Fbox :
Capture.PNG
ça répété 8 fois par PCD.

Re: Langage IL : galères...

Posté : 01 oct. 2020, 09:43
par philou77
Salut !

Il faudrait que tes 250 automates écrivent tout à tour dans la même zone !!

Qu’ils lisent un compteur, si c’est leur numéro qu’ils écrivent leur état et remette à zéro le compteur.

L’automate analyse l’état et place le compteur à la valeur suivante..
Etc...

Bon t’as pas l’état en live mais en quelques secondes tu as l’état des 250 automates

Ça fait modifier le prog de 250 automates.. dur

Re: Langage IL : galères...

Posté : 02 oct. 2020, 13:15
par philou77
Salut !

bon j'ai enfin trouvé, c'est su saia burgess, j'en ai jamais fait... lol

Tu as dans ta structure
- un Registre 32 bits Défauts.Valeur
- 8 Flags à transmettre

si tu as peu de défauts, pourquoi ne pas transmettre tes 8 flags sur 8 bits de poids faibles ou fort dans Défauts.Valeur ?

tu enlève (250*8) 2000 Flags direct !Tout en les conservant (bon ok, c'est tout de suite moins clair dans la structure).

Re: Langage IL : galères...

Posté : 02 oct. 2020, 16:12
par philou77
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
XLA charge l'adresse du media et pas la valeur dans un registre 32 bits !!
-> Donc XLA SymbolB F20 + 4 charge l'adresse de (F20 + (4 octets ?)) dans SymbolB -> tu as un mot de 32 bit et une adresse (pas une valeur Booléenne)

Pour la Valeur il te faut un XLD(32 bits) XLDW (16bits) ou XLDB(8bits) qui utilise SymbolB (dans ton cas) pour pointer l'adresse de la valeur à charger !
Pour l'erreur sur Compteur, je ne vois pas de déclaration de compteur avant la nouvelle en Compteur DEF Compteur+10 :
- Si compteur est déclaré en EQU il se doit d'être UNIQUE, ou bien alors il n'a pas été déclaré auparavant, c'est peut être cela ton erreur de compilation

Sinon tu as SEI (adressage indirect)

Pour ta boucle
LD R 0, 0 // Charger le registre R 0 avec 0
$FOR R1 = 0 .. 20 // registre R1 sert d'index de boucle
SEI R 0 // Charge le registre d'adresse indirect avec le contenu du registre 0
STHX F20 // Test F20 + le registre d'adresse indirect ( le petit X à la fin de l'instruction STH) à 1
INC PCD.Alarme.Nb.Niveau_0.Temp // A voir si l'incrément se fait tout le temps (j'en ai peur) ou bien seulement si STHX = 1
ADD R0,K 10, R0 // Incrémenter le Registre R0 de 10
$ENDFOR

Ceci devrait fonctionner et te permettre de tester F20 ...F30...jusqu'à F220 ((20 fois 10) +20)
au moins pour tester, ensuite faut adapter avec ta structure et ton code ...