Vijeo-Designer 6.2 interaction IO Scanner / Ecriture

Forum traitant des automates industriels de marque Schneider - Telemecanique
Gillou53
Code sa première boucle
Code sa première boucle
Messages : 15
Enregistré le : 19 août 2020, 13:11

Vijeo-Designer 6.2 interaction IO Scanner / Ecriture

Message par Gillou53 »

Bonjour,

J'ai un IHM HMIGTO6310 en communication Ethernet avec un automate de télégestion (sous linux embarqué propriétaire).

J'ai configuré l'IHM pour scruter les IO de l'automate à cadence moyenne.
J'ai créé des fenêtres popup standards, afin de limiter le développement de pages de paramétrage.
Néanmoins je rencontre un problème lorsque je souhaite modifier une valeur.
Régulièrement, je suis obligé de valider plusieurs fois ma saisie, avant que mon automate ne l'enregistre.

Tout ce passe comme si l'IO scanner écrasait l'information que je viens de modifier avant même de l'avoir envoyé.

Mon Popup fonctionne de la façon suivant :
  • je positionne un index avant d'appeler mon popup.
Mon popup dispose de 3 scriptes :
  • le premier est en scrutation périodique (300ms), afin de maintenir à jour les données du popup en fonction de la position de l'index.
  • le second est déclenché par l'appuis sur les boutons du popup pour écrire les infos et les envoyer vers l'automate
  • le troisième est déclenché par la modification des consignes numériques à envoyer vers l'automate.
Il s'agit essentiellement de la transmission de ces dernières infos numériques qui posent problèmes. En effet comme écrit plus haut, j'ai de l'ordre d'une chance sur 4 ou 5 que la modification de ma consigne se passe correctement (si non, ma modification ne se fait tout simplement pas; ma consigne reste a la valeur initiale).

Ci dessous un extrait des scriptes :
Scripte de maJ du Popup :

Code : Tout sélectionner

// Si une écriture vient d'avoir lieu, on zap ce tour
// après avoir reseté l'info
if ((ECRIRE_VANNE.getIntValue() == 1)||(ECRIRE_CONS_VANNE.getIntValue() == 1))
{
    ECRIRE_VANNE.write(0);
    ECRIRE_CONS_VANNE.write(0);
    return;
}
// On Empèche la lecture si il y a une écriture en cours
// Interdit l'exécution des autres scripts
SCRIPT_EN_COURS.write(0);
    
// ON copie que les variables concernées par l'index
switch (INDEX_VANNES.getIntValue())
{
// VEAS F1
    case 1 :
        ETAT_VANNE.write(AT_VEAS_F1_DISPO.getIntValue()+E_VEAS_F1_O.getIntValue()*2+E_VEAS_F1_F.getIntValue()*4);
        DEFAUT_VANNE.write(D_VEAS_F1_ETA.getIntValue());
        CMUT_VANNE.write(B_VEAS_F1.getIntValue());
        CONS_VANNE.write(0);
        break;
...
// VED
    case 9 :
        ETAT_VANNE.write(AT_VED_DISPO.getIntValue()+E_VED_O.getIntValue()*2+E_VED_F.getIntValue()*4);
        DEFAUT_VANNE.write(D_VED_ETA.getIntValue());
        CMUT_VANNE.write(B_VED.getIntValue());
        CONS_VANNE.write(R_VED_MANU.getFloatValue());
        break;
...
}

// Réautorise l'exécution des autres scripts
SCRIPT_EN_COURS.write(1);
Scripte d'écriture des commandes :

Code : Tout sélectionner

//On ne gère que le front montant
if (ECRIRE_VANNE.getIntValue() == 0)
    return;

// Interdit l'exécution des autres scripts
SCRIPT_EN_COURS.write(0);

switch (INDEX_VANNES.getIntValue())
{
// VEAS F1
    case 1 :
        B_VEAS_F1.write(CMUT_VANNE.getIntValue());
        B_VEAS_F1.sendData();
        break;
...
// VED
    case 9 :
        B_VED.write(CMUT_VANNE.getIntValue());
        B_VED.sendData();
        break;
...
}

// Ré autorise l'exécution des autres scripts
SCRIPT_EN_COURS.write(1);
Scripte d'écriture des consignes :

Code : Tout sélectionner

// On ne gère que le front descendant
if (ECRIRE_CONS_VANNE.getIntValue() == 1)
    return;

SCRIPT_EN_COURS.write(0);

switch (INDEX_VANNES.getIntValue())
{
...
// VED
    case 9 :
        R_VED_MANU.write(CONS_VANNE.getFloatValue());
        R_VED_MANU.sendData();
         break;
}
// Ré autorise l'exécution des autres scripts
SCRIPT_EN_COURS.write(1);
PS : J'ai quelques pistes :
  • Je ne suis pas sur que l’inter-verrouillage (SCRIPT_EN_COURS) soit utile. (je n'ai qu'un IHM donc à moins que les scriptes puissent être interrompus et fonctionner en parallèle, je ni voie une utilité que si 2 IHM partagent les mêmes variables).
  • de ce que j'ai pu lire dans l'aide, la méthode "sendData" n'a de sens que pour les variables de bloc. Etant donné que je n'ai pas de variables de bloc, les lignes "xxx.sendData();", ne font strictement rien (en tout cas, probablement pas ce que j'en attendais).
  • j'ai repéré la méthode "isDataQualityGood", mais on ne peu pas dire que l'explication de l'aide soit limpide à son sujet. L'explication semble indiquer que cet information soit surtout liée à l'établissement de la connexion avec l'automate, et ne m'intéresse pas dans ce cadre; mais si elle pouvais m'indiquer qu'une modification est en cour et qu'elle n'a pas été encore prise en compte; ça changerait tout !
Si quelqu'un peu m'aider; m'apporter des précision, sur le fonctionnement des scriptes, je suis preneur.
:ugeek: Automaticien dans le domaine de l'eau depuis plus de 10 ans.
Je travail sur les gammes TSX et M340, ainsi qu'avec les IHM Schneider.
Je travail également avec des systèmes de télégestion.
MiGaNuTs
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1572
Enregistré le : 12 nov. 2015, 21:02
Localisation : 45 - Loiret
Contact :

Re: Vijeo-Designer 6.2 interaction IO Scanner / Ecriture

Message par MiGaNuTs »

Bonjour.
Pourquoi tu fait des scripts ? L'OS de l'afficheur se charge très bien de rafraichir les variables tout seul d'habitude.
Gillou53
Code sa première boucle
Code sa première boucle
Messages : 15
Enregistré le : 19 août 2020, 13:11

Re: Vijeo-Designer 6.2 interaction IO Scanner / Ecriture

Message par Gillou53 »

MiGaNuTs a écrit : 19 août 2020, 16:03 Bonjour.
Pourquoi tu fait des scripts ? L'OS de l'afficheur se charge très bien de rafraichir les variables tout seul d'habitude.
c'est pour ne pas avoir a faire 50 copier coller pour adapter un popup à chaque vannes et re-modifier les nom de variables à chaque fois. Avec un scripte, tout est au même endroit, donc beaucoup plus confortable et rapide à modifier.
:ugeek: Automaticien dans le domaine de l'eau depuis plus de 10 ans.
Je travail sur les gammes TSX et M340, ainsi qu'avec les IHM Schneider.
Je travail également avec des systèmes de télégestion.
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Vijeo-Designer 6.2 interaction IO Scanner / Ecriture

Message par philou77 »

Salut !

Dans ton script 3 tu as :
R_VED_MANU.write(CONS_VANNE.getFloatValue());

tu écris (Write) donc une valeur que tu lis (Get) :
Cette valeur ne serait pas mise à jour par ton script n*1 (toutes les 300 ms) par hasard ?
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Gillou53
Code sa première boucle
Code sa première boucle
Messages : 15
Enregistré le : 19 août 2020, 13:11

Re: Vijeo-Designer 6.2 interaction IO Scanner / Ecriture

Message par Gillou53 »

philou77 a écrit : 19 août 2020, 17:34 Salut !

Dans ton script 3 tu as :
R_VED_MANU.write(CONS_VANNE.getFloatValue());

tu écris (Write) donc une valeur que tu lis (Get) :
Cette valeur ne serait pas mise à jour par ton script n*1 (toutes les 300 ms) par hasard ?
En effet; c'est belle et bien le cas; j'inhibe néanmoins dans mon scripte 1 la mise à jour de la variable lors du passage suivant :

Code : Tout sélectionner

// Si une écriture vient d'avoir lieu, on zap ce tour
// après avoir reseté l'info
if ((ECRIRE_VANNE.getIntValue() == 1)||(ECRIRE_CONS_VANNE.getIntValue() == 1))
{
    ECRIRE_VANNE.write(0);
    ECRIRE_CONS_VANNE.write(0);
    return;
}
Je suis conscient d'avoir des accès en lecture et en écriture rapprochés; mais je ne vois pas de moyen pour inhiber la lecture le temps que l'écriture se face
:ugeek: Automaticien dans le domaine de l'eau depuis plus de 10 ans.
Je travail sur les gammes TSX et M340, ainsi qu'avec les IHM Schneider.
Je travail également avec des systèmes de télégestion.
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Vijeo-Designer 6.2 interaction IO Scanner / Ecriture

Message par philou77 »

Pour moi, ça se mord la queue !

tu as surement une affichage numérique de ta consigne avec la saisie activée ?
Pourquoi ne pas utiliser le bit de saisie clavier, de cette manière, tu ne lis pas ta valeur si tu viens de la modifier !
et l'écriture remet ce bit de saisie à Zéro.

La lecture ne devrait pas remettre à zéro les bits d'interdictions à mon avis.

DE plus, l'acquisition des datas se fait en général toutes les Secondes dans les ihm.

Alors un script toutes les 300ms, il sera exécuté 3 fois !!
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Gillou53
Code sa première boucle
Code sa première boucle
Messages : 15
Enregistré le : 19 août 2020, 13:11

Re: Vijeo-Designer 6.2 interaction IO Scanner / Ecriture

Message par Gillou53 »

philou77 a écrit : 19 août 2020, 19:36 Pour moi, ça se mord la queue !

tu as surement une affichage numérique de ta consigne avec la saisie activée ?
Pourquoi ne pas utiliser le bit de saisie clavier, de cette manière, tu ne lis pas ta valeur si tu viens de la modifier !
et l'écriture remet ce bit de saisie à Zéro.

La lecture ne devrait pas remettre à zéro les bits d'interdictions à mon avis.

DE plus, l'acquisition des datas se fait en général toutes les Secondes dans les ihm.

Alors un script toutes les 300ms, il sera exécuté 3 fois !!
C'est effectivement le bit de saisie clavier qui me sert à déclencher le scripte (ECRIRE_CONS_VANNE).

Je pense que tu as raison sur le fait que l'I/O scanner scrute à la cadence d'une fois par seconde; biens que ce soit la gamme basse de la cadence demandée (scrutation moyenne = 1 à 4 fois par sec; en rapide, il peu monter à 20 fois).
Ce qui expliquerais mon problème étant donné le rafraîchissement; mais ça resterais quand même bizarre, qu'une information en attente d'écriture reste lue à sa valeur précédente !

1 le scripte d'écriture (3) s'exécute :

Code : Tout sélectionner

// info Locale -> Info Scannée (écriture nouvelle valeur)
R_VED_MANU.write(CONS_VANNE.getFloatValue());
quelques centaines de millisecondes plus tard
2 le scripte de mis à jour (1); remettant l'information à sa valeur initiale :

Code : Tout sélectionner

// Info Scannée -> info Locale (écriture ancienne valeur !!!)
 CONS_VANNE.write(R_VED_MANU.getFloatValue());
3 le scripte d'écriture (3) s'exécute :

Code : Tout sélectionner

//  info Locale -> Info Scannée (écriture ancienne valeur; donc annulation de l'écriture)
R_VED_MANU.write(CONS_VANNE.getFloatValue());
J'ai du mal à croire que ça puisse ce passer comme cela.
Le programme fonctionne parfaitement en simulation; mais en pratique; c'est une autre histoire, et je n'ai pas l'IHM sous la main pour tester !
:ugeek: Automaticien dans le domaine de l'eau depuis plus de 10 ans.
Je travail sur les gammes TSX et M340, ainsi qu'avec les IHM Schneider.
Je travail également avec des systèmes de télégestion.
Gillou53
Code sa première boucle
Code sa première boucle
Messages : 15
Enregistré le : 19 août 2020, 13:11

Re: Vijeo-Designer 6.2 interaction IO Scanner / Ecriture

Message par Gillou53 »

Je viens de tomber là dessus en parcourant la doc de vijeo :
write
Fonction

Permet au script d'interagir avec les variables Vijeo-Designer.



Avant d'utiliser les variables externes, vous devrez vérifier l'intégrité des données (isDataQualityGood).

Lorsque vous utilisez cette méthode de script pour écrire vers la même variable externe à plusieurs reprises de façon consécutive dans un très court délai (de moins de 1 seconde), certaines opérations d'écriture peuvent être supprimées afin d'optimiser l'efficacité de la communication. L'opération d'écriture finale est toujours effectuée.

Si chaque opération d'écriture vers la variable externe est exigée afin que l'équipement s'exécute correctement, utilisez les opérations d'écriture Bit et Mot disponibles dans les commutateurs, les affichages de texte et de message, les courbes à barre et de compteur, les sélecteurs, les touches de fonction, l'animation sur appui, et les actions d'alarme de variable.
:ugeek: Automaticien dans le domaine de l'eau depuis plus de 10 ans.
Je travail sur les gammes TSX et M340, ainsi qu'avec les IHM Schneider.
Je travail également avec des systèmes de télégestion.
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Vijeo-Designer 6.2 interaction IO Scanner / Ecriture

Message par philou77 »

Re !

Donc c'est le dernier qui écrit qui gagne !

et c'est souvent ton script n° 1 !

Temporise le reset du blocage !
et je pense que c'est pas au scipt n°1 de faire le reset du blocage
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Gillou53
Code sa première boucle
Code sa première boucle
Messages : 15
Enregistré le : 19 août 2020, 13:11

Re: Vijeo-Designer 6.2 interaction IO Scanner / Ecriture

Message par Gillou53 »

philou77 a écrit : 19 août 2020, 21:29 Re !

Donc c'est le dernier qui écrit qui gagne !

et c'est souvent ton script n° 1 !

Temporise le reset du blocage !
et je pense que c'est pas au scipt n°1 de faire le reset du blocage
Le seul truc c'est qu'il n'existe pas de temporisation intégré dans vijeo et une simple boucle figerait complètement l'IHM et l'I/Oscanner et ne résoudrais donc rien ! (cf : FAQ Schneider : Can I Add a delay in a script action...)
Donc l'utilisation du scripte périodique pour resetter ma variable, semble une bonne solution; en créant un décompte à chaque passage, et une réinitialisation une fois à 0 !

d'autre part, si quelqu'un utilise la méthode de variable "isDataQualityGood", à priori, ça pourrais également aider à résoudre mon problème (cf : aide de la méthode "write")

PS : pour rappel; je n'ai pas accès a l'IHM en ce moment, je ne peu donc travailler qu'en théorique et en mode simulation (qui ne génère pas le bug !).
:ugeek: Automaticien dans le domaine de l'eau depuis plus de 10 ans.
Je travail sur les gammes TSX et M340, ainsi qu'avec les IHM Schneider.
Je travail également avec des systèmes de télégestion.
Répondre