TCP/IP Modbus pour Automate

Signaler
Messages postés
32
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
23 avril 2009
-
 ujyh_cc -
Bonjour à tous,
Alors voilà je suis en stage (BAC+2) et celà fait plusieurs jours que je m'arrache les cheveux.

Je doit faire un petit programme en Visual Basic (d'où mon post ici ) qui doit envoyer une trame modbus sur mon automate TWIDO. Avec "winsock" j'arrive a envoyer sur mon port ETHERNET. Je le vois grâce à ethereal. Mais imposible de trouver la synthaxe modbus à envoyer. Je pense avoir compris que en ETHERNET il n'y a pas de CRC?

Exemple je veut envoyer la valeur "10" dans le mot %MW25 celà donne :

iput = 01 + 06+ 00 19 + 00 10 
Winsock1.SendData iput

Pouvez-vous m'aider merci d'avance

Cordialement Benjamin

16 réponses

Messages postés
73
Date d'inscription
lundi 12 avril 2004
Statut
Membre
Dernière intervention
17 septembre 2008
4
Salut,

2 solutions à ton problème:

1) Utiliser un simulateur modbus par exemple ModbusPoll et analyser les trames avec    Ethereal

2) Tatonner
J'ai trouvé quelques infos ici:
http://www.codeproject.com/cs/library/Modbus_TCP_class.asp
c'est en csharp mais en interprétant çà pourrait donner ça:

La trame doit avoir le format doit être : Le header sur 12 bytes + les donneés à écrire

data(0) = 0;    ' Slave id high byte
data(1) = 1;    ' Slave id low byte+
data(4) = 0;    ' Complete message size in bytes
data(5) = ?????;    'Complete message size in bytes
data(6) = 0;    'Slave address
data(7) = 6;    ' Function code
data(8) = 0;    ' Start address
data(9) = 25;    ' Start address
'les 3 bytes suivants pour écrire dans plusieurs mots
data(10) = 0;    ' Number of bytes
data(11) = 0;    ' Number of bytes
data(12) = 0;
data(13) = 0;
data(14) = 10;

Cà ne fontionnera certainement pas du premier coup mais c'est une base de travail

Bon courage A +
Akim
Bonjour,

je confirme la page http://www.modbus.pl/vb.htm n'existe plus
es que qq peut nous passer les lignes de codes.

merci d'avance
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
48
Salut,
REgarde cette petite discution
Et aussi Cette Source de [auteurdetail.aspx?ID=2204 jack]
@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
32
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
23 avril 2009

Merci de ta réponse jrivet.

Mais les liens que tu m'as donné, ne me donne pas la synthaxe du modbus en ETHERNET.
En faite le serveur OPC je ne pense pas en avoir besoin(de plus il est payant je crois ). J'arrive à envoyer mes trames via winsock.
Je souhaitrai connaitre quoi envoyer sur le réseau pour que mon automate affecte 10 au mot %MW25 (exemple)

Codialement Benjamin 
Messages postés
32
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
23 avril 2009

Merci de ton aide, alors voilà ce matin et un grand jour car j'ai réussi...

Pour ce qui on le même problème que moi, voilà ce que j'ai envoyé:

' Juste la syntaxe du protocole modbus en VB
' J'envoye la valeur 88 dans le mot %MW25

iput = chr(00)+chr(01)+chr(00)+chr(00)+chr(00)+chr(06)+chr(01)+chr(06)+chr(00)+chr(25)+chr(00)+chr(88)
Winsock1.SendData iput

Si vous avez des question??...

Cordialement
Messages postés
38
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
17 mai 2020

Salut  snakzbenjy,

j'ai ecris une petite supervision en VB6 vers des appareils modbus via le port Com, a l'aide d'un convertisseur du style aksys j'aimerais modifier mon application pour l'utiliser comme toi via ethernet et modbus TCP,



je vois qu'avec l'aide de Akim77 tu as bien avancé, as tu trouvé de la doc sur la trame ? longueur ? etc... si oui pourrais tu me l'envoyer ? ou alors detailler ta trame avec une petite explication sur chaque donnée..


"iput = chr(00)+chr(01)+chr(00)+chr(00)+chr(00)+chr(06)+chr(01)+chr(06)+chr(00)+chr(25)+chr(00)+chr(88)
Winsock1.SendData iput"

Merci d'avance.
Jérôme...
Messages postés
32
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
23 avril 2009

D'après mes souvenirs déja en Ethernet il n'y a pas de CRC à mettre bonne nouvelle.
Aprés je vais te donnée de tête ma trame

chr(00)+chr(01)  ===> La valeur de l'esclave
+chr(00)+chr(00) ===> ????
+chr(00)+chr(06) ===> écriture(6)/lecture(3 je crois)
+chr(01)+chr(06)
+chr(00)+chr(25)===> Le mot à affecter ici pour télémecanique ce serra %MW25
+chr(00)+chr(88)===> La valeur a mettre dans le mot

