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 .
tuscaonline
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 141
Inscription : 04 nov. 2015, 04:25

Re: Langage IL : galères...

Message 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.

++
Kallysto
Créateur de langage
Créateur de langage
Messages : 732
Inscription : 27 avr. 2017, 11:11
Localisation : Loin de la civilisation

Re: Langage IL : galères...

Message 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).
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7037
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Langage IL : galères...

Message par itasoft »

ok,
ceci dit, moi ça me dépasse aussi, ça dépasse de tous les cotés, LOL
Automaticien privé (de tout)
itasoft@free.fr
Kallysto
Créateur de langage
Créateur de langage
Messages : 732
Inscription : 27 avr. 2017, 11:11
Localisation : Loin de la civilisation

Re: Langage IL : galères...

Message 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.
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2076
Inscription : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Langage IL : galères...

Message 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
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 : 2076
Inscription : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Langage IL : galères...

Message 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).
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 : 2076
Inscription : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Langage IL : galères...

Message 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 ...
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