IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Automation Discussion :

WRITE VAR sur Unity Pro


Sujet :

Automation

  1. #1
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut WRITE VAR sur Unity Pro
    Bonjour,
    J'utilise la fonction WRITE_VAR pour envoyer des requêtes Modbus RTU sur un contrôleur avec Unity Pro depuis un automate Schneider M340.
    La fonction utilise un tableau INT pour envoyer les données. Le problème est que mes données sont en bit, word et dword. pour ce qui est des Word, pas de souci, c'est le même format. A priori je devrais pouvoir me débrouiller avec les bit mais je n'arrive pas à envoyer de double mot du fait du format INT du tableau d'émission.

    Quelqu'un aurait il une idée ?

    Merci d'avance.

    Pascal.

  2. #2
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut wwwwwwwwww
    slts,
    pour les bits il faut les copier sur des mots (INT ou WORD)
    Pour les DWORD ça équivaut à envoyer 2 mots WORD
    ceci dit tu dois envoyer ça ou ? vers quoi ? ???

    Exemple pour envoyer le tableau %MW100 à %MW110 vers un autre automate M340 (B)
    -Sur automate M240 (A) déclarer une variable DWORD_A de type DWORD à l’adresse absolue %MW100 (ça occupe %MW100 et %MW101)
    -Sur automate M240 (B) déclarer une variable DWORD_B de type DWORD à l’adresse absolue %MW100
    Après le WRITE_VAR , On doit retrouver la valeur de DWORD_A de l’automate (A) dans la variable DWORD_B de l’automate (B)
    Compris ?

    itasoft@free.fr

  3. #3
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut
    Salut,

    Merci pour ta réponse.
    En fait il s'agit d'un contrôleur d'axe électrique en Modbus RTU sur 16 mots, position, accélération, décélération, etc ... Tout ce qui est relatif à une position est en DWORD. J'ai créé mon tableau mais visiblement on ne peut le créer qu'en INT. J'ai adressé mes variables tableau depuis %MW100. Lorsque je crée ma variable position en DWORD elle ne passe pas dans le tableau (incompatibilité de type).
    ça parait surement bête pour un pro mais en TIA Portal ça ne fonctionne pas pareil (je maîtrise, unity j'ai découvert vendredi) quant à GP pro (où mon pilotage Modbus RTU fonctionne nickel) c'est encore plus simple donc je ne peux pas m'en inspirer.
    Nom : BLOC.jpg
Affichages : 6727
Taille : 16,4 KoNom : VARIABLES.jpg
Affichages : 6760
Taille : 68,7 Ko
    voici comment j'ai défini ça mais tout ce qui est en DWORD (position, area 1, area 2 et INP) impossible de le renseigner.

    Une idée ?

    Merci d'avance
    Désolé si je parais largué mais là je suis en phase d'apprentissage , Je bosse les docs mais là je dois trouver pour avancer.

    Pascal.

  4. #4
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut wwwwwww
    slts,
    c'est normal , c'est un tableau de INT , il faut pas utiliser de tableau mais des variables indépendantes avec chacune une adresses absolue,
    EX:
    Data_emission_00 DWORD %MW100
    Data_emission_01 DWORD %MW102
    Data_emission_02 DWORD %MW104
    Data_emission_03 WORD %MW106
    Data_emission_04 WORD %MW107
    Data_emission_05 WORD %MW108


    Nom : ________IP.JPG
Affichages : 6861
Taille : 35,2 Ko

  5. #5
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut
    Hello,

    Merci de ta réactivité, c'est vraiment génial
    Si je comprends bien je crée une variable position en DWORD à l'adresse %MW102, etc ...

    J'essaie ça lundi, j'ai hâte de gérer ça, après j'attaque un contrôleur en Ethernet/IP sur ma carte NOC401

    Encore merci.

    Pascal.

  6. #6
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut wwwwwwww
    slts,

    la table d’émission doit être obligatoirement un tableau de INT , Sinon l'autre façon de faire sans utiliser aucune adresses absolues (%MW) ni dans le Tableau
    pour envoyer des mots doubles 32 bits type DINT il faut ranger les poids faibles et forts du mot dans 2 mots du tableau
    EX :
    Déclarer la variable VITESSE Type DINT et y mettre la valeur de la vitesse ,pas mettre d’adresse absolue (%MW)

    VITESSE:=123456;

    (* Ranger la vitesse dans 2 mots INT du tableau *)
    Data_emission[0]:=LOW_INT(VITESSE);
    Data_emission[1]:=HIGH_INT(VITESSE);

  7. #7
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut
    Salut,

    J'ai noté, je viens de recommencer mon programme suivant ta dernière remarque sans utiliser les adresses absolues.
    J'essaie ça demain en espérant que mon axe bouge.

    Je ne ferme pas la discussion tout de suite, je te tiendrais au courant demain. Si ça marche ce sera quand même grâce à toi.

    Encore merci

    Pascal.

  8. #8
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut
    Salut,
    Désolé j'ai travaillé sur un autre projet cette semaine et je ne me suis remis sur unity que vendredi.
    J'ai bien préparé la trame générale, je pense avoir compris mais je crois avoir des problèmes sur la transmission de bit au final.
    J'ai un mot dans mon contrôleur en 90C2 (hexa) qui me permet de mettre sous tension le circuit d'asservissement, le retour à l'origine etc .. (c'est un contrôleur d'axe électrique).
    Je galère toujours avec ce maudit format INT sur le bloc WRITE VAR.je pense que mes adresses sont ok puisque j'ai essayé avec les adresses Modbus classique et directement en 90C2 donc c'est ma technique qui doit pas fonctionner.

    En fait la première étape est de mettre mon bit 10 du mot en 90C2 à 1 avant de faire quoique soit. Problème, comment écrire directement dans le bit 10 ? De plus ce bit doit impérativement rester à 1 pour toutes les autres opérations.
    Voici ce que j'ai fait :

    Nom : BLOC.jpg
Affichages : 6960
Taille : 28,8 Ko

    En espérant pouvoir bénéficier encore de ton aide.

    Merci d'avance.
    Pascal.

  9. #9
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut xxxxxxxxxxxxx
    Slts,
    On ne peut pas commander un bit, On envoi tout le mot INT de 16 bits
    Admettons que dans la variable Type INT COMMANDES on as 16 bits de commandes
    Bit 0=Marche mis à 1=Marche mis à 0=Arrêt
    Bit 1=Sens Avant
    Bit 2=Sens Arrière
    Ect...........

    (*mise à 1 du bit 0 (marche)*)
    COMMANDES :=COMMANDES OR 2#0000000000000001
    (*mise à 1 du bit 1 (Sens Avant)*)
    COMMANDES :=COMMANDES OR 2#0000000000000010
    Envoi par WRITE_VAR

    (*mise à 0 du bit 0 (pour faire un arrêt)*)
    COMMANDES :=COMMANDES AND 2#1111111111111110
    (*mise à 0 du bit 1 (arrêt Sens Avant)*)
    COMMANDES :=COMMANDES AND 2#1111111111111101
    Envoi par WRITE_VAR

  10. #10
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut
    Salut,

    T'es génial. Toujours aussi réactif
    J'avais pas fais gaffe qu'on pouvait associer un nombre binaire à une valeur INT. Décidément j'ai du mal avec ce format. J'aurais dû embarquer mon M340 pour essayer ça aujourd'hui. Je vais préparer (heureusement j'ai le PC) et lundi matin à la première heure j'essaie, je te tiens au courant.

    Encore merci. A lundi

    Pascal.

  11. #11
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut
    Salut,

    Allez promis c'est la dernière après je t'embête plus. en fait je galère toujours avec le pilotage des bits. depuis hier je pense que j'ai tout essayé en utilisant ta méthode ( que j'espère avoir comprit) mais je n'y arrive pas. J'ai essayé mes adresses de mots, de bits mais rien n'y fait. j'ai vérifié le câblage, pas de soucis de ce côté là et j'ai refait un test sur un Proface où j'avais développé un programme en Modbus RTU sur ce contrôleur. ça marche nickel. Mais unity je bloque :-(
    voici le bloc que j'ai écrit, si tu pouvais juste me dire si tu penses que c'est ok pour toi. J'ai essayé avec %MW en OBJ sur 1 mot (NB), j'ai essayé en %M sur 16 bits (NB), ça ne fonctionne pas. J'ai essayé aussi de renseigner le mot 2#0000000000000001 en mettant l'adresse du bit uniquement (comme je fais sur Proface avec les adresses Modbus en 0000001 pour les coils) et en transmettant un OBJ %M sur un nombre transmis de 1 (NB).
    voici le bloc :
    Nom : WRITE_VAR.jpg
Affichages : 6073
Taille : 19,5 Ko

    Par contre j'ai remarqué ce soir que la led de la com série de mon M340 ne clignote pas alors que tous mes paramètres série sont ok.
    Si tu me confirmes que mon bloc est valide c'est qu'il y a un problème matériel ou que je zappe une étape pour activer la com.

    Dans l'espoir que tu m'aides une dernière fois. j'espère que je vais moins galérer sur l'Ethernet/IP

    Merci encore ;-)

    Pascal.

  12. #12
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut xxx
    Slts,
    La première chose à faire c’est de savoir si ça communique , dans le bloc WRITE_VAR
    c’est quoi le bit Start_SVON ?

  13. #13
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut
    Salut,

    En fait c'est juste pour me laisser le temps de faire les étapes une par une en forçage. Le but pour l'instant c'est de faire des tests et après de faire une programmation propre.
    Les étapes obligatoire c'est :
    1 - Passage du contrôleur en mode série Modbus RTU. bit 30(h) à l'adresse 90C2(h)
    2 - SVON c'est la mise sous tension du circuit codeur de l'axe électrique bit 19(h) à l'adresse 90C1(h)
    3 - SETUP : Le retour à l'origine de l'axe bit 1C à l'adresse 90C1(h). il y a un mot à l'adresse 90C1 avec plusieurs bit de fonctions.
    Après on peut faire les opérations de mouvement en laissant le bit série et le bit SVON à 1 en permanence.
    Du coup j'ai ajouté 3 contacts Start série, SVON et SETUP pour les forcer un par un une fois que j'ai chargé le programme. Ils disparaitront dans le programme puisque j'ai des retours de contrôles ( que je lirais avec READ_VAR du coup). Si jamais j'arrive à comprendre comment envoyer les requêtes je devrais pour lire les retours ( enfin j'espère).
    Je pense avoir comprit tes explications sur la trame, j'ai fait un tableau INT de 16 mots, j'ai convertie les doubles mots de position etc.. en High et Low pour les faire entrer dans le tableau après j'enverrais les 16 mots de ma trame (je croise les doigts). Mais sans passer par les étapes cités en début de réponse je ne peux rien faire.

    Je pensais pas coincer à ce point, je dois rater un détail.

    Pascal.

  14. #14
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut test com
    Slts,
    Avant toutes chose il faut constater que la communication fonctionne,
    pour ça faire une lecture avec le bloc READ_VAR et lire une adresse et mettre la valeur lue dans une variable de type INT ex : VARINT0
    Dans une table d’animation mettre une valeur quelconque dans VARINT0 si cette valeur est écrasée par la valeur lue ça veut dire que ça communique si cette valeur reste ça veut dire que ça communique pas
    Pour les tests le bloc READ_VAR doit être commandé par un front montant du bit horloge 100ms %S5 mais on ne peut pas faire de front montant sur le bit %S5 alors il faut d’abord le copier un bit ex : %M5 et faire le front montant avec ce bit. Comme dans mon exemple sur le message du 05/08/2018 à 16H59
    Mettre un time Out dans le 3ème mot du tableau Management sinon ça bloque le bloc READ_VAR
    Bb

  15. #15
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut
    Salut,

    J'avais remarqué le bit système %S5 ajouté sur un des schémas mais je reconnais que je n'ai pas été vérifier à quoi il correspondait je suis désolé.
    Je vais tester la com avec tes indications. Demain férié, jeudi il va falloir que je me mette sur autre chose, vendredi matin j'essaie. Comme j'ai mon PC je vais pouvoir préparer ça ce soir.

    Merci de ta patience c'est vraiment sympa.

    Pascal.

  16. #16
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut ok
    slts,
    OK,
    Pour les tests je dirais même d'utiliser le bit horloge %S6 (1s) au lieu du bit %S5 (100ms) pour les tests il vaut mieux ralentir la COM

  17. #17
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut
    Salut,

    C'est bon j'ai préparé mon test.
    Je peux faire mon retour à l'origine par un logiciel indépendant et ensuite j'ai un bit de retour qui est obligatoirement à 1 ensuite à l'adresse 9084 donc je vais essayer de lire ça. j'ai ajouté le time out au mot 3.
    Nom : READ_VAR.jpg
Affichages : 6076
Taille : 24,9 Ko
    Nom : TIMEOUT.jpg
Affichages : 5799
Taille : 33,1 Ko

    Je ne sais pas si je vais tenir jusqu'à vendredi, je vais prioriser ça demain matin.

    Je te tiens au courant.

    Pascal.

  18. #18
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut
    Salut,

    je suis sur mes tests et je viens de valider que la com est ok. J'ai bien la led série qui clignote et lorsque je déconnecte j'ai une erreur de communication sur mon contrôleur ( normal). J'arrive à lire la position de mon axe ( que je déplace avec un logiciel indépendant).
    Par contre, l'écriture/lecture de bit, impossible. J'ai essayé les adresses que j'utilise dans mon Proface, les adresses que j'utilise sur un simulateur Modbus ( Modbus doctor). Dans les 2 cas ça marche mais pas avec le Schneider. J'ai mis des time out sur mes blocs et je les pilote avec les bits %S5 et %S6 pour la lecture et les adresses des mots 9084h et 90C1h.
    Nom : POSITION.jpg
Affichages : 6318
Taille : 60,1 Ko

    Je suis désespéré ( pas d'inquiétude sur la position c'est au centième de mm)

    Pascal.

  19. #19
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut lect
    slts,
    donc le READ_VAR pour la lecture de l'adresse 9084h fonctionne c'est bien ça ?

  20. #20
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut
    Salut,

    Non, le 9084h c'est 16 bits de validation qui sont l'image des 16 bits de commande à l'adresse 90C1h.
    Ensuite il y a les adresses de données ( lecture vitesse, position, etc.. et écriture vitesse, position, accélération, etc ...), c'est ça qui fonctionne. A priori tout ce qui est données de mot je lis nickel, je ne peux pas envoyer de trame. du fait qu'un des bits doit être à 1 en permanence avant toutes opérations de pilotage.
    Ce sont uniquement les bits que je n'arrive ni à lire, ni à écrire.
    Encore que, bizarrement, mon bit de passage du contrôleur en liaison série semble fonctionner. Il est seul sur un mot et j'envoie "1" à l'adresse du bit. L'adresse du mot est en 90C2h et l'adresse du bit est 30h.J'envoie un bit %M, sur l'adresse et apparemment ça passe l'automate en liaison.
    Ce qui est bizarre c'est que le rapport ne semble pas donner de défaut en retour.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 8
    Dernier message: 07/03/2012, 21h34
  2. Création d'une tempo sur Unity Pro XL
    Par Yokooo dans le forum Automation
    Réponses: 3
    Dernier message: 07/06/2010, 09h22
  3. Réponses: 0
    Dernier message: 08/07/2008, 11h11
  4. Manque de mémoire virtuelle sur Win2000 pro
    Par annedjomo dans le forum Windows Serveur
    Réponses: 7
    Dernier message: 02/03/2005, 10h16
  5. BDE lent sur XP PRO
    Par Daniel Nespoulous dans le forum Bases de données
    Réponses: 4
    Dernier message: 11/06/2004, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo