• Aucun résultat trouvé

PRESENTATION DES MODULES MODBUS

N/A
N/A
Protected

Academic year: 2022

Partager "PRESENTATION DES MODULES MODBUS"

Copied!
8
0
0

Texte intégral

(1)

PRESENTATION DES MODULES MODBUS

Le protocole de communication Modbus de Gould Modicon (actuellement division de Schneider Electric/Télémécanique, 1er constructeur mondial d'automates) est un réseau de type maître-esclave très répandu au point qu’il n’existe quasiment aucun constructeur de systèmes de pilotage d’automatismes qui ne propose de couplage Modbus. Dans la pratique, Modbus permet d’interconnecter des matériels aussi hétérogènes que des Automates Programmables Industriels (API), des variateurs de vitesse pour moteurs, des capteurs, des terminaux d’atelier intelligents, des calculateurs. Ce protocole est caractérisé par une forme et un contenu de messages simples et universels ainsi que la possibilité de s’utiliser sur une liaison série aussi répandue que la RS232C.

Modbus est donc un outil pédagogique de tout premier plan pour qui s’intéresse au niveau trame.

I – Le principe de Modbus

a) Architecture du réseau Modbus

Le réseau Modbus est un réseau composé d'un seul Maître et d'Esclaves, qui communiquent par une liaison série asynchrone:

MAITRE

ESCLAVES

COMMUNICATION SERIE

Le support électrique de la liaison série suit une des deux normes courantes.

La liaison type RS232 (+12V,-12V), la seule disponible sur PC, n'est utilisable que dans le cas d'un réseau avec un seul esclave. Cette liaison sera utilisée pour l'initiation au fonctionnement du réseau.

(2)

Dans le cas d'un réseau réel, la liaison est bidirectionnelle sous la norme RS485 (0-5V différentiel, disponible sur Mac) . Pour envoyer un message sur la ligne, le Maître "prend la parole"(en activant le signal "RTS" du port série), c'est à dire impose le niveau logique sur la liaison avec un driver 3 états, uniquement pendant l'envoi de son message. Les esclaves reçoivent le message, et émettent une réponse en prenant la ligne à leur tour. Etant donné qu'il ne peut y avoir qu'un esclave qui réponde à un message, il n'y pas de collision sur le réseau Modbus, sauf en cas d'erreur de paramétrage.

La liaison différentielle comprend 3 fils : le signal '+' , le signal '-' et la masse. Elle permet des transmissions peu sensibles aux rayonnements électromagnétiques, sur une distance pouvant atteindre plusieurs centaines de mètres.

b) Dialogue Maître-Esclave et trames

Le dialogue sur un réseau MODBUS est toujours à l’initiative du maître. Ce dernier procède en posant une question (ou en donnant un ordre) à un esclave particulier qui en retour lui fournit la réponse à la question (ou la confirmation de la bonne exécution de l’ordre). Les trames question et réponse sont envoyées sous la forme de chaînes de caractères, lesquelles reprennent l’adresse de l’esclave, un numéro de code fonction et le paramétrage de cette dernière.

Dans une trame Modbus ASCII, chaque octet est représenté sous la forme des codes ASCII des caractères qui le représentent. Par exemple, l’octet 00000110 soit 0x42 sera transmis sous la forme de la chaîne ‘42’ correspondant aux codes des chiffres 4 et 2.

D’une manière générale, une trame (figure 2) est la concaténation des éléments suivants :

⇒Entête : ‘:’

⇒Adresse de l’esclave (0x01..0xF8) : ‘01’..’F8’,

⇒Numéro de la fonction (0x01..0x06) :’01’..’06’,

⇒Données. Contenu et taille variable suivant la fonction.

⇒Octet de vérification de la trame ou LRC8 (0x00..0xFF) calculé depuis les valeurs adresse de l’esclave, numéro de fonction et champs de données :

‘00’..’FF’.

⇒Un délimiteur de fin constitué des caractères Carrier Return (0x0D) et Line Feed (0x0A).

Dans l’exemple ci-dessous, le maître demande à l’esclave 04 de mettre sa sortie d’adresse 0 à l’état logique « 1 »

Entête Adresse Esclave Code Fonction Données LRC Délimiteur

1 carac 2 caract. 2 caract. N*2 caract. 2 caract. Retour Chariot Line Feed

: 04 05 0000FF00 F8 CR LF

(3)

II - Les modules entrées-sorties Modbus

a) Présentation physique

Les modules sont architecturés autour d'un microcontrôleur moderne Atmel RISC, doté d'une mémoire programme de 1K mots et d'une mémoire Flash de 128 octets. Ces modules gèrent 4 entrées logiques (0-5V) et 4 sorties logiques.

4 3 2 1

@0x

MAX232 µC ATMEL

1

1

1 2 3 12 JP1 JP2 JP3

JP4

Gnd E4 E3 E2 E1

Gnd S4 S3 S2 S1

1 2 3

4 r v

v1

v2

v3

v4

RESET JP5

Connecteurs :

JP1 : type de liaison série (RS232C : 1-2, RS485 : 2-3) JP2 : modification adresse esclave (1-2)

JP3 : alimentation 9V =

JP4 : prise réseau RS485 (+Vcc : 1, « +a » : 2, « -a » : 3, gnd : 4) JP5 : prise communication RS232C

Entrées : E1, E2, E3, E4. (actives à l’état bas). Utilisation possible par les poussoirs 1 à 4 (attention, l'adressage des entrées est de 0 à 3)

Sorties : S1, S2, S3, S4 (actives à l’état bas) (attention, l'adressage des sorties est de 0 à 3) Visualisation des sorties : v1, v2, v3, v4 (allumées à l’état bas)

Visualisation de l’activité : Rx : rouge, Tx : vert (s'allume lors de l'envoi de la réponse) MAX232 : conversion des signaux RS232 (Rx : 13, Tx : 14) / TTL (Rx : 12, Tx : 11) µC ATMEL : cœur de l’esclave

Reset : initialisation du module

Adresse esclave : @Ox (autocollant sur la platine)

Ils possèdent une "intelligence" locale qui offre de nombreuses fonctionnalités supplémentaires:

suppression des rebonds d'entrée

détection de fronts

comptage de fronts...

(4)

b) Spécifications techniques des modules MODBUS

Communication :

19,2 kb/s , 8 bits de données, 1 bit de stop, aucun bit de parité

pas de contrôle de flux Types de liaisons :

RS232C

RS485 Format des trames :

ASCII Fonctions reconnues :

0x01 lecture de n bit(s) de sortie consécutif(s)

0x02 lecture de n bit(s) d’entrée consécutif(s)

0x03 lecture de n registre(s) internes

0x04 lecture de n registre (s) d’entrée

0x05 écriture d’un bit de sortie

0x06 écriture d’un registre interne Codes d’erreur des trames d’exception :

0x01 code fonction non autorisé sur l’esclave

0x02 adresse (entrée, sortie, registre) illégale sur l’esclave

0x03 valeur(s) du champ de données non valide(s) Entrées :

4 (0x00..0x03) [attention au décalage entre les n°entrée et les poussoirs]

Sorties :

4 (0x00..0x03) Registres internes :

8 registres (0x0000..0x0007)

0x0000 : détection d’un front montant sur les entrées

0x0001 : détection d’un front descendant sur les entrées

0x0002 : comptage entrée 1 sur front montant

0x0003 : comptage entrée 2 sur front montant

0x0004 : comptage entrée 3 sur front montant

0x0005 : comptage entrée 4 sur front montant

0x0006 : temporisation anti-chevauchement questions/réponses (ms)

0x0007 : adressage de l’esclave (fonction inopérante sur la version actuelle du microcontrôleur)

(5)

Annexes 1 - Principales fonctions MODBus

Ne sont donnés ci-après que les fonctions qui peuvent être utiles pour faire fonctionner les modules .Pour chacune d'entre-elles, seuls sont spécifiés les paramètres du champ de données. Il est à noter que les adresses de base des entrées, des sorties et des registres commencent à 0000 .

0x02 : lecture de n bit(s) d’entrée consécutif(s) Requête du maître :

Champs de Données

Adresse 1ere entrée Nombre d’entrées à lire

Octet de poids fort Octet de poids faible Octet de poids fort Octet de poids faible

2 caract. 2 caract. 2 caract. 2 caract.

Réponse de l’esclave :

Champs de Données

Nombre d’octets Huit premières entrées Huit entrées suivantes

n°8 n°1 n°16 n°9

2 caract. 2 caract. 2 caract. 2 caract.

0x05 : écriture d’un bit de sortie (bobine) Requête du maître :

Champs de Données

Adresse de la sortie Etat « 1 » : FF00 Etat « 0 » :0000 Octet de poids fort Octet de poids faible Octet de poids fort Octet de poids faible

2 caract. 2 caract. 2 caract. 2 caract.

Réponse de l’esclave :

Champs de Données

Adresse de la sortie Etat « 1 » : FF00 Etat « 0 » :0000 Octet de poids fort Octet de poids faible Octet de poids fort Octet de poids faible

2 caract. 2 caract. 2 caract. 2 caract.

0x03 : lecture de n registre(s) internes Requête du maître :

Champs de Données

Adresse 1er registre Nombre de registres à lire Octet de poids fort Octet de poids faible Octet de poids fort Octet de poids faible

2 caract. 2 caract. 2 caract. 2 caract.

Réponse de l’esclave :

Champs de Données

Nombre N de registres*2 1er registre fort/faible 2eme registre fort/faible

2 caract. 4 caract. 4 caract. 4 caract.

(6)

0x06 : écriture d’un registre interne Requête du maître :

Champs de Données

Adresse du registre Donnée 16 bits

Octet de poids fort Octet de poids

faible Octet de poids fort Octet de poids faible

2 caract. 2 caract. 2 caract. 2 caract.

Réponse de l’esclave :

Champs de Données

Adresse du registre Donnée 16 bits

Octet de poids fort Octet de poids faible

Octet de poids fort Octet de poids faible

2 caract. 2 caract. 2 caract. 2 caract.

Pour toute information complémentaire, consulter le site modbus.org

Annexe 2 - Calcul du LRC

Le LRC est l'autocontrôle de la consistance du message. Une erreur de transmission conduit à une incohérence du message global.

Le LRC est calculé sur la valeur des octets du message , hors le délimiteur de début ':'' et ceux de fin (CRLF) . C'est le complément à 2 de la somme 8 bits (ou modulo 256) des valeurs (n°esclave, fonction, data) .

Le calcul pratique du LRC se fait par :

S = (n°esclave + fonction + data) & 256 S=~S

S = S + 1

Le contrôle de validité se fait par :

(n°esclave + fonction + data + LRC reçu) = 0x00

Exemple:

esclave 0x01

fonction 0x05 éciture bit n°1

MSB adresse 0x00

LSB adresse 0x01

MSB data 0xFF valeur d'écriture

LSB data 0x00

LRC 0xFA

Total 0x200 soit 0x00 modulo 256

(7)

Annexe 3 - Dialogue Modbus par programmation en langage C

Le langage C-Ansi pas plus les versions initiales de Windows ne prévoient la commande des périphériques d'un PC. Il faut faire appel à une bibliothèque externede fonctions.

Parmi les solutions possibles, nous pouvons citer :

• la gestion du port série par extension des structures de fichiers (createfile(),...) accessible depuis Windows NT4 (et version supérieures); cette solution ne demande aucune licence supplémentaire. Pour faciliter son usage, il existe de nombreuses implantations disponibles sur le Net (www.cppfrance.com par exemple).

• la bibliothèque ActiveX Microsoft "Mscomm" soumise à licence et peu documentée pour un usage en C (voir site MSDN) ; elle présente l'avantage de gérer le port par messages (~interruption en assembleur) et donc de libérer le temps processeur pour d'autres activités.

• la bibliothèque Marshall Soft présente sur le marché depuis les premiers PC et qui possède une très bonne documentation (en anglais!). Son usage est libre en enseignement.

Exemple d'utilisation de la bibliothèque WSC pour envoyer un message Modbus ::

#include <windows.h>

#include <stdio.h>

#include "wsc.h"

void main(void) {

int Sio_Err;

char message[23] = ":machainehexadecimale\r\n";

// remarquer la syntaxe C pour le Cr et le LF // open COM1

Sio_Err = SioReset(COM1,1024,1024);

Sio_Err = Sio_Err + SioBaud(COM1, WSC_Baud19200);

Sio_Err =Sio_Err + SioParms(COM1,WSC_NoParity,WSC_OneStopBit,WSC_WordLength8);

if (Sio_Err < 0)

{ // display error message

printf("Erreur communication serie %d : ",Sio_Err);

} else {

// set RTS

printf("Setting RTS\n");

SioRTS(COM1,'S');

SioPuts(COM1, (LPSTR) message ,23);

SioRTS(COM1,'C');

printf("Le programme est termine.\n");

} // close port SioDone(COM1);

} /* end main */

(8)

Annexe 4 - Principales fonctions de la Bibliothèque WSC

int SioBaud( int COMx,unsigned BAUDS ) Sets the baud rate of the selected port (use defined values) int SioFlow( int COMx,char ) Enables / disables hardware flow control.

int SioInfo( WSC_VERSION) Returns the 3 digit version number

int SioGetc( int COMx ) Reads the next character from the serial line.

WSC_NO_DATA (-100) is returned if no byte is available.

int SioGets ( int COMx, (LPSTR) String_Pointer , unsigned Max_Cnt)

Reads a string of characters. The SioGets function reads the smaller of the number of bytes wanted (Max_Cnt) and the number of bytes in the receive buffer. A zero is returned if no bytes are read.

int SioParms ( int COMx , int Parity , int Stop_Bits , int Length)

Sets parity, stop bits, and word length.

int SioPutc ( int COMx , char Message) Transmit a character over a serial line.

int SioPuts ( int COMx,(LPSTR) Str_Pointer , unsigned Number_of_Characters)

Transmits a string of characters.

int Err SioReset ( int COMx , int Buffer_RX , int Buffer_TX )

The SioReset function initializes (opens) the selected serial port.

SioReset should be called before making any other calls to WSC except for setting default behavior (port=-1). SioReset uses the parity, stop bits, and word length value previously set if SioParms was called, otherwise the default values (19200, no parity, 8 data, 1 stop) are used.

int SioRTS ( int COMx, 'C' or 'R' or 'R') Sets, clears, or reads the Request to Send (RTS) int SioRxClear ( int COMx ) Clears the receive buffer.

int SioRxQue ( int COMx) Returns the number of characters in the RX queue.

int SioStatus ( int COMx ,unsigned Status_Mask) Returns the serial port line status.

int SioTxClear ( int COMx) Clears the transmit buffer.

Le premier paramètre des fonctions est toujours le numéro de port utilisé (COM1 ou COM2)

Définitions utiles

#define COM1 0 #define COM2 1 #define WSC_NoParity 0 #define WSC_TwoStopBits 2

#define WSC_WordLength8 8 #define WSC_Baud9600 5 #define WSC_Baud19200 6

Consulter le site http://www.marshallsoft.com pour plus de détails.

Annexe 5 - Programme de conversion Ascii-Hexadécimal

Exemple de fonctions utiles pour développer un programme de dialogue en langage C .

unsigned char ascii_hex( char temp) {

temp = temp - '0';

if (temp < 0 ) {rx_err |= 0x04 ; temp = 30;}

if (temp > 0x09) // A, B....

{

temp &= 0xDF; // forcage majuscule temp = temp - 0x07;

if (temp > 'F') { rx_err |= 0x04 ; temp = 30;}

} return temp;

}

unsigned char hex_ascii(unsigned char temp) {

if (temp<0 ) | (temp>15) err = 1;

temp = (temp & 0x0F) + '0';

if (temp > '9' ) temp += 0x07 ; return temp;

}

Références

Documents relatifs

Il y a eu un peu moins de journées (5), que les années précédentes, mais le nombre de jours x participants (81) reste stable, en grosse partie du fait du WE

Erire une fontion strCompare qui prend en param etre deux ha^ nes de arat eres s1..

b) la liste de tous les livres (identifiant, nom, section et niveau) de l’enseignement secondaire de la matière ayant comme libellé &#34;Mathématiques&#34;. SELECT IdLiv,

[r]

[r]

Dans un zoo, l’unique activité d’un manchot est l’utilisation d’un bassin aquatique équipé d’un toboggan et d’un plongeoir.. On a observé que si un

PETIT GUIDE DE CALCUL

[r]