Envoi d'informations sur MODBUS avec un PIC
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 59

Envoi d'informations sur MODBUS avec un PIC



  1. #1
    jorg1n

    Envoi d'informations sur MODBUS avec un PIC


    ------

    Bonjour,

    je travaille avec un PIC (mesure de tension, courant,...) et je souhaiterai envoyer ces informations sur un réseau MODBUS, et je voulais savoir si vous connaissiez des PIC faisant ce type de communciation, ou existe t'il des composants genre SPI ou I²C / MODBUS...

    En attendant, je vais commencer à mettre un peux le nez dans ce protocole...

    Merci d'avance

    -----

  2. #2
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Bonsoir,

    après quelques recherches...j'en sais un peut plus sur ce protocole, par contre, impossible de savoir si il existe des convertisseur SPI -> MODBUS ou autres...

    Je vous remercie d'avance

  3. #3
    paulfjujo

    Re : Envoi d'informations sur MODBUS avec un PIC

    bonsoir,

    un reseau modbus , sur liaison serie RS232, ou Ethernet
    PIC en esclave ou maitre
    le plus facile est de gerer les trames modbus en RS232 sur le PIC.

    et eventuellement attaquer un gateway serie/Ethernet genre Moxa
    ou module Lantronix Modbus TCP si en face l'equipement Maitre ou Esclave est en Ethernet. (eemple: HMI PROFACE AGP3600)

    Je suis aussi sur un projet de dialogue modbus avec un PIC16F877.. avec en Face un utilitaire de test Tabdial.exe de Leroy Automation.
    tres utile pour le debugging. et un autre programme en VB6
    servant de Maitre.

  4. #4
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Merci pour ta réponse Pauljujo,

    si j'ai bien compris, je dois générer les envois des données en I²C, et j'utilise un convertisseur I²C / MODBUS??
    Où est ce que je peux utiliser ce genre de convertisseur??

    Merci d'avance

  5. A voir en vidéo sur Futura
  6. #5
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Je vous avouerai que je suis un peu perdu, j'ai consulté pas mal de documentation, et si je comprends bien , le MODBUS est un protocole de communication, et utilise une liaison série RS232 ou RS 485 ( ou autre) comme support.

    Mais je me pose toujours la même question, comment envoyer des données sur un support et surtout avec le protocole MODBUS?
    Dois je avoir une pile de protocole MODBUS (comme pour l'éthernet ou USB par exemple)?

    Merci d'avance

  7. #6
    paulfjujo

    Re : Envoi d'informations sur MODBUS avec un PIC

    bonsoir,

    En RS232, pas en I2C.
    En effet il faut gerer le protocole de A à Z,mais il est tres simple
    si on se contente de ne transferer que des mots de 16 bits
    en Modbus RTU ( ou Jbus !) .
    pour envoyer une donnée il suffit de suivre le protocole
    abondament commenté sur le web.
    le plus delicat est le calcul du CRC16 pour la validation de la trame modbus.

    Pour demander une lecture de donnee au PIC, via un MAITRE Modbus,
    il est possible d'utiliser le programme Tabdial32 de Leroy Automatique (voir leur site)
    ou
    Récuperer sur le web , une version en VB6
    Modbus RTU maitre serie
    http://www.vbfrance.com//code.aspx?ID=45809
    On y voit bien comment est crée la trame d'envoi
    et celle de reponse en retour.

  8. #7
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Merci paulfjujo,

    je vais regarder ça ...

    j'ai trouver sinon un autre support:
    http://www.sourceboost.com/Products/...ampleCode.html
    a première vue, il s'agit d'une librairie qui gère la communication de type MODBUS, peux tu me donner ton avis??

    Merci d'avance et encore merci pour ton aide

  9. #8
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Juste pour confirmation,

    je n'ai besoin de rien d'autre mis à part mon PIC (dans lequel j'aurais une pile de protocole MODBUS) pour réaliser une communication de type MODBUS?

    Et au niveau support, quelle serait la connectique au niveau du PIC ?

    Merci d'avance

  10. #9
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Si j'ai bien compris d'apeès les documentation que j'ai lu, il faut au niveau hard une liaison RS232 (PIC TX RX et MAX232)?
    Et au niveau soft, une pile de protocole du MODBUS?

    Suis je sur la bonne voie ou PAS?

    Merci d'avance

    Bonne soirée a tous

  11. #10
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Bonjour, personne n'aurait un petit coup de pouce a me donner...

    Merci d'avance

  12. #11
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Bonsoir à tous,

    personne pour m'aider s'il vous plait...

    Merci d'avance

  13. #12
    paulfjujo

    Re : Envoi d'informations sur MODBUS avec un PIC

    bonsoir,

    voir reponse en MP
    PIC -> MAX232 -> RS232 support physique pour le transfert des donnees
    Protocole MODBUS RTU pour l'organisation du contenu des trames de questions reponses et traitement d'erreur.

    ou PIC -> XPORT MODBUS -> support physique EThernet
    Protocole MODBUS TCP/IP = MODBUS encapsulé
    mais il faudra trouver un maitre TCP/IP en face (coté PC) pour tester tout ça.

  14. #13
    RISC

    Re : Envoi d'informations sur MODBUS avec un PIC

    Salut,

    Tu peux télécharger gratuitement une application MODBUS pour PIC18 ici :
    http://www.protocessor.com/products/...urce_Code.html

    a+

  15. #14
    gedonet

    Re : Envoi d'informations sur MODBUS avec un PIC

    Bonjour
    Une autre adresse à consulter: http://www.modbus.pl/microchip.htm
    Gilles

  16. #15
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Bonjour a tous,

    merci encore pour vos recherches.

    Je disposais déja de toutes ses informations après mes recherches, mais au moins je vois que je ne part pas sur une mauvaise piste...

    ma carte est en cours de réalisation, donc je met le soft de coté, par contre, j'aurais surement besoin de petits coups de pouces lors du développement du soft...

    Merci en tout cas pour votre aide
    Bonne journée à tous

  17. #16
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Bonjour à Tous...

    Je reviens vers vous car voila, j'ai réussi à réaliser ce que je voulais faire avec mon application, maintenant il me reste à intégrer le sujet de ce post:
    Une communication basée sur le RS485 en MODBUS RTU 2 Fils...

    J'ai donc jeté un oeil sur toutes les docs et les exemples, et à mon avis, l'exemple de chez Protocessor (exemple qu'a transmis RISC)est un peu complex pour moi, mais celui de chez ModBUS, tramis part gedonet est peut etre un peu plus simple, je pense donc partir sur celui... d'abord réussir à envoyer une trame à mon PC, et venir lire la trame avec un logiciel qui me permet de "scanner" le réseau MODBUS:
    CAS MODBUS SCANNER

    Mais, je vais donc essayer tout ça, mais je me pose une petite question, si je n'y arrive pas avec l'exemple, serait il pas plus facile de faire moi même ma petite librairie, et de "générer" moi même mes trames?

    Merci d'avance
    Et je vous tiens au courant...
    Bonne journée à tous, et bonnes vacances pour les veinards!!

  18. #17
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Bonjour,

    bon, après réflexion, je me suis dit qu'il était préférable d'abord de définir la "structure" des différentes trames:
    -la trame que l'on attend de la part du maitre
    -la trame que je lui reponderai.

    Et j'ai pas mal d'informations, mais est ce que parmis vous, il y en aurait qui serait succeptible de m'aider car j'ai pas mal d'informations mais il faut réussir à prendre les bonnes...

    Alors avant de me lancer dans les détails, pouvez vous me faire signe...

    Merci d'avance

  19. #18
    schmo

    Re : Envoi d'informations sur MODBUS avec un PIC

    salut,

    Tout ce que tu as à faire en tant qu'esclave modbus c'est d'attendre une requete venant du maitre. la fin de la trame requete est définie par un silence de 3.5 octets. C'est à ce moment là que tu traite la trame du maitre, tu prépare la réponse et tu l'envois.

    Dans la trame requete, il ya l'adresse de l'esclave. C'est la première chose à vérifier. si le message n'est pas pour toi, tu l'ignore...

    ensuite du vérifis le code commande (lecture, ecriture,...) , tu ne réponds que pour les codes commandes que tu gére..

    enfin tu vérifie si les adresses des registres correspondent. Si c'est le cas, tu prépare ta trame réponse avec les données qui vont bien (ou ta trame d'erreur), tu calcul le crc et tu envoi la trame vers le maitre

    En gros c'est comme ça que ca se passe..

  20. #19
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Merci beaucoup schmo,

    j'y vois un plus plus clair depuis quelques jours, depuis que je m'y suis mis vraiment dedans...

    par contre, là ou j'ai encore du mal:
    -> Pour la demande de l'esclave, dans la trame, comment définir le mot de 2 octets qui se trouve entre la fonction et le CRC?
    | ID escl | ID Funct | ?? ?? | CRC |
    | 1 oct. | 1 oct. | ?? ?? | 2 oct.|

    -> Pour la réponse de l'esclave, quelle fonction utiliser en fonction de ce que l'on veut envoyer, j'ai lu les tableaux, mais je ne trouve pas ça très clair...

    Pour que ce soit plus clair pour toi, voila ce que je souhaite envoyé:
    -la valeur d'un courant allant de -150.0 à + 150.0A (type float)
    -la valeur d'une tension allant de 0.00 à 60.00V (type float)
    -un pourcentage allant de 0 à 100% (short int)
    -une température allant de -40°C à 100°C (type float)

    et l'état de 5 relais, et ça je crois qu'il s'agit de la fonction 2, et chaque bit de la donnée correspond à "un relais"?

    Si tu veux bien m'aider à définir l'ensemble de mes trames, esclaves/maitre, j'ai deja commencé un petit document word listant les différentes trames, pourrais tu m'aider à le finir?
    je le met a jour et je le post.

    Sinon, au point de vue soft, a tu déja travaillé avec un PIC18 et "créé" une liaison RS485 MODBUS?

    Je te remercie d'avance

  21. #20
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Voila comme convenu le document...

    Merci d'avance à tous ceux qui peuvent me donner un petit coup de pouce..
    Images attachées Images attachées

  22. #21
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Un petit coup pouce Schmo.. ..

    Merci d'avance

  23. #22
    schmo

    Re : Envoi d'informations sur MODBUS avec un PIC

    salut,

    Les mesures sont en général codées sur 1 ou 2 registres 16bits.
    2 registres 16b sont nécéssaires pour codée un nombre flottant 32bits IEEE: 1er registre contient l'esposant et le MSB de la mantisse, le 2em registre contient le reste de la mantisse.
    Ces registres ont une adresse unique (ces adresses sont définies par le mapping de l'esclave. En gros c'est toi qui défini si les adresses des registres que tu met à disposition du maitre).
    Donc prenons un exemple:
    l'esclave permet de lire une valeur flottante située à partir de l'adresse 0x200. Le maitre vas donc faire une requete de lecture avec le code 03 (ou 04) de 2 registres à partir de l'adresse 0x200.

    La trame envoyée par le maitre ressemblerais à ça:
    07 : adresse de l'esclave
    03 : code fonction
    02 : adresse de 1er registre à lire (MSB)
    00 : adresse LSB
    00: Nombre de registres à lire (MSB)
    02: nombre de registre à lire (LSB)
    CRC_lsb
    CRC_msb

    L'esclave répondra par:
    07: adresse de l'esclave
    03: reponse à une commande 03
    04: reponse de 4 octets (2registres)
    4C: registre 1 MSB = exposant
    33: registre 1 LSB = poids fort mantisse
    38: registre 2 MSB = mantisse
    14: registre 2 LSB = poids faible mantisse
    CRC_lsb
    CRC_msb

    Note : même si la valeur envoyé par l'esclave est de 8 bits, elle sera envoyée sur 16bits.(l'information sera contenue dans ce cas dans la partie basse du registre)

    Pour la suite je t'expliquerais les trames d'erreurs et les requete sur des E/S TOR ou relais...
    Pour ce qui est du code pour 18f: Si l'assembleur ne te fais pas horreur, ya pas de soucis..

  24. #23
    schmo

    Re : Envoi d'informations sur MODBUS avec un PIC

    salut,

    ...suite...

    Le CRC se calcul sur toute la trame (de l'adresse esclave jusqu'au dernier octet DATA)

    Trame d'exception (trame d'erreur) :
    - Si l'esclave ne gére pas le code commande de la requete,
    - si l'adresse du premier registre à lire ou à écrire) est hors du mapping,
    - si l'adresse du premier registre + Nb registre est hors mapping,
    - si le nombre de registre à lire est = 0,

    Cette trame est composée comme suit:
    07 : adresse esclave
    0x83 code commande + 0x80
    01,02,03,04: code spécifiant le type d'erreur
    CRC

    Pour les E/S TOR ou relais, C'est le même principe:
    Si le maitre veux écrire l'état d'un relais, il envoi:
    07
    01
    00: adresse du relais (par example 0x100 pour Rel01)
    FF
    00: état du relais (ici ON)
    CRC

    l'esclave répondra avec la même trame une fois qu'il auras actionné le relais.
    En gros la trame requete est toujours sur le même format:
    le maitre indique à quel esclave il veux discuter,
    ce qu'il veux faire (lire ou écrire et quel type de data),
    l'adresse du premier registre,
    le nombre de registres qu'il veux lire ou écrire,
    le nombre d'octets à écrire

    A+

  25. #24
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Merci Beaucoup schmo pour cette explication très clair.

    Pour le CRC, je m'y attellerai dans la foulée, mais je veux d'avoir être sur du contenu des trames maitres et esclaves..

    En ce qui concerne les relais, ce n'est pas le maitre qui vient les piloter, c'est l'esclave qui les pilote, et il renvoie au mettre l'état de ces relais.
    La fonction est elle donc bien 7? Je pensais mettre 2
    Et si j'ai bien compris, j'ai une trame de requete différente pour chaque état des relais? (avec la valeur du registre qui change)

    Et concernant la valeur du registre, moi j'ai mes variables qui sont de type short int ou float, et ou je peux trouver leur adresse??

    Merci d'avance et encore mille merci pour ton explication très claire.

    Pour le soft en assembleur, je suis plutot C moi donc non merci.. mais merci quand même..

  26. #25
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Bon, j'ai un peu regarder dans MPLAB, en mode debug, et j'ai "suivi" la valeur de ma variable, dans les fenêtre watch et dans file registers, mais je suppose que c'est emplacement, cette adresse qu'elle prend peut varier, comment je peux fixer une adresse pour une variables, sans gêner le bon fonctionnement de mon programme?

    Merci d'avance

  27. #26
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Voila sur quelle base de soft je pars..:
    http://www.modbus.pl/microchip.htm

    il s'agit du soft en C.

    Il a été écrit pour un 16F, mais je l'ai adapté pour un 18F2520, mais j'ai encore un peu de mal a comprendre ce qui fait et surtout à gérer les envois et les réceptions...

    Pouvez vous m'aider...

    Merci d'avance

  28. #27
    schmo

    Re : Envoi d'informations sur MODBUS avec un PIC

    salut,

    Je regarderais les sources un peu plus tard..

    Pour ce qui est des adresses des registres. Il faut savoir que c'est juste une notion abstraite pour ordonner les registres. En régle générale, c'est le concepteur de l'esclave qui decide à quel adresses il met ses data. Donc C'est toi qui décide du mapping de l'esclave.

    A savoir : si tu décide de mettre la valeur flottante du courant à partir de l'adresse 0x100 et l'adresse de la température à l'adresse 0x325 tu es entierement libre... Cela obligera juste le maitre à faire 2 requetes distinctes pour rapatrier ces 2 infos (c'est pas ce qu'on fait de mieux)

    Il est beaucoup plus interessant de mettre toutes tes données à suivre. Par exemple:
    adresse , description , long
    100 , courant flottant , 2 registres (100-101)
    102 , tension flottant , 2 registres (102-103)
    104 , pourcent entier , 1 registre
    105 , temperature flot , 2 registres (105-106)
    voila pour tes mesures
    tu peux trés bien rajouter à la suite un registre dans lequel tu indique l'etat des relais (bit0 = rel1.. bit4=rel5)
    107 , Etat relais , 1 registre

    Avec tout ça, le maitre ne fait qu'une requete pour lire en 1 fois toutes les infos (requete lecture avec code fonction 03 ou 04 pour lire 8 registres à partie de l'adresse 100) et voila..

    L'esclave répondra donc en envoyant 8 registres soit 16octets à suivre dans la reponse. C'est au maitre de savoir que les 4 premiers octet represente une valeur flottant ou que les 2 derniers représente l'état des relais...

    Pour tous les esclaves MODBUS que j'ai pu faire je ne gére que les commandes de lecture 0x3 ou 0x4 et les commandes d'écriture 0x6 et 0x10..Il n'y a pas de probleme. Pour les adresses c'est purement arbitraire. (il y avais quelques limitation/recommandation mais c'est il y a longtemps...)

    A+

  29. #28
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Merci Schmo...

    Très bonne idée... Une trame maitre -> Une trame Une trame esclave, c'est surement plus facile à gérer..

    ça serait super sympa si tu pouvais jeter un oeil sur le soft...
    Encore Merci...

  30. #29
    schmo

    Re : Envoi d'informations sur MODBUS avec un PIC

    salut,

    En ce qui concerne le prog que tu as mis en lien:

    - la gestion parait ok, le programme gere les commande 03 et 16
    - il manque quelques routines,
    - il manque principalement la partie reception de l'UART (mise en buffer de la trame ) et la gestion d'un timer qui permet de savoir quand la trame requete est terminée.

    Jette un oeil sur le même programme en basic, j'ai l'impression qu'il est plus complet.(en même temps il est asser facile de traduire des fonctions basic en C)
    Courage

  31. #30
    jorg1n

    Re : Envoi d'informations sur MODBUS avec un PIC

    Je te remercie schmo, je vais regarder le soft en basic et voir ce que je peux faire...

    Donc si je comprend bien, dans "l'état" où est le soft, je ne peux pas pour le moment m'en servir?

    MErci encore pour ton aide.

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. [PIC]-Communication entre 2 PICs->Envoi d'informations
    Par jorg1n dans le forum Électronique
    Réponses: 20
    Dernier message: 01/04/2009, 13h20
  2. Protocole Modbus
    Par invite9b9d0eb8 dans le forum Électronique
    Réponses: 7
    Dernier message: 19/11/2008, 18h13
  3. Envoi de données midi ave un pic
    Par LTHOMAS dans le forum Électronique
    Réponses: 7
    Dernier message: 09/08/2008, 10h30
  4. Modbus Protocol Communication
    Par invitec782be84 dans le forum Électronique
    Réponses: 1
    Dernier message: 27/02/2008, 19h40
  5. Demande d'informations sur un montage de type AOP avec microphone
    Par Sinseman44 dans le forum Électronique
    Réponses: 4
    Dernier message: 21/12/2007, 20h14
Découvrez nos comparatifs produits sur l'informatique et les technologies.