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.
++
Langage IL : galères...
-
- Générateur de blocs fonctions
- Messages : 141
- Inscription : 04 nov. 2015, 04:25
-
- Créateur de langage
- Messages : 732
- Inscription : 27 avr. 2017, 11:11
- Localisation : Loin de la civilisation
Re: Langage IL : galères...
Pour compteur le nombre d'alarmes présentes dans les groupes :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 ++;
}
- 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).
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Langage IL : galères...
ok,
ceci dit, moi ça me dépasse aussi, ça dépasse de tous les cotés, LOL
ceci dit, moi ça me dépasse aussi, ça dépasse de tous les cotés, LOL
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
-
- Créateur de langage
- Messages : 732
- Inscription : 27 avr. 2017, 11:11
- Localisation : Loin de la civilisation
Re: Langage IL : galères...
C'est pas mes variables qui posent problèmes, mais celles générées par les Fbox :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.
++
ça répété 8 fois par PCD.
-
- Mi homme - Mi automate
- Messages : 2076
- Inscription : 21 oct. 2015, 10:00
- Localisation : Ile de France
Re: Langage IL : galères...
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
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
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part !
-
- Mi homme - Mi automate
- Messages : 2076
- Inscription : 21 oct. 2015, 10:00
- Localisation : Ile de France
Re: Langage IL : galères...
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).
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).
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part !
-
- Mi homme - Mi automate
- Messages : 2076
- Inscription : 21 oct. 2015, 10:00
- Localisation : Ile de France
Re: Langage IL : galères...
XLA charge l'adresse du media et pas la valeur dans un registre 32 bits !!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
-> 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 ...
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part !