http://stielec.ac-aix-marseille.fr/cours/abati/modbus.htm ==> ça pourra peut être d'aider(Attention c'est du serie)

Je ne sais pas si j'ai répondu à tes questions?

cordialement Benjy
Messages postés
73
Date d'inscription
lundi 12 avril 2004
Statut
Membre
Dernière intervention
17 septembre 2008
4
Tu trouveras le protocole complet ici:

http://www.rtaautomation.com/modbustcp/files/Open_ModbusTCP_Standard.pdf

C'est évidemment en anglais, hélas.
@+

Akim
Messages postés
3
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
25 juin 2007

Bonjour,

je suis devans mon PC et mon TWIDO... mais j'arrive pas à faire communiquer tout ce petit monde...

je ne maitrise malheureusement pas l'outils WINSOCK !!!

avez vous la possibilité de me faire une copie de la zone programme consernant l'ouverture de la COM ETHERNET et son paramétrage (N° de port)

Un grand merci

PS j'ai mis un petit prog dans le TWIDO + configurer un adresse IP d'ailleur si je fait un PING il me réponds...
donc j'en déduit que le HARD est bon... et mon problème viens du SOFT...
Messages postés
3
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
25 juin 2007

Re,

Bon j'ai trouver mon bonheur sur le WEB ==> http://www.modbus.pl/vb.htm
dans ces deux exemples VB + sources avec WINSOCK (donc pas besoin de serveur OPC payant...)
on trouve donc 2 exemples de programmation 1 RTU (RS232) et 1 ETHERNET...

afin de lire/ecrire dans un TWIDO

Bye 
Messages postés
3
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
25 juin 2007

Re,

Bon j'ai trouver mon bonheur sur le WEB ==> http://www.modbus.pl/vb.htm
dans ces deux exemples VB + sources avec WINSOCK (donc pas besoin de serveur OPC payant...)
on trouve donc 2 exemples de programmation 1 RTU (RS232) et 1 ETHERNET...

afin de lire/ecrire dans un TWIDO

Bye 
Messages postés
3
Date d'inscription
lundi 10 juillet 2006
Statut
Membre
Dernière intervention
30 novembre 2010

Super, Moyennant petite adaptation, j'ai su lire et écrire Dans un automate Quantum
Messages postés
5
Date d'inscription
jeudi 19 janvier 2006
Statut
Membre
Dernière intervention
15 novembre 2010

Salut, je souhaite réaliser exactement la même chose avec la nouvelel gamme d'automate M340 de chez Schneider Electric.

Je réalise par contre le programme en C mais bon ce n'est pas la programmation qui me pose problème dans ce cas-ci.

En effet,  j'ai créer mon socket et tout le buiseness qui va avec, mais le soucis c'est lorsque j'observe ce que j'envoie avec Ethereal il m'informe que j'ai un problème de CHECKSUM, or cette partie ej en la gère pas du tout dans mon programme étant donné que je transmet en TCP et que le protocle MODBUS stipule que le format d'une trame MODBUS TCP laisse de côté le CRC qui est gérer par la couche TCP.

De plus, je me demande si j'arrive bien à me connecter au port 502 et j'aimerais savoir si il n'existerait pas uen solution (en C ou autre) qui me permettrait de vérifier que je suis bien connecter à ce port ?

Mes trames ressemble énormément à celles de Benjy donc je pense être dans le vrai à ce niveau là...

Merci beaucoup

PS : j'irais tester un programlme en VB que j'ai trouvé sur CS tout à l'heure...
Messages postés
73
Date d'inscription
lundi 12 avril 2004
Statut
Membre
Dernière intervention
17 septembre 2008
4
En fait il n'y a pas d'erreur de checksum, c'est une erreur d'interprétation
d'Ethereal et de tous les outils d'analyse réseau.
C'est toujours le cas quand Ethereal est installé sur le PC qui genere les trames.

Le checksum est généré par la carte Ethernet du PC, Ethereal qui est en amont
ne peut donc pas le connaitre, d'où son erreur.
voir la doc sur http://www.wireshark.org/docs/
(Wireshark est le nouveau nom de Ethereal)
L'idéal est d'installer Ethereal sur un PC indépendant, connecté par un Hub
(pas un Switch).

A+

Akim
Messages postés
5
Date d'inscription
jeudi 19 janvier 2006
Statut
Membre
Dernière intervention
15 novembre 2010

Aaaah Ok !!!!

Merci de l'explication Akim, franchement je trouvais ça tellement bizarre et étant donné mon manque de connaissance sur le sujet je n'avais pas du tout penser que el soucis pouvais venir du logiciel, moi j'ai direct pensé que l'erreur venait de ma trame...

J'irais voir tout ça demain

A +
Bonjour,

je souhaiterais savoir si quelqu'un aurais toujours ces lignes de code pour lire une variable en VBA ?

J'en aurais grandement besoin et la page http://www.modbus.pl/vb.htm n'existe plus...