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.
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
|
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.- 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).
2.1. Structure des messages :
Le maître envoie un message constitué de la façon suivante:
- 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.
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.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.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):
Sa définition est la suivante :
La détection de fin de trame est réalisée sur un silence supérieur ou égal à 3 octets.
- Mode 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 RS485Le 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
– 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
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.
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
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.
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
- data [0..2] est le message
- data [3] est le nombre d’octet dans le message, 1–3
- data [4] est mit à 255 lorsque le message est reçu
- data [5] est mit à 255 lorsque il y a une erreur
- data [6] est l’adresse de l’esclave
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
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