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 :

[Unity Pro XL] Problème déclaration tableau de mots.


Sujet :

Automation

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ambèrieu
    Inscrit en
    Janvier 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ambèrieu
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 16
    Points : 11
    Points
    11
    Par défaut [Unity Pro XL] Problème déclaration tableau de mots.
    Bonjour,

    Désolé je poste beaucoup en ce moment mais je rencontre plein de problèmes avec ce logiciel, encore beaucoup de mystères pour moi...

    Voilà mon problème, dans un bloc "OPERATE" j'ai écris l'instruction suivante: %MW300:12:=0;

    Ce que je veux en fait c'est que lorsque ce bloc est à 1 les mots %MW300 à %MW311 prennent comme valeur zéro.

    Seulement lorsque j'analyse le projet voilà l'erreur que m'indique Unity :
    {programe_1 : [MAST]} : (l: 12, c: 8) E1092 les types de données ne correspondent pas ('%MW300:12:ARRAY [0..11] OF INT'<->'0: DINT')


    J'ai donc fouillé sur le net et j'ai trouvé cette page : http://www.schneider-electric.fr/sit...&redirect=true

    Où il est dit qu'il faut cocher une option dans aller dans Outils>Options du projet>Extension de langage

    Sauf que Extension de langage n’apparaît nul part dans l'arborescence des options...

    Je pourrais très bien m'en passer et utiliser une instruction ST à la place du bloc OPERATE à chaque fois que je veux changer la valeur de plusieurs mots, seulement si j'ai 80 tableaux différents il me faudra utiliser 80 sous programmes différents... Pas très bien optimisé

    L'un d'entre vous a-t-il déjà rencontré ce problème et l'a solutionné ?

    Merci d'avance,

    Flo.

  2. #2
    Membre habitué
    Homme Profil pro
    Automaticien
    Inscrit en
    Novembre 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2006
    Messages : 113
    Points : 130
    Points
    130
    Par défaut
    Bonjour,

    L'option que tu cherches ce trouve dans Outil\Options du Projet\Variables. Et elle s'appelle : Variables de tableau représentées directement.
    Par contre chez moi, ça ne change rien j'ai le même message d'erreur.
    Personnellement, je crée un tableau avec des valeurs nulles dedans de la même taille que le tableau "Principal".
    Ensuite dans le bloc OPERATE, j'écris Tableau_Principale := Tableau_Vide;

    Vu tes précédents messages, j'ai l'impression que tu n'es pas trop habitué à Unity, donc je me permet un commentaire.
    Pense bien que tu n'es pas obligé, à l'inverse de PL7, d’adresser toutes tes variables. Les seules variables à adresser avec Unity sont les variables qui vont être échangées avec une supervision ou les variables Paramètres que tu voudras sauvegarder. Toutes les autres non pas besoin de l'être.

    Bon courage

  3. #3
    Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2011
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Mai 2011
    Messages : 68
    Points : 64
    Points
    64
    Par défaut
    Salut,

    L'expression %MW300:12:=0; ne peut pas fonctionner car tu essaies de copier un INT dans un ARRAY.

    La solution est la fonction suivante: MOVE_INT_ARINT(0,%MW300:12);


    Ensuite, si c'est pas déjà fait, cette fonction ne peut marche QUE si les options "Variables de tableau représentées directement" et "Autoriser les tableaux dynamiques (ANY_ARRAY_XXX)" sont cochées dans les option du projets (clic: Outils / Options du projet / Variables)

    Bonne journée.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ambèrieu
    Inscrit en
    Janvier 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ambèrieu
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Tout d'abord merci pour vos réponses.

    EvT Chess38 : J'avais déjà coché ces options dans les options. De ce que j'ai compris pour mon exemple dans le bloc OPERATE il faut que je rentre "%MW300:12:=%MW312:12" si les mots %MW12 à %MW323 sont tous à zéros ?

    Et je ne comprend pas :

    Vu tes précédents messages, j'ai l'impression que tu n'es pas trop habitué à Unity, donc je me permet un commentaire.
    Pense bien que tu n'es pas obligé, à l'inverse de PL7, d’adresser toutes tes variables. Les seules variables à adresser avec Unity sont les variables qui vont être échangées avec une supervision ou les variables Paramètres que tu voudras sauvegarder. Toutes les autres non pas besoin de l'être.
    Un exemple ?

    LePingouin : L'instruction "MOVE_INT_ARINT(0,%MW300:12);" fonctionne bien. Si j'ai bien compris la fonction déplace un mot ou valeur "INT" dans un tableau d'entiers "ARINT", il est possible de cibler que certains mots du tableau ?

    Merci encore et désolé pour ces questions, c'est un peu la redécouverte de la programmation pour avec ce logiciel.

  5. #5
    Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2011
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Mai 2011
    Messages : 68
    Points : 64
    Points
    64
    Par défaut
    -
    Ce que veut dire EvT_Chess38 c'est que tu peux déclarer des variables ou des tableaux sans leur affecter d'adresse.
    Par exemple pour créer un tableau de 15 INT, tu vas dans les variables élémentaires, tu entres un mnémonique dans la colonne Nom puis ARRAY [0..14] OF INT dans la colonne Type. La colonne adresse peut très bien rester vide.


    -

    Oui la fonction MOVE_***_*** recopie une valeur dans toutes les cases d'un tableau.
    Tu peux l'utiliser avec tous les types de données: MOVE_BOOL_AREBOOL, MOVE_WORD_ARWORD, MOVE_DWORD_ARDWORD, MOVE_INT_ARINT, MOVE_DINT_ARDINT, MOVE_REAL_ARREAL.


    -
    Pour cibler que certains mots du tableau avec un OPERATE, tu dois les faire un à un:
    Ton_Tableau[5]:=0; --> Inscrit 0 à la 6eme case du tableau
    %MW155[3]:=4; --> Inscrit 4 à l'adresse %MW158

    En langage ST tu peux aller plus loin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FOR i:=3 TO 8 DO
    	Ton_Tableau[i]:=0;
    END_FOR;
    --> Ce code va inscrire 0 dans les cases 4 à 9 du tableau.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ambèrieu
    Inscrit en
    Janvier 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ambèrieu
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Salut à vous,

    Tout d'abord désolé pour le silence radio... J'ai pas eu le temps de répondre avant (on attaque le gros du problème sur notre projet et je suis le seul assigné à la prog, mon prof ne connais pas non plus le logiciel alors je suis un peu débordé ^^)

    Déclaration variables :

    Compris, j'étais pas sûr du sens de sa phrase, c'est plutôt une bonne chose que le mappage soit "automatique" mais risqué si on travail à plusieurs sur la même appli... Il faudra que je sois attentif.

    Fonction MOVE :

    J'ai lu l'aide qui parlait de cette fonction, d'ailleurs très bien faite cette aide sauf pour les messages d'erreur qui au début son difficile à comprendre . J'ai bidouillé un peu cette fonction pour voir comme elle réagissait, c'est une bonne chose à savoir je risque de m'en servir souvent.

    Tableaux :

    C'est noté pour cette partie, je pense beaucoup utiliser le langage structuré en réalité, après de nombreux essais c'est beaucoup plus clair pour moi, je ne sais pas vous. Le LD c'est bien pour animer les entrées et sorties dans un Grafcet et c'est très visuel pour comprendre ce qu'il se passe, mais le structuré est beaucoup plus précis et propre... Enfin ça n'est que mon avis.

    En tous cas merci pour votre temps j'ai pu comprendre beaucoup de choses grâce à vous !

    Bonne soirée à vous,


    Flo.

  7. #7
    Membre habitué
    Homme Profil pro
    Automaticien
    Inscrit en
    Novembre 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2006
    Messages : 113
    Points : 130
    Points
    130
    Par défaut
    Salut,

    Pour le structuré, beaucoup d'industrielle ne l'aime pas car les "anciens" des services de maintenance ne le connaissent pas.
    C'est beaucoup plus visuel pour eux d'avoir du LADDER.

    Après moi je l'utilise tout de meme pour faire des fonctions qui n'auront pas à etre modifiée par la suite.
    Je m'en sert aussi pour faire mes grafcets. Car c'est toujours plus simple pour intégrer une étape, et pour faire des modifications en ligne.

    Sinon ça me surprend que ton prof te donne un projet sur un logiciel qu'il ne connait pas. il va avoir du mal à l'évaluer!
    Sans indiscretion tu dois faire quoi dans ton projet?

  8. #8
    Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2011
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Mai 2011
    Messages : 68
    Points : 64
    Points
    64
    Par défaut
    C'est vrai, le structuré est peu utilisé en industrie, à mon grand regret car c'est mon langage préféré (car je préfère programmer au clavier qu'à ma souris...). Mais il faut avouer que quand on est en mise en service ou en dépannage et qu'il faut débugger un programme en urgence avec le client sur le dos qui hurle car chaque minute d’arrêt de la machine lui coute de l'argent, ben on est bien contant que le programme soit en ladder

    Et c'est vrai aussi que dans de nombreuses petites usines il n'y a pas d'automaticiens, c'est la maintenance qui dépanne et ils ne connaissent que le ladder.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Ambèrieu
    Inscrit en
    Janvier 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ambèrieu
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Salut les gars,

    Désolé pour le silence radio j'étais déconnecté ces derniers temps.

    Je suis de votre avis avec le structuré, simple efficace et maniable. Faut juste le comprendre..

    Pour ce qui est de mon prof, il maîtrise parfaitement le PL7 pro mais découvre comme moi Unity pro XL, ce qui complique un peu la tâche mais vu qu'il connait déjà la programmation générale ce n'est pas la cata...

    Je suis chargé de tout le programme, sachant que nous concevons qu'un poste de la machine, un poste hydraulique, grosso modo le programme que je développe sera intégré programme général que le client a déjà développé.

    Flo.

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2023
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2023
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je rencontre un problème similaire et je n'ai pas trouvé de solution :
    Lorsque j'essaye d'additionner des mots dans un bloc operate, un message d'erreur apparaît.
    ex : W3 := W3 + W2;

    message d'erreur :
    (l: 14, c: 8) E1068 le type de données de l'opérande n'est pas adapté à l'opération
    (l: 14, c: 8) E1092 les types de données ne correspondent pas ('W3:WORD'<->'W3 + W2:ANY_NUM')

    Et lorsque dans le bloc operate j'écris : %MW30 := %MW30 + %MW20, je n'ai plus de message d'erreur mais un avertissement :

    {Variables et instances FB} : Avertissement : 'W3' chevauche la mémoire, en raison d'affectation sur l'adresse '%MW30' équivalente et de l'écriture d'adresses directes ou de bits extraits.
    {A1_mvt_Horizontaux : [MAST]} : Avertissement : l'instruction '%MW30' chevauche la mémoire en raison d'affectation sur des variables ou de l'écriture d'adresses équivalentes ou de bits extraits.

    Si quelqu'un à une solution je suis preneur

    PS: j'ai essayé de faire des conversions WORD_TO_INT ou utilisé le bloc "ADD" mais ça ne marche toujours pas.

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 90
    Points : 126
    Points
    126
    Par défaut
    Salut,


    ex : W3 := W3 + W2;

    message d'erreur :
    (l: 14, c: 8) E1068 le type de données de l'opérande n'est pas adapté à l'opération
    (l: 14, c: 8) E1092 les types de données ne correspondent pas ('W3:WORD'<->'W3 + W2:ANY_NUM')
    Le compilateur te donne la solution : les variables que tu veux additionner ne sont pas du même type de données, ce qui peut révéler un problème de conception du programme : pour un programme de qualité, on ne mélange pas les choux et les carottes.
    W3 est de type WORD, ce qui en soi est déjà un problème de qualité : s'il faut faire des opération arithmétiques avec W3, un type INT, UINT, DINT ou UDINT serait plus approprié (on peut additionner des entiers).
    Le type WORD défini un paquet de 16 bits, ou une chaine de bits : c'est un type de donnée pratique pour regrouper des infos booléennes dans un paquet (W3 par exemple).
    Ce n'est pas la valeur entière correspondante à W3 qui aura du sens, mais chaque bit de W3 aura une signification propre.

    Et lorsque dans le bloc operate j'écris : %MW30 := %MW30 + %MW20, je n'ai plus de message d'erreur mais un avertissement :

    {Variables et instances FB} : Avertissement : 'W3' chevauche la mémoire, en raison d'affectation sur l'adresse '%MW30' équivalente et de l'écriture d'adresses directes ou de bits extraits.
    {A1_mvt_Hor
    Le compilateur t'indique que le résultat de l'équation va modifier un des opérandes de l'équation. Ce n'est qu'un avertissement, on a le droit de faire ça si c'est vraiment ce que qu'on veut faire, mais c'est bien d'avoir un oeil sur ce genre de choses.
    Si ce type de messages te casse les pieds, tu a le droit de modifier les options du compilateur pour les désactiver.
    Tout dépend des impératifs que tu te mets (ou qu'on t'impose !) en terme de qualité logicielle ; généralement, lever les erreurs et les avertissements est une bonne idée, les désactiver peut t'amener à ne pas détecter des erreurs, aussi bien les flagrantes que les plus subtiles...
    Le fait d'utiliser les variables localisées n'est pas la meilleure idée pour résoudre les problèmes de type de données incompatibles.
    Il vaut mieux prendre un peu de temps pour reprendre le typage des variables, de façon que les équations puissent s'appliquer directement, sans passer par les fonctions de changement de type.
    Si _vraiment_ W3 doit être de type WORD, alors il faudrait écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    W3 := W3 + int_to_word( W2 );

Discussions similaires

  1. Problème déclaration tableau de pointeur.
    Par BlackStitch dans le forum Débuter
    Réponses: 2
    Dernier message: 16/12/2014, 01h35
  2. Problème simulateur Unity Pro
    Par ControlBoy dans le forum Automation
    Réponses: 10
    Dernier message: 05/11/2014, 10h42
  3. Problème déclaration de tableau d'enregistrement
    Par cladchildren dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 27/04/2011, 01h23
  4. [UNITY PRO XL] problème commande READ_VAR
    Par padawann10 dans le forum Automation
    Réponses: 4
    Dernier message: 22/02/2010, 12h36
  5. Problème de tableau
    Par krfa1 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 08/02/2005, 11h09

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