39
Protocole MODBUS TCP 27/01/2015 WGom:FESTO France : MODBUS TCP 1 Protocole MODBUS TCP

Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Embed Size (px)

Citation preview

Page 1: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 1

Protocole MODBUS TCP

Page 2: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 2

Protocole MODBUS TCP : Introduction (1)

• Le protocole MODBUS a été proposé et mis au point en 1979 par la société

GOULD MODICON (MODicon BUS) pour interconnecter ses automates

programmables via liaison série.

• La spécification du protocole MODBUS est gratuite, les droits sont toujours libres

et seulement la conformité doit juste être vérifiée (par modbus.org)

• MODBUS est indépendant du médium de transmission (câbles, fibres

optiques,...).

• Les implémentations du protocole MODBUS, basées sur la transmission sérielle

RS232, RS485 (MODBUS-RTU, MODBUS-ASCII) ou sur le réseau à jeton

(MODBUS+) ont été largement rependues et bien approuvées par les industriels.

Page 3: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 3

Protocole MODBUS TCP : Introduction (2)

Couche applicative MODBUS

MODBUS RTU/ASCII MODBUS + /HDLC

Liaison série

RS-232 ou RS-485Couche physique

(réseau à jeton)

TCP

IP

Ethernet II / 802.3

Couche physique

Ethernet

MODBUS TCP

• Avec l’arrivé de l’Ethernet TCP/IP, le protocole a été implémenté sur ce réseau sous le nom : MODBUS TCP

• Comme ses prédécesseurs, MODBUS TCP est un standard ouvert basé sur le même protocole et l’Ethernet TCP/IP est simplement utilisée comme un nouveau moyen de communication et de transmission de données.

• Le dialogue entre deux stations se fait en mode Client Server et les messages MODBUS TCP (requêtes/réponses) sont encapsulés dans le segment TCP

• Tous les message du Client sont envoyées vers le port 502 de la station Server

Page 4: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 4

Message (trame) MODBUS TCP

Modbus Header Function Code Data

TrID ProID Length UnitID

2 octets 2 octets 2 octets 1 octet

1 octet Max 248 octets

Ethernet : Message MODBUS TCP : max 256 octets

• La spécification du protocole MODBUS définit simplement la partie PDU (Protocol Data Unit) qui est indépendant des couches de communication.

• La spécification du protocole MODBUS définit trois types de trames PDU :

– MODBUS Request PDU : requête du Client (Maître)

– MODBUS Response PDU : réponse du Serveur (Esclave)

– MODBUS Exception Response PDU : réponse du Serveur en cas d’erreur

• Un message MODBUS TCP est composée de l’entête (Header) et de données (PDU)

• Par rapport à Modbus RTU (liaison série) : dans le MODBUS TCP, le CRC-16 n’est pas nécessaire car le contrôle est fait au niveau de la trame Ethernet

PDU (Protocol Data Unit)

CODE FONCTION

(Function Code)

DONNEES

(Data)

Adresse Esclave

(Slave Addresse)

CRC-16

(Error Check)

Liaison série : Message MODBUS RTU/ASCII : max 256 octets

1 octet 1 octet 2 octetsMax 252 octets

Page 5: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 5

Message (trame) MODBUS TCP : l’Entête (MBAP Header)

Champ Longueur Description Client Serveur

TrIDTransaction

Identifier

2 octets Identification de la

transaction

MODBUS

(Request/Response)

Initialisé par

le Client

Recopié par le

Serveur dans le

réponse

ProIDProtocol Identifier

2 octets Toujours 0

Pour le protocole

MODBUS

Initialisé par

le Client

Recopié par le

Serveur dans le

réponse

Length 2 octets Nombre des octets

suivants

Initialisé par

le Client

(request)

Initialisé par le

Serveur dans sa

réponse

UnitIDUnit Identifier

1 octet Identification de

participant distant

connecté sur le bus

(idem No d’esclave)

Initialisé par

le Client

Recopié par le

Serveur dans le

réponse

Modbus Header Function Code Data

Page 6: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 6

Dialogue MODBUS TCP (sans erreurs)

Code Fonction Données Client

Code Fonction Données Demandées

Initialisation et

Envoie de Requête

Réalisation de l’action

Initialisation et

envoie de la réponse

Réception de Réponse

Client Server

• L’octet FUNCTION CODE (Code Fonction)

indique à Serveur l’action qu’il doit réaliser.

• Les valeurs FC doivent être entre 1 et 127 car

les valeurs 128 à 255 sont réservées pour des

réponses d’exception (Erreurs) du Serveur.

• Le champ DATA (Données) peut contenir

l’information supplémentaire (p.ex. adresse et

nombre des opérandes à traiter, nombre des

octets de données, etc..) que le Serveur utilise

pour réaliser l’action définie par le FUNCTION

CODE.

• Quand le Serveur répond, il utilise l’octet

FUNCTION CODE pour indiquer l’exécution

correcte ou erronée (exception) de requête.

• Pour une réponse correcte, le Serveur recopie

simplement l’octet FUNTION CODE du

MODBUS Request PDU, et insert dans le champ

DATA de la réponse les données demandées

par le Client (p.ex. les valeurs des opérandes).

Requête Client Réponse du Server

Request PDU

Response PDU

