Modbus tcp .... besoin d'aide !

7Piccolo7 Messages postés 2 Date d'inscription samedi 28 avril 2007 Statut Membre Dernière intervention 7 janvier 2009 - 10 mars 2008 à 12:28
cs_chamicki Messages postés 28 Date d'inscription mardi 14 octobre 2008 Statut Membre Dernière intervention 15 avril 2011 - 3 févr. 2010 à 11:16
Bonjour,

  Je suis en BTS (IRIS 2nd année), pour mon projet j'aurai besoin d'information sur le protocole modbus TCP.

Si vous avez des exemples de code (C++), je suis preneur !   

j'ai commencé à développer en utilisant les sockets, mais pour la trame du protocole modbus TCP, c'est pas très clair ....  

   Toute les informations seront les bien venu .... 
A voir également:

5 réponses

kertimanoff Messages postés 75 Date d'inscription samedi 3 décembre 2005 Statut Membre Dernière intervention 30 juin 2013
6 janv. 2009 à 16:12
bonjour,
bien que votre post dans ce forum n'est pas sussiter beaucoup de réponse, je me permet de poster ici dans l'espoir que vous receviez ce message et que vous acceptiez de m'aider, car je me trouve aujourd'hui dans la même situation que vous le 10 mars 2008.

je suis en 2eme année de bts informatique et mon projet de bts consiste a programmer un serveur sur windows CE et un client sur une machine du reseau, le tout communiquant par Modbus/TCP.

ma requête est simple: avez vous dans vos archives des exemples de programmes qui gére la communication Modbus/tcp a me transmettre?
A l'attention de 7piccolo7 et de tout le monde sur ce forum!
merci d'avance.
0
7Piccolo7 Messages postés 2 Date d'inscription samedi 28 avril 2007 Statut Membre Dernière intervention 7 janvier 2009
7 janv. 2009 à 22:11
Salut !

Bon c'est vrais que ce post est carrément vieux (je l'avais zappé complet)!
Depuis j'ai réussi a me sortir de la m***e !

Bien sur je peut te donner des exemples de code (c'est opensource  ) tu en feras ce que tu veux.
Fait moi savoir si tu es toujours intéressé. Je te répondrai dans les plus bref délais.

Enfin voila,

By

PS : Au fait entre temps j'ai eu mon BTS et j'ai pas trop mal réussi en info ! 
0
kertimanoff Messages postés 75 Date d'inscription samedi 3 décembre 2005 Statut Membre Dernière intervention 30 juin 2013
8 janv. 2009 à 11:47
et oui quand on post sur des forums il arrive qu'on soit surpris lontemps aprés! en tout cas merci de me répondre.
 Si t'a des exemples de code qui sont ou peuvent être mis en ligne, en cas si t'as la motive de mettre les liens sur le forum, mais sinon je t'es envoyer un message privé avec mes coordonnées electronique.
Cdt
0
Maj62 Messages postés 4 Date d'inscription jeudi 1 février 2007 Statut Membre Dernière intervention 21 janvier 2009
21 janv. 2009 à 11:19
voila

a mon tour de passer le bts iris

et comme vous je dois utiliser le modbus tcp,je n'arrive pas a envoyer des trames correct pour qu'il me reponde petit exemple de code :
-------------------------------------------------------------------------------------------------------
#include <winsock2.h> // pour les fonctions socket
#pragma comment(lib,"ws2_32.lib") //pour l'ajout de la librairie au projet
#include <stdio.h>

void main()
{

// Initialisation
    WSADATA Struct;
    SOCKET ID;
    SOCKADDR_IN SocketInf;

    int TailleSocket=sizeof(SocketInf);
       char Trame[8]={0x01,0x03,0x00,0x02,0x00,0x01,0x25,0xCA};
    char buffer[8000];

    int Start=WSAStartup(MAKEWORD(2,2),&Struct);

    if(!Start)
    {
        printf("Initialisation de la socket ok!\n");

    // Creation de la socket
        ID=socket(AF_INET,SOCK_STREAM,0);
   
        if(ID==INVALID_SOCKET)
            printf("Probleme de creation de la socket\n");
        else
        {   

            printf("Creation de la Socket ok !\n");
        //Liaison de la socket avec un port et une adresse ip
            SocketInf.sin_family=AF_INET;
            SocketInf.sin_addr.s_addr=inet_addr("172.16.4.5");// ip de l'automate
            SocketInf.sin_port=htons(502);// port protocole modbus
 
    if(connect(ID,(sockaddr*)&SocketInf,sizeof(SocketInf))==INVALID_SOCKET)
                printf("Pb Liaison !\n");
    else
        printf("Liaison ok !\n");

    // Envoi   
        if(send(ID,Trame,8,0))
            printf("Message Envoyer : %s\n",Trame);

        // Recevoir
        // le programme s'arrete ici il attend une réponse ...

        if(recv(ID,buffer,8000,0))
        {
            printf("Reception message : %x\n",buffer[0]);
            printf("Reception message : %x\n",buffer[1]);
            printf("Reception message : %x\n",buffer[2]);
            printf("Reception message : %x\n",buffer[3]);
            printf("Reception message : %x\n",buffer[4]);
        }
   
            //fermeture de la socket
            if(!closesocket(ID))
                printf("Socket de communication Ferme\n");
            else
                printf("Socket de communication ouvert\n");
           
            if(!WSACleanup())
                printf("DLL Fermer\n");
            else
                printf("Socket de communication ouvert\n");
           
        }
    }   

}

----------------------------------------------------------------------------------------------------------------------
autre code pour calculer le crc que j'ai developper depuis l'algo du site :http://thierry.coten.free.fr/modbus.html
------------------------------------------------------------------------------------
#include "stdio.h"

void main()
{
    //char TrameSansCrc[6]={0x01,0x03,0x00,0x02,0x00,0x01};
   
    int crc=0xFFFF;
    int flag=0;    int    i=0;

    int    n=0;

    do
    {
        crc = (crc^TrameSansCrc[i]); // XOR entre le crc et l'octet
        n=1; // n a 1
        do
        {
                flag=(crc & 0x0001);// Récupere le dernier bit
                crc=crc>>1;// Décalage a droite,perte du bit de droite qui a était récupéré dans flag

                if (flag) // Si le bit contenu dans flag vaut 1
                    crc=crc^0xA001; // Alors on fait un Xor avec le polynome A001                // Polynôme 2^15 + 2^13 + 2^0 0xA001.
       
            n=n+1;

        }while(!(n>8));// Parcour les bits de l'octet

        i++;
    }while(i!=5); // Parcour la trame

    printf("Crc obtenu sans inversion PF pf :  %x\n",crc);
}

voila si qqun pourrait m'aider svp
merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_chamicki Messages postés 28 Date d'inscription mardi 14 octobre 2008 Statut Membre Dernière intervention 15 avril 2011
3 févr. 2010 à 11:16
Bonjour 7Piccolo7,

Peux-tu m'envoyer tes sources pour le dialogue Modbus/tcp svp ?

Cordialement.
0
Rejoignez-nous