TCP/IP Modbus pour Automate

Messages postés
32
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
23 avril 2009
- - Dernière réponse :  ujyh_cc - 26 août 2015 à 11:14
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
Afficher la suite 

16 réponses

Meilleure réponse
Messages postés
73
Date d'inscription
lundi 12 avril 2004
Statut
Membre
Dernière intervention
17 septembre 2008
4
1
Merci
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

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 206 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_akim77
1
Merci
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

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 206 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ujyh_cc
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
46
0
Merci
Salut,
REgarde cette petite discution
Et aussi Cette Source de [auteurdetail.aspx?ID=2204 jack]
@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
32
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
23 avril 2009
0
Merci
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 
Commenter la réponse de snakzbenjy
Messages postés
32
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
23 avril 2009
0
Merci
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
Commenter la réponse de snakzbenjy
Messages postés
36
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
28 octobre 2017
0
Merci
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...
Commenter la réponse de cs_Alien
Messages postés
32
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
23 avril 2009
0
Merci
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
Commenter la réponse de snakzbenjy
Messages postés
73
Date d'inscription
lundi 12 avril 2004
Statut
Membre
Dernière intervention
17 septembre 2008
4
0
Merci
Tu trouveras le protocole complet ici:

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

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

Akim
Commenter la réponse de cs_akim77
Messages postés
3
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
25 juin 2007
0
Merci
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...
Commenter la réponse de alainpollet
Messages postés
3
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
25 juin 2007
0
Merci
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 
Commenter la réponse de alainpollet
Messages postés
3
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
25 juin 2007
0
Merci
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 
Commenter la réponse de alainpollet
Messages postés
3
Date d'inscription
lundi 10 juillet 2006
Statut
Membre
Dernière intervention
30 novembre 2010
0
Merci
Super, Moyennant petite adaptation, j'ai su lire et écrire Dans un automate Quantum
Commenter la réponse de cs_bedu
Messages postés
5
Date d'inscription
jeudi 19 janvier 2006
Statut
Membre
Dernière intervention
15 novembre 2010
0
Merci
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...
Commenter la réponse de weedy78955
Messages postés
73
Date d'inscription
lundi 12 avril 2004
Statut
Membre
Dernière intervention
17 septembre 2008
4
0
Merci
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
Commenter la réponse de cs_akim77
Messages postés
5
Date d'inscription
jeudi 19 janvier 2006
Statut
Membre
Dernière intervention
15 novembre 2010
0
Merci
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 +
Commenter la réponse de weedy78955
0
Merci
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...
Commenter la réponse de corentinte