none
Envoi de trame TCP/IP ? RRS feed

  • Question

  • Bonjour,

    Je souhaiterais développer une application qui communique avec un automate en Ethernet au protocole Modbus.

    Je vois qu'il y a un composant SerialPort dans Les WindowsForm mais rien concernant TCP/IP. Les recherches ne m'ont pas permis de trouver une réponse c'est pourquoi je m'adresse sur ce forum.

    Merci pour votre aide.

    Franck

    mercredi 1 février 2012 08:58

Réponses

  • YES, J'ai trouvé !!!

    Merci à tous.

    Donc pour ceux qui sont le même cas que moi, voici un exemple très simple: 

    Pour voir et comprendre ce qui se passe, installer l'analyseur Ethernet Wireshark (freeware)

     

    Ensuite, Reprendre l'exemple de msdn sur la classe TcpClient et appeller la méthode comme cela: 

    Connect("192.168.0.222", "\x00\x00\x00\x00\x00\x06\x01\x03\x41\x00\x00\x04"); 

    Et indiquer que le port est le 502 (c'est la 1ere instruction de la méthode connect)

     

    Le protocole ModBus s’interprète comme ça:

    \x00\x00: Transaction identifier

    \x00\x00: Protocol identifier

    \x00\x06 : length 6

    \x01 : unit identifier

    \x03 : fonction 3 soit lecture

    \x41\x00: adresse modbus à lire

    \x00\x04: nombre de mot à lire

     

    Attention, si vous reprennez l'exemple de msdn telquel, il faudra modifier le type du message passé en paramètre qui est un String et donc les caractères au delà de 0x80 ne passeront pas !

    Avec de la persévérance on finit toujours par y arriver, mais je ne comprends pas encore pourquoi on ne trouve pas cette information facilement sur internet...

    franck

     


    • Marqué comme réponse Franckcl mercredi 1 février 2012 15:33
    • Modifié Franckcl mercredi 1 février 2012 15:52
    mercredi 1 février 2012 15:16

Toutes les réponses

  • Bonjour,

    Peut être en utilisant les sockets ?

    http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.aspx


    Pour que la discussion puisse être identifiée comme résolue merci de marquer les réponses qui vous ont aidées à solutionner votre problème comme "réponse".
    mercredi 1 février 2012 10:07
  • Bonjour,

    La classe System.Net.Sockets.TcpClient permet une implémentation facile d'un client tcp : http://msdn.microsoft.com/fr-fr/library/system.net.sockets.tcpclient.aspx

    Vous trouvez un exemple dans la documentation MSDN.

     

    Cordialement.

    mercredi 1 février 2012 11:23
    Auteur de réponse
  • Merci effectivement ça marche.

    Pour aller plus loin maintenant, j'aimerais envoyer des trames au protocole TCP/IP modbus en utilisant la classe TcpClient mais je ne vois vraiment pas comment faire...

    Quelqu'un aurait une idée ?

    merci

     

    mercredi 1 février 2012 13:38
  • Beaucoup d'exemples ici => http://code.google.com/p/nmodbus/
    Pour que la discussion puisse être identifiée comme résolue merci de marquer les réponses qui vous ont aidées à solutionner votre problème comme "réponse".
    mercredi 1 février 2012 13:46
  • Ok pas de problème. Je l'identifierai comme résolue quand elle sera résolue mais je n'ai toujours pas trouvé comment spécifier à la classe TcpClient qu'il s'agit d'une trame au protocole "TCP/IP ModBUS"

     

    mercredi 1 février 2012 13:57
  • La classe TcpClient ne connait pas le protocole modbus.
    Elle permet d'envoyer ou de recevoir des octets.
    C'est à vous de les interpréter selon le protocole Modbus.
    Si je retrouve, je dois avoir du code Modbus sur une ancienne clé. Je
    regarde cela ce soir.
     

    Fred
    • Marqué comme réponse Franckcl mercredi 1 février 2012 15:16
    • Non marqué comme réponse Franckcl mercredi 1 février 2012 15:33
    mercredi 1 février 2012 14:46
  • YES, J'ai trouvé !!!

    Merci à tous.

    Donc pour ceux qui sont le même cas que moi, voici un exemple très simple: 

    Pour voir et comprendre ce qui se passe, installer l'analyseur Ethernet Wireshark (freeware)

     

    Ensuite, Reprendre l'exemple de msdn sur la classe TcpClient et appeller la méthode comme cela: 

    Connect("192.168.0.222", "\x00\x00\x00\x00\x00\x06\x01\x03\x41\x00\x00\x04"); 

    Et indiquer que le port est le 502 (c'est la 1ere instruction de la méthode connect)

     

    Le protocole ModBus s’interprète comme ça:

    \x00\x00: Transaction identifier

    \x00\x00: Protocol identifier

    \x00\x06 : length 6

    \x01 : unit identifier

    \x03 : fonction 3 soit lecture

    \x41\x00: adresse modbus à lire

    \x00\x04: nombre de mot à lire

     

    Attention, si vous reprennez l'exemple de msdn telquel, il faudra modifier le type du message passé en paramètre qui est un String et donc les caractères au delà de 0x80 ne passeront pas !

    Avec de la persévérance on finit toujours par y arriver, mais je ne comprends pas encore pourquoi on ne trouve pas cette information facilement sur internet...

    franck

     


    • Marqué comme réponse Franckcl mercredi 1 février 2012 15:33
    • Modifié Franckcl mercredi 1 février 2012 15:52
    mercredi 1 février 2012 15:16