Machine Expert Mappage I/O Ethernet IP

Forum traitant des automates industriels de marque Schneider - Telemecanique
MiGaNuTs
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1619
Enregistré le : 12 nov. 2015, 21:02
Localisation : 45 - Loiret
Contact :

Re: Machine Expert Mappage I/O Ethernet IP

Message par MiGaNuTs »

dpo a écrit : 09 avr. 2026, 21:27 y a plein d'astuces
mettre le mot1 reçu dans une variable localisés temp1 AT %MW1000:WORD
mettre le mot2 reçu dans une variable localisés temp2 AT %MW1001:WORD

et hop on a le résultat temp_result localisée AT %MW1000:DWORD
Ca peut marcher aussi oui. Sauf quand le compilateur interdit les chevauchements d'adresse de variables.
Au mieux on a juste un warning, au pire ca compile pas.
Horror484
Asservi son premier moteur
Asservi son premier moteur
Messages : 27
Enregistré le : 31 oct. 2022, 13:59

Re: Machine Expert Mappage I/O Ethernet IP

Message par Horror484 »

Bonjour

J'ai passé beaucoup de temps sur ce genre de problème

J'ai eu des blocages sur un EIP entre 2 PLC (M580 et M251). Le M251 est très fiable et très rapide par contre il yva 2 3 choses à savoir.

La première c est relire la doc sur le chevauchement des données de com et réaliser des tests sur 1 mot. Tu dois lire la doc sur le m251 partie Configuration de la com également. Très important.

Déjà oublié les bits, array of int , dword, type structuré le plus simple est d'envoyer que des mots dans la table d'échange. Cette table est configurée dans ton m240 via un dtm EIP (que des mots uniquements definis en dur dans le dtm). Tu donnes la table (exemple 100 mots avec démarrage au mot 1) et tu peux définir la lecture de la table comme suit :

Var1 AT %MW2000 : WORD
Var2 AT %MW2002 : WORD

Alors pour le chevauchement jdes mots en com e ne sais plus exactement mais il me semble que c est tous les 2 mots que tu peux lire (à vérifier). Tu vas trouver les données dans la doc Machine Expert ou Ethernet IP ou M251. En gros 1 DWORD = 2 WORD = 4 BYTES et on ne peut pas se faire se chevauffer les DWORD (à vérifier mais c est un truc de merde du genre).

Ensuite côté équipement M251 il faut configurer la lecture de la table en EIP. Tu peux soit passer par un tableau d échange a configurer (en m251 en mode esclave) soit directement taper les %MW comme au dessus dans ton code. Les 2 fonctionnent mais déjà tu peux essayer y a des tutoriels si besoin.

A la fin tu convertis ton Var1 en DWORD dans une autre variable interne Var1_DWORD tu lui fais un SHL de 16 positions pour le décaler et faire le mot fort, puis un OR avec le Var2_DWORD (converti egalement) est tu as un DWORD. Trivial.

Nota il est préférable quand c est possible de tout configurer en modbus tcp ip. C est une com spéciale schneider ou tous les mots sont automatiquement encapsules. Tu donnes juste le 1 index du mot et le nombre de mots et Schneider fait tout tout seul. Exemple tu avais un table de 100 mots avec index 2000 dans un dtm modbus tcp ip et c'est fini côté M340. Tu associes chaque variables en WORD à un %M2000/%MW2001 etc dans ta table de variable en dur (comme tu ferais pour communiquer avec vijeo par exemple voir tutos si besoin sur youtube).
Côté M251 juste tu configures le modbus tcp ip et c est tout. Rien de plus. Pas de table pas de config esclave tout est gere via le modbus tcp ip c est magique. Il y a 1 case a cocher et c est tout. Ensuite tu tapes a la main chaque variables (c est fastidieux mais très fiable):

Var1 AT %MW2000 : WORD
Var2 AT %MW2002 : WORD

Tu noteras le saut entre les mémoires%MW M251 (2000, 2002) et le M340 (2000. 2001). C est Schneider....

Là tu vas être sûr de communiquer sans souci.

Ça fait 1 an que je n ai plus touché Schneider donc je te garantis pas qur tout ce que je dis est précisément vrai par contre tu vas avoir des pistes pour avancer en autonomie. Prévois 3 jours de test pour envoyer 2 mots mais tu vas y arriver en testant toutes ces possibilités. Sinon téléphone à Schneider ils vont te débloquer gratos (c est ce que j ai fait).

Concernant ton problème de points codeurs ne t'embête pas. Y a des bugs sur Schneider mais aussi sur Beckhoff Siemens etc. Je te conseille de vivement programmer un bloc universel qui converti les points codeurs 16bits en 32bits en direct sans perte de point. C'est pas si dur à coder mais pas si trivial non plus. Tu le programmes et tu simules avec un compteur 0.5Hz pour compter les points dans les 2 sens. Avec l'IA si besoin tu vas t'en sortir l'idée c'est de mémoriser la valeur précédente comme offset, comparer la valeur actuelle à un saut et d'ajouter un offset lorsque tu passes de 65535 a 0 ou 0 à 65535 pour conserver la valeur totale. Je ne peux pas te le donner car c est mon gagne pain ce code je l utilise partout.

Ton PLC devrait tourner très vite (moins de 10ms) ce qui laisse largement le temps de combler les sauts de points que tu vas avoir. Moi j ai j'aimais eu de souci dans plusieurs domaines exigeants.

J'ai passé des semaines pour réussir ce que je viens d éditer alors je comprends ta frustration....
Répondre