Masquage en action Vijeo Designer. HELP svp

Forum traitant des automates industriels de marque Schneider - Telemecanique
Répondre
Auriel
Apprend le binaire
Apprend le binaire
Messages : 5
Enregistré le : 27 oct. 2020, 12:09

Masquage en action Vijeo Designer. HELP svp

Message par Auriel »

Bonjour bonsoir a vous ! je suis actuellement étudiant en alternance et j'ai besoin d'aide pour réaliser ceci :
Capture.PNG
Dans une action en script sur vijeo designer.
j'ai essayé diverses méthodes trouvées sur le net et rien ne va, je ne trouve pas le moyen de réaliser cela, pourriez vous m'aider svp?
int tmp1H5;
int tmp2H5;

tmp1H5 = Zone_alarmes_H05_1 & 0xD327;
tmp2H5 = Zone_alarmes_H05_2 & 0x1B00;

if tmp1H5 > 0 & Bit_clignottant then
Ala_H5=1;
end_if;

if tmp2H5 > 0 & Bit_clignottant then
Ala_H5=1;
end_if;

if CdeModeFractH05 & Bit_clignottant then
Ala_H5:=1;
end_if;

if tmp1H5>0 + tmp2H6>0 + CdeModeFractH05 then
Apparition_Ala_H5:=1;
end_if;
mon erreur apparait dès la troisième ligne
tmp1H5 = Zone_alarmes_H6_1 & 0xD327;
qui me donne
Erreur S8011: [Script] [Ligne:12] Le type d'un opérande d'opérateur de manipulation de bits est incorrect.
lorsque je tente d'écrire cette même phrase comme ceci :
tmp1H6 = Zone_alarmes_H6_1 && 0xD327;
une nouvelle erreur apprairait :
Erreur S8040: [Script] [Ligne:12] L'expression doit être de type booléen.
impossible d'avancer...
Modifié en dernier par Auriel le 27 oct. 2020, 13:37, modifié 2 fois.
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Masquage en action Vijeo Designer. HELP svp

Message par philou77 »

Salut !

C'est quoi le Type de ''Zone_alarmes_H6_1'' ?
si c'est une variable dans l'automate, faudrait peut être un ''Zone_alarmes_H6_1.GetIntvalue ()'' !
de la même manière, pour
Ala_H5 et Apparition_Ala_H5..

On ne peut pas accéder aux variables externes aux macros comme tu le fais ! il faut utiliser les méthodes d'écriture et de lecture !

Tu peux aussi simplifier le reste...

if (tmp1H5 > 0) | (tmp2H5 > 0)
{
Ala_H5.write(Bit_clignottant.getIntValue()) ;
Apparition_Ala_H5.write(True);
}
else
{
Apparition_Ala_H5.write(False);
Ala_H5.write(False);
}
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Auriel
Apprend le binaire
Apprend le binaire
Messages : 5
Enregistré le : 27 oct. 2020, 12:09

Re: Masquage en action Vijeo Designer. HELP svp

Message par Auriel »

Capture2.PNG
Capture2.PNG (4.28 Kio) Vu 3017 fois
La zone_alarmes_H05 est un mot complet regroupant toutes les alarmes, chacun de ses bits est une alarme différente propre au H05 pour la zone_alarmes_h05

pour le reste ce sont des BOOL
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Masquage en action Vijeo Designer. HELP svp

Message par philou77 »

Re !

Tes variables sont au format REAL !!
Pourquoi un tel format pour des bits d'alarmes ?

il te faut un format DInt pour faire ce que tu souhaites (en format 32 Bits) !


et dans ta macro

long tmp1H5; // Format entier 32 bits
long tmp2H5;

tmp1H5 = Zone_alarmes_H05_1.getIntValue() & 0xD327; // Prendre la valeur avec le masque
tmp2H5 = Zone_alarmes_H05_2.getIntValue() & 0x1B00;

if (tmp1H5 > 0) | (tmp2H5 > 0) // faire les comparaisons
{
Ala_H5.write(Bit_clignottant.getIntValue()) ; // ce bit clignotera
Apparition_Ala_H5.write(True); // Celui ci est mis à 1
}
else // si c'est faux, alors on remet tout à zéro !
{
Apparition_Ala_H5.write(False);
Ala_H5.write(False);
}
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Auriel
Apprend le binaire
Apprend le binaire
Messages : 5
Enregistré le : 27 oct. 2020, 12:09

Re: Masquage en action Vijeo Designer. HELP svp

Message par Auriel »

d'accord ! je comprends mieux, merci infiniment ça avance !

J'ai repris votre programme écris, j'ai compris le raisonnement je ne ferais plus la même erreur ^^

j'ai juste une petite erreur de syntaxe
Erreur S7361: [Script] [Ligne:6] Erreur de syntaxe
sur cette ligne :
if (tmp1H5 > 0) | (tmp2H5 > 0)
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Masquage en action Vijeo Designer. HELP svp

Message par philou77 »

mettre le tout entre parenthèse ?
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Auriel
Apprend le binaire
Apprend le binaire
Messages : 5
Enregistré le : 27 oct. 2020, 12:09

Re: Masquage en action Vijeo Designer. HELP svp

Message par Auriel »

Autant pour moi c'est tout simple j'avais oublié ce détail ^^' tout fonctionne merci beaucoup !

Passez une bonne journée !
Avatar du membre
Bruce33
Dieu du process
Dieu du process
Messages : 932
Enregistré le : 28 oct. 2015, 06:54
Localisation : Pas-de-Calais

Re: Masquage en action Vijeo Designer. HELP svp

Message par Bruce33 »

Bonjour,
philou77 a écrit : 27 oct. 2020, 14:37 Tes variables sont au format REAL !!
Pourquoi un tel format pour des bits d'alarmes ?
il te faut un format DInt pour faire ce que tu souhaites (en format 32 Bits) !
Je pense que ce sont plutôt des variables 16 bits (INT), sinon il y a un recouvrement sur le mot %MW16786.

Sinon on peut déclarer une seule variable Zone_alarmes_H05 de type DINT à l'adresse %MW16785
et faire un masque 0x1B00D327.
Auriel
Apprend le binaire
Apprend le binaire
Messages : 5
Enregistré le : 27 oct. 2020, 12:09

Re: Masquage en action Vijeo Designer. HELP svp

Message par Auriel »

Merci j'en prends note !
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Masquage en action Vijeo Designer. HELP svp

Message par philou77 »

Merci Bruce33

j'étais passé à ôté de ça...!

Donc ou :
sur 32 bits et passer en long avec des adresses PAIRES (pour 2 mots de 32 Bits)
sur 32 Bit avec un seul mot (toujours adresse PAIRE) et un masque de 32 Bits
sur 16 Bits et passer en Int (là les adresses peuvent se suivre !)

Sinon le test if peut s'écrire :

if ((tmp1H5 | tmp2H5) !=0)

différent de zéro est mieux car >0 prend en compte le signe de la valeur ;-)
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