IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème de points de vue sur les sockets ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut Problème de points de vue sur les sockets ?
    Bonjour,

    Je suis actuellement en stage et je doit réaliser un logiciel qui doit me permettre de traiter des informations récupérer par une sortie RS485 en Modbus. Pour ce faire j'ai un convertisseur RS485 / ethernet (MGate MB3180) possédant une adresse ip que je connais.
    Cependant ce que je n'arrive pas à comprendre c'est comment me connecter à cet ip afin de récupérer les informations. Pour moi le pc serait le serveur et le MGate le client, dans ce cas j'ai juste à créer un code gérant les socket coté serveur mais je ne touche pas au coté client ?

    Je suis complétement perdu, et plus je lis de doc sur les sockets plus je m'enfonce ... Si quelqu'un peut me remettre sur le droit chemin cela m'aiderait beaucoup.

    Merci d'avance de vos réponses.

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    avant toute chose, es-tu obligé de faire ce projet en c++?
    Je demande car il existe une bibliothèque open source écrite en C#, qui fonctionne super bien (nous l'utilisons en production), et qui te permettrait de faire ce que tu veux en 2 lignes de code. Elle s'appelle NModbus, elle s'occupe entièrement du socket , et propose différentes interface pour interpréter modbus.

  3. #3
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut
    Bonjour r0d,

    Oui je suis obligé de travailler en C++ et je n'ai encore jamais utilisé de C# donc je pense que j'aurais été encore plus perdu...

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Ok.

    Alors pas de panique, les socket c'est simple.
    Un socket c'est une connection entre deux points d'accès. Un point d'accès étant défini par une ip et un port.
    Pour te connecter à ton appareil, il va donc te falloir connaître également le port. J'espère que tu a un minimum de documentation sur le MB3180 car chaque appareil a ses spécificités et bien souvent, tu ne trouveras les informations dont tu as besoin que dans la doc.

    Notamment la question du client/serveur. Est-ce que l'appareil fonctionne comme un client (ou esclave, ce qui est le plus probable car c'est le fonctionnement typique des rtus en modbus) ou y a-t-il un serveur qui fonctionne en démon sur ce dernier (pas impossible selon l'usage souhaite du bidule). Mais ça tu ne peux le savoir qu'en lisant la doc de l'appareil. Et cela peut prendre du temps...

    Le protocole modbus fonctionne selon le principe slave/master. L'esclave (slave) ne fait absolument rien si le maître (master) ne le lui a pas explicitement demandé.
    -> Il faut donc que, avant toute chose, tu sache si le MB3180 fonctionne comme un esclave ou un maître.
    -> Ensuite il faut savoir par quel port il faut entrer.
    -> Ensuite il te faut choisir une bibliothèque en c++ qui s'occupe des sockets (il y en a plein, google est ton ami)

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Sinon il y a une lib en C open source, que tu peux utiliser dans ton code C++. La doc vient tout juste d'être publiée !

  6. #6
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut
    Citation Envoyé par r0d Voir le message
    J'espère que tu a un minimum de documentation sur le MB3180 car chaque appareil a ses spécificités et bien souvent, tu ne trouveras les informations dont tu as besoin que dans la doc.
    Oui j'ai toute la doc technique la dessus.

    Citation Envoyé par r0d Voir le message
    Est-ce que l'appareil fonctionne comme un client (ou esclave, ce qui est le plus probable car c'est le fonctionnement typique des rtus en modbus) ou y a-t-il un serveur qui fonctionne en démon sur ce dernier (pas impossible selon l'usage souhaite du bidule). Mais ça tu ne peux le savoir qu'en lisant la doc de l'appareil. Et cela peut prendre du temps...
    J'ai lu toute la doc avant de commencer à vouloir coder
    Il fonctionne effectivement en mode esclave.

    Citation Envoyé par r0d Voir le message
    Ensuite il faut savoir par quel port il faut entrer.
    Sur un petit soft que l'on m'a donné la connexion est utilisé en passant par le port 502.

    Citation Envoyé par r0d Voir le message
    -> Ensuite il te faut choisir une bibliothèque en c++ qui s'occupe des sockets (il y en a plein, google est ton ami)
    J'ai effectivement déjà prit une bibliothèque pour les sockets : libws2_32.a
    Cependant me faudra t'il une autre librairie pour le modbus ? Ou ces dernières sont ce dont tu as parlé dans ton premier post ?

    Pour l'instant ce que j'aimerai faire c'est établire une connexion entre le MGate et le pc auquel il est relié. Je pensais ensuite utilisé les sockets pour envoyer des bits sous la norme Modbus dont j'ai la documentation technique.
    Cependant je n'arrive pas à établir de connexion ...


    Citation Envoyé par jblecanard
    Sinon il y a une lib en C open source, que tu peux utiliser dans ton code C++. La doc vient tout juste d'être publiée !
    Merci je vais regarder ça =)

  7. #7
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par humitake Voir le message
    J'ai effectivement déjà prit une bibliothèque pour les sockets : libws2_32.a
    Cependant me faudra t'il une autre librairie pour le modbus ? Ou ces dernières sont ce dont tu as parlé dans ton premier post ?
    Alors. Je vais partir du tout début car je ne connais ni ton niveau ni tes connaissances. Je te demande donc pardon par avance si je racontes des trucs que tu sais déjà.
    Afin de bien comprendre (et donc bien programmer) une application qui utilise le réseau, il faut comprendre un minimum le principe des couches réseaux. Par exemple le modèle OSI donne une bonne idée.
    Dans le cas présent - et en se réferrant à OSI - on a:
    - 1. Couche physique: rj45 (je suppose)
    - 2. Couche de liaison de données: Ethernet
    -> tout ça c'est géré par le matériel, le système d'exploitation (les drivers en fait)
    - 3. Couche réseau: IP
    - 4. Couche transport: TCP
    -> ça c'est géré par les sockets
    Pas de couches 5 ni 6 ici
    7. Application: protocole Modbus

    En gros (très gros); les couches 3 et 4 s'occupent du transport des données d'une machine à l'autre, et la couche 7 est le contenu de ces données, ici ce seront les trames modbus brutes. L'architecture en couche se retrouve effectivement dans les trames: la trame brute est le message modbus en lui-même, cette trame va être "enrobée" dans une trame TCP, elle-même "enrobée" dans une trame IP, etc.

    Donc en fait, toi tu n'auras à t'occuper que 2 choses: les couches 3 et 4 d'une part, en utilisant un socket, et de la couche 7 d'autre part.

    En c++, il y a une constellation de bibliothèques, y compris celles écrites en C que l'on peut utiliser en C++. La première chose est de vérifier s'il existe des bibliothèques qui font déjà ce que tu veux. Il existe donc peut-être une bibliothèque qui fait les deux choses (transport et modbus), il faut donc effectivement que tu commences par regarder la bibliothèque proposée par jblecanard dont j'ignorais tout et qui m'intéresse d'ailleurs beaucoup. Merci jb au passage

    Donc à la question de savoir si tu as besoin d'une bibliothèque (library se traduit en français par bibliothèque, ce qui est sémantiquement justifié) pour modbus, ça dépend de ton contexte particulier. Ca dépend de ce que tu veux faire (si c'est un stage, peut-être souhaites-tu manipuler des trames modbus par exemple, auquel cas il faudra que tu fasses ta propre bibliothèque), de si tu trouves une bibliothèque qui fait ce que tu veux (si ce n'est pas le cas, tu seras bien obligé d'en faire une toi-même), etc.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/09/2007, 17h40
  2. Cours sur les sockets
    Par sorry60 dans le forum Réseau
    Réponses: 8
    Dernier message: 05/11/2005, 14h19
  3. Problème d'envoie de text avec les sockets
    Par Coussati dans le forum Web & réseau
    Réponses: 6
    Dernier message: 16/09/2005, 10h26
  4. Réponses: 7
    Dernier message: 21/02/2005, 13h28
  5. Questionsssss sur les sockets?
    Par Nino dans le forum Développement
    Réponses: 5
    Dernier message: 01/04/2003, 21h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo