Cours Systèmes Embarqués: Le Bus RS485 MODBUS - PROFIBUS



Chapitre 4
--------------------------------------------------------------------------------------------------------------------------

1. La liaison RS485 :

1.1 Introduction :

               La norme RS485 définie par l’EIA, Electronic Industries Association, a été publiée en Avril 1983. Ce standard précise les caractéristiques électriques des émetteurs et des récepteurs pour une utilisation dans les systèmes multipoints en mode symétrique.
La transmission se fait sur une ligne électrique, pratiquement une paire torsadée, par des variations de tension en mode différentiel.

1.2 Le Bus RS485 :

            Un des principaux problèmes des liaisons séries est l'absence d'immunité pour le bruit sur les lignes de signal. L'émetteur et le récepteur comparent les tensions par rapport à une masse commune en ligne (exemple RS232). Un changement dans le niveau du potentiel de terre peut avoir des effets désastreux. Le bruit limite à la fois la distance maximale et la vitesse de communication. Avec l’RS485 il n'y a pas une masse commune comme signal de référence. La transmission est différentielle Le récepteur compare la différence de tension entre les deux lignes, au lieu d’un niveau de tension absolue sur une ligne de signal.
Cable RS485
Le support de transmission est ici différentiel. Deux fils correspondant à des niveaux complémentaires sont donc utiles pour chaque signal ce qui limite l'influence des bruits extérieurs et des masses. Des circuits trois états permettent des liaisons multipoints.
Architecture réseau RS484
Principales caractéristiques électriques de la norme RS485
Caractéristiques de la liaison RS485
Caractéristiques
Min.
Max.
Tension du générateur en circuit ouvert (VAB)
-
±6 V
Courant de sortie en court-circuit (I0)
-
150 mA
Résistance interne du générateur
50 Ω
100 Ω
Résistance de charge (RL)
100 Ω
-
Capacité parallèle (CL)
-
2500 pF
Vitesse
-
10 Mbit/s
Longueur de câble
-
1km
Niveaux significatifs de Tension :
Niveaux de tension de la liaison RS485

2. Le protocole :

            Un protocole consiste en la définition de trames d’échange. Plusieurs protocoles en été définies. Le protocole le plus connu est le protocole Modbus (marque déposée par MODICON) et Profibus (Siemens) qui sont deux protocoles standards de dialogue basé sur une structure hiérarchisée entre un maître et plusieurs esclaves. Mikroelectronika propose aussi un protocole non standard pour communiquer des microcontrôleurs de type PIC, DsPIC, AVR et Intel. Néanmoins l’utilisateur est libre de définir son propre protocole, nous allons voir à la fin de ce chapitre un exemple de réseau RS485 entre plusieurs microcontrôleurs de la famille PIC de Microchip.
Architecture MODBUS RS485
  • Le maître envoie une demande et attend une réponse.
  • Deux esclaves ne peuvent dialoguer ensemble.
  • Le dialogue maître – esclave peut être schématisé sous une forme successive de liaisons point à point.
  • Mode de communication : half-duplex. (2 fils ou 4 fils)
  • le maître parle à l'ensemble des esclaves, sans attente de réponse (diffusion générale).
Il ne peut y avoir sur la ligne qu'un seul équipement en train d'émettre. Aucun esclave ne peut envoyer un message sans une demande préalable du maître. Le dialogue direct entre les esclaves est impossible.
2.1. Structure des messages :
Le maître envoie un message constitué de la façon suivante:
Trame MODBUS

  • La détection de fin de message est réalisée sur un silence de durée supérieure ou égale à la durée de transmission de 3 octets.
  • L'esclave répond par un message du même type que le message question.
Le protocole Modbus est très utilisé pour les communications des automates programmables industriels et des variateurs de vitesse des moteurs électriques.

2.2. Adressage

Les abonnés du bus sont identifiés par des adresses attribuées par l’utilisateur.
L’adresse de chaque abonné est indépendante de son emplacement physique.
Les adresses vont de 1 à 64 pour le protocole Modbus et de 1 à 255 en général et ne doivent pas obligatoirement être attribuées de manière séquentielle.
Deux abonnés ne peuvent avoir la même adresse.

2.3. Echange maître vers 1 esclave

Le maître interroge un esclave de numéro unique sur le réseau et attend de la part de cet esclave une réponse.
Echange maître vers 1 esclave

2.4 Echange Maître vers tous les esclaves

Le maître diffuse un message à tous les esclaves présents sur le réseau, ceux-ci exécutent l’ordre du message sans émettre une réponse.

Echange Maître vers tous les esclaves

2.5 Format général d’une trame

Deux types de codage peuvent être utilisés pour communiquer sur un réseau Modbus.
Tous les équipements présents sur le réseau doivent être configurés selon le même type.
  • Mode RTU (Unité terminale distante):
La trame ne comporte ni octet d’en-tête de message, ni octets de fin de message.
Sa définition est la suivante :
- Mode RTU (Unité terminale distante)
CRC16 : paramètre de contrôle polynomial (cyclical redundancy check).
La détection de fin de trame est réalisée sur un silence supérieur ou égal à 3 octets.
  • Mode ASCII :
Chaque champ composant une trame est codé avec 2 caractères ASCII (2 fois 8 bits).
Mode ASCII
LRC : C’est la somme en hexadécimal modulo 256 du contenu de la trame hors délimiteurs, complémentée à 2 et transmise en ASCII.

2.6. Trame d’échange question/réponse

La question :
Elle contient un code fonction indiquant à l’esclave adressé quel type d’action est demandé.
Les données contiennent des informations complémentaires dont l’esclave a besoin pour exécuter cette fonction.
Le champ octets de contrôle permet à l’esclave de s’assurer de l’intégralité du contenu de la question.
La réponse
Si une erreur apparaît, le code fonction est modifié pour indiquer que la réponse est une réponse d’erreur.
Les données contiennent alors un code (code d’exception) permettant de connaître le type d’erreur.
Le champ de contrôle permet au maître de confirmer que le message est valide.

3. Bus de terrain Profibus

Profibus (Process Field Bus) est le nom d'un type de bus de terrain inventé par Siemens et devenu peu à peu une norme de communication dans le monde de l'industrie. Il s'appuie sur une liaison RS485
Le bus PROFIBUS-DP (Decentralised Peripheral) (périphérie décentralisée) est utilisé pour la commande de capteurs, d'actionneurs ou d'automates programmables par une commande centrale.
PROFIBUS-FMS (Fieldbus Message Specification) est utilisé aussi pour la connexion d'une « intelligence distribuée », c'est-à-dire la mise en communication de plusieurs automates les uns avec les autres  avec des débits qui peuvent atteindre 12 Mbit/s
Le bus PROFIBUS-PA (Process Automation) est utilisé, dans le cadre de l'ingénierie de procédé, pour contrôler des équipements de mesure par l'intermédiaire d'un système de contrôle de procédé. (Alimentation et signal sur un même câble, jusqu’à 31.25 Kbits/s.)
La majorité des automates Siemens disposent d'une interface Profibus-DP pour le dialogue avec le PC de programmation, supportant aussi le protocole MPI. Certains modèles proposent même une 2e interface Profibus-DP. Mise à part sa fonction servant à lier le PC de programmation à la CPU, le Profibus-DP peut servir de liaison entre un maître (par exemple la CPU) et ses esclaves (Micromaster, IHM...).
On reconnaît facilement un réseau Profibus-DP à la couleur de son câble : violet. En l'ouvrant, on distingue 2 fils : un vert et un rouge, nommé "A" et "B". En général, les connecteurs Profibus sont des connecteurs DB9 plus ou moins standards. Le fil "A" est relié à la pin n°3 du connecteur DB9, tandis que le fil "B" est relié à la pin n°8.
Câble
      Paire torsadée blindée, soigneusement isolée par une feuille conductrice et une tresse. Avec 2 conducteurs nommés A et B.
  • Fil vert : A, transporte le signal RxD/TxD-N
  • Fil rouge : B, transporte le signal RxD/TxD+N
Paire Torsadé RS485
Terminaison de ligne
– Résistances de terminaison équivalentes à l’impédance du câble pour polariser la ligne en l’absence de signal. En général, intégrées dans le connecteur et activables par un
Interrupteur
Terminaison de ligne
Débit et distance de Profibus 
La distance maximale et le débit sont liés, le bus accepte jusqu’à 32 équipements sans répéteur et 126 équipements avec répéteur. L’utilisation d’un répéteur régénérant le signal permet de cascader les segments. Il ne doit pas y avoir plus de 9 répéteurs entre un équipement et le maître.
Débit et distance de Profibus
Structure commune des télégrammes
Structure commune des télégrammes
Norme
Les divers types de télégrammes, identifiés par leur SD et les fonctions possibles pour chaque type, identifiées par FC.
• Exemple
– Ecriture des sorties : SD = 68h, FC = 6h, pas de SSAP ni DSAP et DU : contient les valeurs des sorties.
Adressage
• Plage d’adresses de 0 à 127
– 0 : en général utilisée par les outils de diagnostic.
– 1 à 125 : adresses librement utilisables pour les maîtres et esclaves.
– 126 : réservée pour les équipements dont l’adresse est définie par le bus.
– 127 : adresse de diffusion (message reçu par tous les esclaves)
• Fonctionnement maître esclave
  • Le maître envoie une requête à un esclave.
  • L’esclave renvoie une réponse en retour.
  • Ainsi, pas de risque de collision.
  • Polling successif des différents esclaves
  • Fonctionnement cyclique
  • Le temps de cycle dépend du nombre d’esclaves et de la taille des données échangées
Fonctionnement maître esclave
Fonctionnement multi maître
 Les différents maîtres accèdent à tour de rôle au bus et Ils s’échangent un « jeton ». Le propriétaire de ce jeton a le droit d’utiliser le bus. Lorsqu’il a fini son cycle, il envoie un télégramme au maître suivant.  Les règles suivantes s’appliquent
– Un seul maître peut écrire vers un esclave.
– Tous les maîtres peuvent lire tous les esclaves.
Fonctionnement multi maître

4. Application de la liaison RS485 pour les microcontrôleurs :

MikroPascal fournit un ensemble de routines et bibliothèques pour la liaison RS485 en architecture Master/Slave.
Format de la trame :
La trame est composée de 4 champs qui sont : octet de synchronisation, CRC, octet d’adresse, et les données
  1. data [0..2] est le message
  2. data [3] est le nombre d’octet dans le message, 1–3
  3. data [4] est mit à 255 lorsque le message est reçu
  4. data [5] est mit à 255 lorsque il y a une erreur
  5. data [6] est l’adresse de l’esclave 
 Chaque esclave possède sa propre adresse et reçoit seulement les paquets qui lui sont adressées. L’esclave ne peut jamais établir une communication. Il est de la responsabilité du programmeur de s'assurer qu’un seul dispositif transmet via bus 485 à la fois.
Les routines RS485 requirent un module USART sur le PORTC du microcontrôleur utilisé.
L’adresse 50 est l'adresse de diffusion commune à tous les esclaves (les paquets contenant l'adresse 50 sera reçu par tous les esclaves). Les seules exceptions sont les esclaves avec des adresses 150 et 169.
Note: il faut que Usart_Init () soit appelée avant l'initialisation RS485.
Voici un exemple de communication RS485 entre deux microcontrôleurs PIC16F876A
Liaison entre deux PIC16F876A  en RS485
Programme du maitre :
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*******************      http://www.technologuepro.com/        **************************//
// ISET Nabeul Le 07/12/2010                       --------+-------                                                  //
// Carte de test de la liaison RS485  programme maitre                                              //
// By ABIDI Hatem                                                                                                                  //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
program RSBUMASTER;
var dat : array[3] of byte;  // Message buffer
begin
  Lcd_Config(PORTB,6,5,4,3,PORTB,0,1,2);  // Initialize LCD
  Usart_init(9600); // Initialize USART module
  RS485Master_Init(PORTC, 2); // Initialize MCU as Master
  dat[0] := 'A';  // Message 'AII'
  dat[1] := 'I';
  dat[2] := 'I';
  Lcd_out(1,1,'Press START');
  while true do
  begin
    if PORTC.0 = 1 then
    begin
      Lcd_out(1,1,'Message sent:');
      Lcd_out(2,1,'AII');
      RS485Master_Send(dat, 3, 170); // send message
      delay_ms(1000);
    end;
  end;
end.

Programme de l’esclave :
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*******************        http://www.technologuepro.com/      ***************************//
// ISET Nabeul Le 07/12/2010                      --------+-------                                                   //
// Carte de test de la liaison RS485  programme esclave                                            //
// By ABIDI Hatem                                                                                                                   //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Program RSBUSLAVE;
var dat : array[8] of byte;       // Message buffer
    i, j : byte;
procedure interrupt;
begin
RS485Slave_Receive(dat);
ClearBit(PIE2, TXIE);
end;
begin
  Lcd_Config(PORTB,6,5,4,3,PORTB,0,1,2);
  Usart_init(9600);               // Initialize USART module
  RS485Slave_Init(PORTC, 2, 170); // Initialize MCU as Slave, address 160
  SetBit(PIE1, RCIE);             // Enable interrupt on byte received
  SetBit(INTCON, PEIE);           //   via USART (RS485)
  ClearBit(PIE2, TXIE);
  SetBit(INTCON, GIE);
  PORTB  := 0;
  dat[4] := 0;                    // Clear "message received" flag
  dat[5] := 0;                    // Clear error flag
  Lcd_out(1,1,'Standby');
  while true do
  begin
    // If there is an error,
    if dat[5] = TRUE then Lcd_out(1,1,'error');
    // If message received:
    if dat[4] = TRUE then
    begin
    Lcd_out(1,1,'Message receved:');
      dat[4] := 0;                //   Clear message received flag
      j := dat[3];                //   Number of data bytes received
      for i := 1 to j do
      BEGIN
        lcd_chr(2,i,dat[i - 1]);
      END;
    end;
  end;
end.
Note :
L’exemple suivant est téléchargeable à l’adresse suivante :
http://www.technologuepro.com/cours-systemes-embarques/exemple-RS485.zip 
Mot de passe : ABIDI
Schéma : Proteus 7 (ISIS) ou plus
Programme : Mikropascal 8