Page 7: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 7

Dialogue MODBUS TCP (le cas d’erreurs; exception answer)

Code Fonction Données Client

Code Fonction + 0x80 Code d’exception

Initialisation et

Envoie de Requête

Erreur Détectée

Envoie de la réponse

d’exception

Réception de Réponse

Client Server

• Si la trame de requête n’était pas correcte ou la fonction demandée n’a pas été réalisée

correctement, le Serveur utilise l’octet FUNCTION CODE pour indiquer l’exécution

erronée (exception) de la requête.

• Erreur est signalée en retournant l’octet FUNCTION CODE avec une valeur équivalente

au Code d’origine mais avec le bit 7 (MSB) forcé à 1.

• Cet octet est suivie par un octet du EXCEPTION CODE (Code d’exception) qui explique la

nature du défaut (erreur transaction).

Réponse du Server

Request PDU

Exception Response PDU

Page 8: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 8

Dialogue MODBUS TCP : Les messages d’exception

Code Nom Explication

01 ILLEGAL FUNCTION

(Code Fonction erroné)

Le Code Fonction reçu n’est pas supporté par le Serveur (ou

02 ILLEGAL DATA ADDRESS

(Adresse incorrecte)

L’adresse de données reçue dans la requête n’est pas supportée

Plus exactement, le combinaison de l’adresse et de nombre des

adresses disponibles dans le Serveur

03 ILLEGAL DATA VALUE

(Données incorrectes)

La valeur contenue dans la requête n’est pas correcte pour le type

04 SLAVE DEVICE FAILURE

(Défaut Esclave)

Le Serveur est incapable d’exécuter la fonction demandée ou

pendant l’exécution de la fonction demandée par le Client

05 ACKNOWLEDGE

(Acquittement)

Le Serveur (ou Esclave) a accepté la requête mais le temps

trop longue.

La réponse est envoyée pour ne pas sortir sur l’erreur TimeOut.

Le Client peut envoyer une requête encore une fois pour savoir si la

06 SLAVE DEVICE BUSY

(Equipement occupé)

Le Serveur (ou Esclave) est en train d’exécuter une requête.

Le Client peut retransmettre la requête quand le Serveur sera libre.

08 MEMORY PARITY ERROR

(Erreur parité mémoire)

Liée aux fonctions 20 et 21 et indique que le contenu des fichiers

Page 9: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 9

Message (trame) MODBUS TCP : Codage des données MODBUS

• MODBUS utilise une représentation « BIG ENDIAN » pour le codage

de données comme les adresses et les valeurs

• Ceci signifie que pour une donnée en format d’un mot (deux octets),

l’octet du Poids Fort est envoyé comme premier.

• Alors, pour envoyer le contenu d’un registre de 16 bits :

[R] = 0x12AB ; MSB = 0x12 ; LSB = 0xAB

• Le premier octet envoyé sera l’octet du Poids Fort MSB = 0x12 suivie

par l’octet du poids faible LSB = 0xAB

[0x12][0xAB]

Page 10: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 10

Message (trame) MODBUS TCP : Modèle d’adressage MODBUS

• La spécification du protocole MODBUS définit très précisément les règles d’adressage des données.

• Dans la structure MODBUS PDU chaque donnée peut être adressée de

0 à 65535 ( 0 à 0xFFFF)

• La spécification précise aussi que à l’intérieur de chaque bloc (type) de données, les éléments sont numérotés de 1 à N.

• En conséquence, si l’on veut s’adresser au premier élément d’un bloc (type) de données MODBUS, il faut utiliser l’adresse 0 ; pour l’élément 5, il faut utiliser l’adresse 4, etc… bien que leurs adresses physiques à l’intérieur d’équipement peuvent être complètement différentes (p.ex. 0xD800 : F454 et 0xA400 : 2446)

• Par contre, les affectations entre les données MODBUS et les adresses physiques réelles dans l’équipement restent totalement libres et spécifiques à l’équipement (par le constructeur).

Page 11: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 11

Message (trame) MODBUS TCP : Modèle de données MODBUS

• Le modèle de données MODBUS est très simple et contient

quatre types de base (blocs de données) :

– Discrete Inputs (bits d’Entrées)

– Coils (bits de Sorties, bits internes)

– Input Registers (mots d’Entrées, mots diagnostic)

– Holding Registers (mots de Sorties, mémoire interne, registres, compteurs, …)

Type de donnée Format Type d’accès

Discrete Inputs (bits d’Entrées) un Bit Lecture Seule (Read Only)

Coils (bits de Sorties) un Bit Lecture/Ecriture (Read/Write)

Input Registers (mots d’Entrées) Mot 16 Bits Lecture Seule (Read Only)

Holding Registers (mots de Données) Mot 16 Bits Lecture/Ecriture (Read/Write)

Page 12: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 12

Message (trame) MODBUS TCP : Code Fonction (publiques)

Opérande Fonction (Service) Code Dec Code Hex

Type d’accès

(Format

de Données)

Un Bit

(Discrete Inputs)

Entrées physiquesLecture N bits d’entrées 02 02

(Coils)

Bits internes

Ou

Sorties physiques

Lecture N bits 01 01

Ecriture d’un bit 05 05

Ecriture de N bits 15 0F

Mots

de

16 bits

Entrées Physiques

(Input Registers)Lecture N mots 04 04

(Holding Registers)

Registres,

Mémoires Internes

Ou

Sorties physiques

Lecture N mots 03 03

Ecriture d’un mot 06 06

Ecriture de N mots 16 10

Lecture / Ecriture de N mots 23 17

Ecriture Masquée d’un mot 22 16

Lecture pile FIFO 24 18

Enregistrement d’un fichier

(File record access)

Lecture du fichier

(Read File Record)

20 14

Ecriture fichier

(Write File Record)

21 15

Equipement déporté Identification d’équipement

(Read Device Identification)

43 2B

Modbus Header Function Code Data

Su

pp

ort

ées p

ar

MO

DB

US

TC

P C

lien

t C

PX

-FE

C

Page 13: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 13

MODBUS TCP : Fonction 1 : Read Coils (lecture N bits)

Code Fonction 0x01 1 octet

Adresse Début 0x0000 à 0xFFFF 2 octets

Nombre de bits 1 à 2000 (0x07D0) 2 octets

Code Fonction 0x01 1 octet

Nombre d’octets N* 1 octet

Données :

Etat de bits

Valeurs entre

0x00 – 0xFF

N

ou N+1 octets

Modbus Header 0x01 Data

• Cette fonction permet de lire l’état de 1 à 2000 bits des opérandes affectées aux données

type Coil (p.ex. sorties physiques TOR ou les bits de mots de mémoire).

Code Fonction 0x81 1 octet

Code d’exception 0x01ou 0x02

ou 0x03 ou 0x04

1 octet

Commentaires :

• Dans la requête, Adresse Début précise l’adresse

(ou No) du premier bit demandé.

• L’adressage des bits commence à 0; c.à.d les

bits de 1 à 16 sont adressés de 0 à 15.

• Dans la réponse, les bits respectifs sont rangés

«bit par bit» dans l’octet de la réponse. Donc, le bit

0 (LSB) du premier octet de la réponse correspond

au bit pointé par l’ Adresse Début.

• Les autres bits sont rangés dans des octets

suivants dans l’ordre croissant (bits 0 -> 7).

• Si le nombre de bits demandés n’est pas multiple

de 8, l’état de bits non demandés sera toujours à 0.

Request PDU (Requête)

Exception Response PDU (Réponse ne cas d’erreur)

Response PDU (Réponse)

(*) N = (Nb de bits) / 8 ; mais si la reste est différente 0 => N = N+1

Page 14: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 14

MODBUS TCP : Fonction 1 : Read Coils : Exemple

Code Fonction 0x01

Adr. Début P.Fort 0x00

Adr. Début p.faible 0x13

Nb de bits P.Fort 0x00

Nb de bits p.faible 0x13

Modbus Header 0x01

• Demande de lecture de 19 bits de sorties 20 à 38.

Adresse début : 0x0013 (19 décimal)

Nb de bits : 0x0013 (19 bits)

Commentaires :

• Dans le premier octet de la réponse l’état des sorties 27 à 20 est 0xAA (1010 1010 binaire),

c.à.d le bit 27 (MSBit) est à 1 et le bit 20 (LSBit) est à 0.

• La valeur du deuxième octet qui contient l’état de sorties 35 – 28 est 0x55 (0101 0101 binaire),

c.à.d. le bit 35 (MSBit) est à 0 et le bit 28 (LSBit) est à 1.

• Le troisième octet contient les sorties 38 – 36. Ces trois bits sont à 1.

• Les autres bits de cet octet (bits 7, 6, 5, 4, 3) sont à 0 car ils représentent les bits non demandés.

Request PDU (Requête) Response PDU (Réponse)

Code Fonction 0x01

Nb Octets 0x03

Bits 27 – 20 0xAA

Bits 35 – 28 0x55

Bits 38 – 36 0x07 0x00 0x13 0x00 0x13

Modbus Header 0x01 0x03 0xAA 0x55 0x07

Page 15: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 15

MODBUS TCP : Fonction 2 : Read Discrete Inputs (lecture N bits d’entrées)

Code Fonction 0x02 1 octet

Adresse Début 0x0000 à 0xFFFF 2 octets

Nombre de bits 1 à 2000 (0x07D0) 2 octets

Code Fonction 0x02 1 octet

Nombre d’octets N* 1 octet

Données :

Etat de bits

Valeurs entre

0x00 – 0xFF

N

ou N+1 octets

Modbus Header 0x02 Data

• Cette fonction permet de lire l’état de 1 à 2000 bits des opérandes affectées aux données

type Discrete Inputs (p.ex. entrées physiques TOR ou certains bits de mémoire).

Code Fonction 0x82 1 octet

Code d’exception 0x01ou 0x02

ou 0x03 ou 0x04

1 octet

Commentaires :

• Dans la requête, Adresse Début précise l’adresse

(ou No) du premier bit d’entrée demandée.

• L’adressage des bits commence à 0; c.à.d les bits

de 1 à 16 sont adressés de 0 à 15.

• Dans la réponse, les bits des entrées respectives

sont rangés «bit par bit» dans l’octet de la réponse.

Le bit 0 (LSB) du premier octet de la réponse

correspond au bit de première entrée pointée par

l’Adresse Début.

• Les bits des autres entrées sont rangés dans des

octets suivants dans l’ordre croissant (bits 0 -> 7).

• Si le nombre de bits demandés n’est pas multiple

de 8, l’état de bits non demandés sera toujours à 0.

Request PDU (Requête)

Exception Response PDU (Réponse ne cas d’erreur)

Response PDU (Réponse)

(*) N = (Nb de bits) / 8 ; mais si la reste est différente 0 => N = N+1

Page 16: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 16

MODBUS TCP : Fonction 2 : Read Discrete Inputs : Exemple

Code Fonction 0x02

Adr. Début P.Fort 0x00

Adr. Début p.faible 0x00

Nb de bits P.Fort 0x00

Nb de bits p.faible 0x0C

Modbus Header 0x02

• Demande de lecture de bits d’entrées 1 à 12.

Adresse début : 0x0000 (0 décimal)

Nb de bits : 0x000C (12 bits)

Commentaires :

• Dans le premier octet de la réponse l’état des entrées 8 à 1 est 0x8A (1000 1010 binaire),

c.à.d les entrées 8,4,2 sont à 1 et les entrées 7,6,5,3,1 sont à 0.

• Le second octet contient l’état des entrées 12 – 9 (la valeur 0x09 (0000 1001 binaire),

c.à.d. les entrées 12 et 9 sont à 1 et les entrées 11,10 sont à 0.

• Les 4 autres bits de cet octet sont à 0 car ils représentent les entrées non demandées.

Request PDU (Requête) Response PDU (Réponse)

Code Fonction 0x02

Nb Octets 0x02

Bits 8 – 1 0x8A

Bits 12 – 9 0x090x00 0x00 0x00 0x0C

Modbus Header 0x02 0x02 0x8A 0x09

Page 17: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 17

MODBUS TCP : Fonction 3 : Read Holding Registers (lecture de N mots)

Code Fonction 0x03 1 octet

Adresse Début 0x0000 à 0xFFFF 2 octets

Nombre de mots 1 à 123 (0x7B) 2 octets

Code Fonction 0x03 1 octet

Nombre d’octets N* 1 octet

Données :

Valeurs de mots

Valeurs entre

0x00 – 0xFF

N*2 octets

Modbus Header 0x03 Data

• Cette fonction permet de lire le contenu d’un block des mots des opérandes affectées aux

données type Holding Registers (p.ex. mots de sorties ou certains mots de la mémoire).

Code Fonction 0x83 1 octet

Code d’exception 0x01ou 0x02

ou 0x03 ou 0x04

1 octet

Commentaires :

• Dans la requête, Adresse Début précise l’adresse

(ou No) du premier mot demandé.

• L’adressage des mots commence à 0; c.à.d les

mots de 1 à 16 sont adressés de 0 à 15.

• Dans la réponse, les valeurs des mots respectifs

sont rangées «octet par octet» en mode BIG

ENDIAN [mot] = [MSByte][LSByte].

Request PDU (Requête)

Exception Response PDU (Réponse ne cas d’erreur)

Response PDU (Réponse)

(*) N = Nb de mots demandés

Page 18: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 18

MODBUS TCP : Fonction 3 : Read Holding Registers : Exemple

Code Fonction 0x03

Adr. Début P.Fort 0xB1

Adr. Début p.faible 0x50

Nb de bits P.Fort 0x00

Nb de bits p.faible 0x03

Modbus Header 0x03

• Demande lecture de 3 mots.

Adresse début : 0xB150 (45392 décimal)

Nb de mots : 0x0003 (3 mots)

Request PDU (Requête)

Response PDU (Réponse)

Code Fonction 0x03

Nb d’Octets 0x06

Mot 1: MSByte 0x00

Mot 1: LSByte 0x10

Mot 2: MSByte 0x01

Mot 2: LSByte 0x00

Mot 3: MSByte 0xFF

Mot 3: LSByte 0xFF

0xB1 0x50 0x00 0x03

Modbus Header 0x03 0x06 0x00 0x10 0x01 0x00 0xFF 0xFF

Commentaires :

• Les valeurs lues sont les suivantes

Mot 1 : (adr. 45392) = 0x0010 = 16 dec

Mot 2 : (adr. 45393) = 0x0100 = 256 dec

Mot 3 : (adr. 45394) = 0xFFFF = 65535 dec

Page 19: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 19

MODBUS TCP : Fonction 4 : Read Input Registers (lecture de N mots d’entrées)

Code Fonction 0x04 1 octet

Adresse Début 0x0000 à 0xFFFF 2 octets

Nombre de mots 1 à 123 (0x7B) 2 octets

Code Fonction 0x04 1 octet

Nombre d’octets N* 1 octet

Données :

Valeurs de mots

Valeurs entre

0x00 – 0xFF

N*2 octets

Modbus Header 0x04 Data

• Cette fonction permet de lire le contenu d’un block des mots des opérandes affectées aux

données type Input Registers (mots des entrées (TOR, Ana) ou certains mots de mémoire).

Code Fonction 0x84 1 octet

Code d’exception 0x01ou 0x02

ou 0x03 ou 0x04

1 octet

Commentaires :

• Dans la requête, Adresse Début précise l’adresse

(ou No) du premier mot d’entrées demandées.

• L’adressage des mots commence à 0; c.à.d les

mots de 1 à 16 sont adressés de 0 à 15.

• Dans la réponse, les valeurs des mots respectifs

sont rangées «octet par octet» en mode BIG

ENDIAN [mot] = [MSByte][LSByte].

Request PDU (Requête)

Exception Response PDU (Réponse ne cas d’erreur)

Response PDU (Réponse)

(*) N = Nb de mots demandés

Page 20: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 20

MODBUS TCP : Fonction 4 : Read Input Registers : Exemple

Code Fonction 0x04

Adr. Début P.Fort 0xB1

Adr. Début p.faible 0x50

Nb de bits P.Fort 0x00

Nb de bits p.faible 0x03

Modbus Header 0x04

• Demande lecture de 3 mots des entrées.

Adresse début : 0xB150 (45392 décimal)

Nb de mots : 0x0003 (3 mots)

Request PDU (Requête)

Response PDU (Réponse)

Code Fonction 0x04

Nb d’Octets 0x06

Mot 1: MSByte 0x00

Mot 1: LSByte 0x10

Mot 2: MSByte 0x01

Mot 2: LSByte 0x00

Mot 3: MSByte 0xFF

Mot 3: LSByte 0xFF

0xB1 0x50 0x00 0x03

Modbus Header 0x04 0x06 0x00 0x10 0x01 0x00 0xFF 0xFF

Commentaires :

• Les valeurs lues sont les suivantes

Mot des entrées 1 : (adr. 45392) = 0x0010 = 16 dec

Mot des entrées 2 : (adr. 45393) = 0x0100 = 256 dec

Mot des entrées 3 : (adr. 45394) = 0xFFFF = 65535 dec

Page 21: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 21

Ethernet TCP/IP : Exemple message MODBUS TCP : Fonction 3

Entête (Modbus header) : Length=6; UID=0

Code Fonction : CF = 03 : Lecture N mots

Starting Addresse : SA = B150 hex ( 45392)

Qtity of Words : NW = 000F hex ( 15) Requête

Réponse

Entête (Modbus header) : Length=21 hex

Code Fonction : CF = 03 : Lecture N mots

Qtity of Bytes (Nb octets réponse): NB = 1E hex (30)

Data bytes (Données) : 30 octets = 15mots

Page 22: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 22

MODBUS TCP : Fonction 5 : Write Single Coil (écriture/forçage d’un bit)

Code Fonction 0x05 1 octet

Adresse du bit 0x0000 à 0xFFFF 2 octets

Etat du bit 0x0000 ou 0xFF00 2 octets

Code Fonction 0x85 1 octet

Code d’exception 0x01ou 0x02

ou 0x03 ou 0x04

1 octet

Modbus Header 0x05 Data

• Cette fonction permet de forcer l’état (ON/OFF) d’un bit de l’opérande affectée aux

données type Coils (p.ex. sorties physiques TOR ou certains bits de la mémoire).

Commentaires :

• Dans la requête, Adresse Début précise

l’adresse du bit demandé.

• L’adressage des bits commence à 0; c.à.d les bits

de 1 à 16 sont adressés de 0 à 15.

• La valeur 0x0000 correspond au forçage à 0

• La valeur 0xFF00 correspond au forçage à 1

• Toutes les autres valeurs sont interdites et ne

provoquent pas le changement d’état du bit.

• La réponse c’est l’écho de la requête, et elle est

retournée par le Server (Esclave) après le forçage

du bit demandé.

Request PDU (Requête)

Exception Response PDU (Réponse ne cas d’erreur)

Response PDU (Réponse)

Code Fonction 0x05 1 octet

Adresse du bit 0x0000 à 0xFFFF 2 octets

Etat du bit 0x0000 ou 0xFF00 2 octets

Page 23: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 23

MODBUS TCP : Fonction 5 : Write Single Coil : Exemple

Code Fonction 0x05

Adr. du bit P.Fort 0x00

Adr. du bit p.faible 0x0C

Etat du bit P.Fort 0xFF

Etat du bit p.faible 0x00

Modbus Header 0x05

• Mise à 1 du bit 12 des sorties physiques TOR.

Adresse début : 0x000C (12 décimal)

Etat du bit : 0xFF00 (mise à 1)

Request PDU (Requête)

Response PDU (Réponse)0x00 0x0C 0xFF 0x00

Code Fonction 0x05

Adr. du bit P.Fort 0x00

Adr. du bit p.faible 0x0C

Etat du bit P.Fort 0xFF

Etat du bit p.faible 0x00

Modbus Header 0x05 0x00 0x0C 0xFF 0x00

Page 24: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 24

MODBUS TCP : Fonction 6 : Write Single Register (écriture d’un mot)

Code Fonction 0x06 1 octet

Adresse du mot 0x0000 à 0xFFFF 2 octets

Valeur du mot 0x0000 ou 0xFFFF 2 octets

Code Fonction 0x86 1 octet

Code d’exception 0x01ou 0x02

ou 0x03 ou 0x04

1 octet

Modbus Header 0x06 Data

• Cette fonction permet d’écrire une valeur dans un mot de l’opérande affectée aux

données type Holding Registers (p.ex. sorties TOR,Analogiques ou certains mots de la

mémoire).

Commentaires :

• Dans la requête, Adresse Début précise

l’adresse du mot demandé.

• L’adressage des mots commence à 0; c.à.d les

mots de 1 à 16 sont adressés de 0 à 15.

• La réponse c’est l’écho de la requête, et elle est

retournée par le Server (Esclave) après l’écriture du

mot demandé.

Request PDU (Requête)

Exception Response PDU (Réponse ne cas d’erreur)

Response PDU (Réponse)

Code Fonction 0x06 1 octet

Adresse du mot 0x0000 à 0xFFFF 2 octets

Valeur du mot 0x0000 ou 0xFFFF 2 octets

Page 25: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 25

MODBUS TCP : Fonction 6 : Write Single Register : Exemple

Code Fonction 0x06

Adr. du mot P.Fort 0x9C

Adr. du mot p.faible 0x41

Valeur du mot P.Fort 0x00

Valeur du mot p.faible 0x00

Modbus Header 0x06

• Mise à 0 d’un mot.

Adresse début : 0x9C41 (40001 décimal)

Valeur du mot : 0x0000 (mise à 0)

Request PDU (Requête)

Response PDU (Réponse)0x9C 0x41 0x00 0x00

Code Fonction 0x06

Adr. du mot P.Fort 0x9C

Adr. du mot p.faible 0x41

Valeur du mot P.Fort 0x00

Valeur du mot p.faible 0x00

Modbus Header 0x06 0x9C 0x41 0x00 0x00

Page 26: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 26

MODBUS TCP : Fonction 15 : Write Multiple Coils (écriture de N bits)

Code Fonction 0x0F 1 octet

Adresse Début 0x0000 à 0xFFFF 2 octets

Nombre de bits 1 à 1968 (0x07B0) 2 octets

Nombre d’octets N* 1 octet

Etat des bits 0x00 – 0xFF N* octets

Code Fonction 0x0F 1 octet

Adresse Début 0x0000 à 0xFFFF 2 octet

Nombre de bits 1 à 1968 (0x0FB0) 2 octets

Modbus Header 0x0F Data

• Cette fonction permet de forcer l’état (ON/OFF) de chaque bit d’un block des

opérandes affectées aux données type Coils (p.ex. sorties TOR ou certains bits de la

mémoire).

Code Fonction 0x8F 1 octet

Code d’exception 0x01ou 0x02

ou 0x03 ou 0x04

1 octet

Commentaires :

• Dans la requête, Adresse Début précise

l’adresse (ou No) du premier bit demandé.

• L’adressage des bits commence à 0; c.à.d les bits

de 1 à 16 sont adressés de 0 à 15.

• Les valeurs (états) des bits respectifs sont rangées

«bit par bit» dans l’octet de la requête. Le bit 0 (LSB)

du premier octet de données correspond au bit

pointé par l’ Adresse Début.

• Les autres bits sont rangés dans des octets

suivants dans l’ordre croissant (bits 0 -> 7).

• Si le nombre de bits demandés n’est pas multiple

de 8, l’état de bits non demandés ne change pas.

Request PDU (Requête)

Exception Response PDU (Réponse ne cas d’erreur)

Response PDU (Réponse)

(*) N = (Nb de bits) / 8 ; mais si la reste est différente 0 => N = N+1

Page 27: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 27

MODBUS TCP : Fonction 15 : Write Multiple Coils : Exemple

Code Fonction 0x0F

Adr. Début P.Fort 0x00

Adr. Début p.faible 0x13

Nb de bits P.Fort 0x00

Nb de bits p.faible 0x0A

Nb d’octets data 0x02

Etat bits P.Fort (bits 27-20) 0xCD

Etat bits p.faible (bits 29-28) 0x01

Modbus Header 0x0F

• Demande d’écriture de 10 bits de sorties à partir du bit 20 (20 à 29).

Adresse début : 0x0013 (19 décimal)

Nb de bits : 0x000A (10 bits)

Etat des bits 29 – 20: (29)[0 1 1 1 0 0 1 1 0 1](20) = [0x01CD]

Commentaires :

• Dans le premier octet de la requête l’état des sorties 27 à 20 est 0xCD (1100 1101 binaire),

c.à.d les bits 27,26,23,22 et 20 sont à 1 et les bits 25,24,21 sont à 0.

• La valeur du deuxième octet qui contient l’état de sorties 35 – 28 est 0x01 (0000 0001 binaire),

c.à.d. le bit 29 est à 0 et le bit 28 est à 1.

• Les valeurs des bits hors la plage d’adressage (bits 35 – 30) sont sans signification et ces bits ne changeront

pas l’état après l’exécution de la requête.

Request PDU (Requête)

Response PDU (Réponse)

0x00 0x13 0x00 0x0A 0x02 0xCD 0x01

Code Fonction 0x0F

Adr. Début P.Fort 0x00

Adr. Début p.faible 0x13

Nb de bits P.Fort 0x00

Nb de bits p.faible 0x0A

Modbus Header 0x0F 0x00 0x13 0x00 0x0A

Page 28: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 28

MODBUS TCP : Fonction 16 : Write Multiple Registers (écriture de N mots)

Code Fonction 0x10 1 octet

Adresse Début 0x0000 à 0xFFFF 2 octets

Nombre de mots 1 à 120 (0x0078) 2 octets

Nombre d’octets 2 x N* 1 octet

Valeurs de mots 0x00 – 0xFF 2 x N* octets

Code Fonction 0x10 1 octet

Adresse Début 0x0000 à 0xFFFF 2 octet

Nombre de mots 1 à 120 (0x0078) 2 octets

Modbus Header 0x10 Data

• Cette fonction permet d’écrire des valeurs dans chaque mot d’un block des opérandes

affectées aux données type Holding Registers (sorties TOR/Ana, mots de la mémoire,etc…)

Code Fonction 0x90 1 octet

Code d’exception 0x01ou 0x02

ou 0x03 ou 0x04

1 octet

Commentaires :

• Dans la requête, Adresse Début précise

l’adresse (ou No) du premier mot demandé.

• L’adressage des mots commence à 0; c.à.d

les mots de 1 à 16 sont adressés de 0 à 15.

• Les valeurs des mots respectifs sont rangées

«octet par octet» en mode BIG ENDIAN

[mot] = [MSByte][LSByte].

Request PDU (Requête)

Exception Response PDU (Réponse ne cas d’erreur)

Response PDU (Réponse)

(*) N = Nb de mots

Page 29: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 29

MODBUS TCP : Fonction 16 : Write Multiple Registers : Exemple

Code Fonction 0x10

Adr. Début P.Fort 0x9C

Adr. Début p.faible 0x41

Nb de mots P.Fort 0x00

Nb de mots p.faible 0x02

Nb d’octets data 0x04

Valeur mot 1 P.Fort 0x12

Valeur mot 1 p.faible 0x34

Valeur mot 2 P.Fort 0xAB

Valeur mot 2 p.faible 0xCD

Modbus Header 0x10

• Demande d’écriture de 2 mots de sorties à partir du mot 40001

Adresse début : 0x9C41 (40001 décimal)

Nb de mots : 0x0002 (2 mots)

Valeurs: [0x1234, 0xABCD] = [4660, 43981]

Request PDU (Requête)

Response PDU (Réponse)

0x9C 0x41 0x00 0x02 0x04 0x12 0x34

Code Fonction 0x10

Adr. Début P.Fort 0x9C

Adr. Début p.faible 0x41

Nb de mots P.Fort 0x00

Nb de mots p.faible 0x02

Modbus Header 0x10 0x9C 0x41 0x00 0x02

0xAB 0xCD

Response PDU (Réponse)

Page 30: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 30

MODBUS TCP : Exemple configuration API Schneider

Page 31: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 31

CPX-FEC :

MODBUS TCP Server

Mode Remote I/O

Page 32: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 32

CPX - FEC Remote I/O: Protocole MODBUS TCP : Adresses et données accessibles

Mode Remote I/O : Rappel

• CPX-FEC en mode Remote I/O

supporte le WEB Server et le protocole

ModbusTCP (fonctionnalité SERVER)

• Le CPX-FEC est un Serveur sur le

réseau Ethernet et il doit être géré par

un système Client (MODBUS TCP)

comme un module des E/S déportées :

les fonctionnalités de l’API ne sont

pas utilisées !

• Adresse IP, le paramétrage et la

configuration du CPX-FEC doivent être

paramétrés par la console MMI ou par

l’équipement Client

• Pour les détails , voir:

Manuel CPX-FEC, chapitre 6

Page 33: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 33

CPX - FEC Remote I/O: Protocole MODBUS TCP : Informations disponibles (1)

Remote I/O : Etat du CPX-

FEC

• Les données sur l’état du CPX-FEC permettent

d’avoir l’information sur la configuration et l’état

des modules du CPX-FEC

• Les données (en lecture seule) sont situées

dans le domaine des adresses MODBUS entre

45367 et 45391

• Pour les détails , voir:

Manuel CPX-FEC, chapitre 6

Données accessibles en lecture (fonctions 3 et 23)

Données accessibles en lecture (fonctions 3 et 23)

Données accessibles en lecture (fonctions 3 et 23)

Page 34: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 34

CPX - FEC Remote I/O: Protocole MODBUS TCP : Informations disponibles (2)

Règle générale :

• Module communication CPX-FEC met à la disposition du Client les informations

suivantes :

En lecture

Etat des entrées (s’ils existent):- 1 mot (TOR)

- 2 mots (Analogiques)

Etat des sorties (s’ils existent)- 1 mot (TOR)

- 2 mots (Ana)

Diagnostic du module- 1 mot pour tous les modules

En écriture

Etat des sorties- 1 mot (TOR)

- 2 mots (Ana, distributeurs)

• Chaque module E/S met à la disposition du Client l’ensemble des informations sur son état

:

En lecture

- 1 mot : l’état l’interface de diagnostic E/S

- 1 mot : Données Table Système

- 1 mot : Données diagnostic module CPX-FEC

En écriture

- 1 mot : accès à l’interface de diagnostic E/S

- 1 mot : Données Table Système

Données Diagnostic en directe

Page 35: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 35

CPX - FEC Remote I/O: Protocole MODBUS TCP : Informations disponibles (3)

En lecture

- 1 mot : l’état des Entrées (bits 0-3 pour 4DI, bits 0-7 pour 8DI)

- 1 mot : Données de diagnostic de module

En écriture : rien

• Module 4 E TOR (4 DI) et 8 E TOR (8 DI)

En lecture

- 1 mot : image de l’état des Sorties (bits 0-3)

- 1 mot : Données de diagnostic de module

En écriture : • Module 4 S TOR (4 DO)

- 1 mot : les Sorties (bits 0-3)

En lecture

- 1 mot : l’état des Entrées (bits 0-7)

- 1 mot : image de l’état des Sorties (bits 0-7)

- 1 mot : Données de diagnostic de module

En écriture :• Module 8 E/ 8 S TOR (8 DI/ 8 DO)

- 1 mot : les Sorties (bits 0-7)

En lecture

- 2 mots : l’état de deux canaux des Entrées

- 1 mot : Données de diagnostic de module

En écriture : rien

• Module 2 E Analogiques (2 AI)

Page 36: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 36

CPX - FEC Remote I/O: Protocole MODBUS TCP : Informations disponibles (4)

• L’organisation de la zone des données disponibles (en lecture et en écriture) correspond à la

configuration du terminal CPX.

• Les adresses MODBUS des mots de chaque module correspond à la position de chaque

module (de gauche à droit) dans la structure CPX.

• Elles sont affectées dans l’ordre croissant, sans discontinuité.

• Exemple : CPX-FEC:4DI:8DI/8DO:MPA2(4 valves)

En lecture : 10 mots

- 1 mot : l’état l’interface de diagnostic E/S

- 1 mot : Données Table Système

- 1 mot : Données diagnostic module CPX-FEC

- 1 mot : l’état des Entrées (bits 0-3 pour 4DI)

- 1 mot : Données de diagnostic de module

- 1 mot : l’état des Entrées (bits 0-7)

- 1 mot : image de l’état des Sorties (bits 0-7)

- 1 mot : Données de diagnostic de module

- 1 mot : image de l’état des bobines (bits 0-3)

- 1 mot : Données de diagnostic de module

En écriture : 4 mots

- 1 mot : accès à l’interface de diagnostic E/S

- 1 mot : Données Table Système

- 1 mot : les Sorties (bits 0-7 pour 8 DO)

- 1 mot : les bobines (bits 0-3)

Données Diagnostic en directe !!

Page 37: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 37

CPX - FEC Remote I/O: Protocole MODBUS TCP : Informations disponibles (5)

• Exemple : CPX-FEC:4DI:8DI/8DO:MPA2(4 valves)

En lecture : Lecture de 10 mots à partir de l’adresse : 45392

45392 : 1 mot : l’état l’interface de diagnostic E/S

45393 : 1 mot : Données Table Système

45394 : 1 mot : Données diagnostic module CPX-FEC

45395 : 1 mot : l’état des Entrées (bits 0-3 pour 4DI)

45396 : 1 mot : Données de diagnostic de module

45397 : 1 mot : l’état des Entrées (bits 0-7)

45398 : 1 mot : image de l’état des Sorties (bits 0-7)

45399 : 1 mot : Données de diagnostic de module

45400 : 1 mot : image de l’état des bobines (bits 0-3)

45401 : 1 mot : Données de diagnostic de module

En écriture : Ecriture de 4 mots à partir de l’adresse : 40001

40001 : 1 mot : accès à l’interface de diagnostic E/S

40002 : 1 mot : Données Table Système

40003 : 1 mot : les Sorties (bits 0-7 pour 8 DO)

40004 : 1 mot : les bobines (bits 0-3)

Page 38: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 38

CPX - FEC Remote I/O: Protocole MODBUS TCP : Informations disponibles (6)

• IMPORTANT : CPX-FEC copie la table MODBUS dans l’image des Entrées/Sorties de l’automate;

en conséquence :

En lecture : Lecture de 10 mots à partir de l’adresse : 45392 (FST : IW0 – IW9)

45392 = IW0 : 1 mot : l’état l’interface de diagnostic E/S

45393 = IW1 : 1 mot : Données Table Système

45394 = IW2 : 1 mot : Données diagnostic module CPX-FEC

45395 = IW3 : 1 mot : l’état des Entrées (bits 0-3 pour 4DI)

45396 = IW4 : 1 mot : Données de diagnostic de module

45397 = IW5 : 1 mot : l’état des Entrées (bits 0-7)

45398 = IW6 : 1 mot : image de l’état des Sorties (bits 0-7)

45399 = IW7 : 1 mot : Données de diagnostic de module

45400 = IW8 : 1 mot : image de l’état des bobines (bits 0-3)

45401 = IW9 : 1 mot : Données de diagnostic de module

En écriture : Ecriture de 4 mots à partir de l’adresse : 40001 (FST : OW0 – OW3)

40001 = OW0 : 1 mot : accès à l’interface de diagnostic E/S

40002 = OW1 : 1 mot : Données Table Système

40003 = OW2 : 1 mot : les Sorties (bits 0-7 pour 8 DO)

40004 = OW3 : 1 mot : les bobines (bits 0-3)

Page 39: Formation Bus de Terrain _Partie 3_1 _Modbus tcp

Protocole MODBUS TCP

27/01/2015 WGom:FESTO France : MODBUS TCP 39

MERCI pour la partie théorique

MODBUS TCP