Modbus

Modbus est un protocole de communication non-propriétaire, créé en 1979 par Modicon (absorbée en 1996 par Schneider Electric), de la couche ISO applicatif. Il permet à des composants électroniques industriels de communiquer entre eux, souvent dans le cadre d'un SCADA. Il peut être utilisé dans le cas d'échange via des communications séries ou via un réseau TCP/IP.

Description du protocole

Le protocole MODBUS est un protocole de type client/serveur. Par exemple, une Interface Humain-Machine SCADA est connectée à une unité terminale distante (ou RTU) et communique par Modbus. Dans ce cas, l'IHM est cliente et le RTU est serveur.

Il existe trois types de transmission Modbus :

Ces trois types de transmission sont incompatibles les uns avec les autres.

Le protocole MODBUS définit un « protocol data unit » (PDU) qui est indépendant de toute couche protocolaire sous-jacente. Le PDU est composé d’un code de fonction, permettant d’indiquer quel type d’actions le client cherche à réaliser, et de données. Pour associer le protocole au bon élément, le protocole définit un « Application Data Unit », qui est composé d’une adresse (pour le protocole par défaut) ou une entête « MBAP » (pour Modbus/TCP), d’un PDU et de code de vérification d'intégrité. L’ADU est formé par le client qui initie la communication.

En résumé :

PDU =Code de fonction + Données

Pour Modbus générique :

ADU = Adresses + PDU + code d’erreur

Pour Modbus/TCP :

ADU = En-tête MBAP + PDU + code d’erreur

où l'entête MBAP est composée de :

  1. Identifiant de transaction ("transaction identifier") : identifie la transaction requête/réponse
  2. Identifiant de protocole ("Protocol identifier"): toujours égal à 0
  3. Longueur ("length"): Nombre de bits suivants (à partir de l'identifiant d'unité)
  4. Identifiant de l'unité ("Unit Identifier") : identifie le serveur


Modbus définit 3 types de PDU (Protocol Data Unit) disctincts:

Modèles de données

Le protocole MODBUS définit 4 types de données :

Modèles Type d’objet Type
Discretes input Un bit Lecture uniquement
Coils Un bit Lecture-Ecriture
Input registers Mots de 16-bits Lecture uniquement
Holding registers Mots de 16-bits Lecture-Ecriture

Codes de fonctions

Les codes de fonction permettent au client de dire au serveur quels types d’actions réaliser. Il en existe trois types :

Par exemple, le code "01" signifie que le client demande à lire un registre "Coils" à une adresse donnée.

Function typeFunction nameFunction code Subcode Comment
Data AccessBit accessPhysical Discrete InputsRead Discrete Inputs2
Internal Bits or Physical CoilsRead Coils1
Write Single Coil5
Write Multiple Coils15
16-bit accessPhysical Input RegistersRead Input Registers4
Internal Registers or Physical Output RegistersRead Multiple Holding Registers3
Write Single Holding Register6
Write Multiple Holding Registers16
Read/Write Multiple Registers23
Mask Write Register22
Read FIFO Queue24
File Record AccessRead File Record20
Write File Record21
DiagnosticsRead Exception Status7 serial only
Diagnostic8 00-18, 20 serial only
Get Com Event Counter11 serial only
Get Com Event Log12 serial only
Report Server ID17 serial only
Read Device Identification43 14
OtherEncapsulated Interface Transport43 13, 14
CANopen general Reference 43 13

Couche physique

Le protocole Modbus peut être implémenté :

Sécurité

Modbus n'est pas sécurisé par défaut. Cependant, Modbus Organization a spécifié une version sécurisée de Modbus/TCP, qui se base sur de l'encapsulation TLS : Modbus/TCP Security. Le protocole utilise par défaut le port TCP 802.

Le serveur et le client Modbus s'authentifient mutuellement par TLS. Les autorisations du client sont définis par rôle. Le rôle est écrit dans une extension « RoleOID » du certificat X.509 du client, qui permet au serveur de vérifier si le client est autorisé à réaliser l'action demandée sur la ressource. La base de données associant rôle et droit est spécifique au vendeur et peut-être hébergée localement sur le serveur ou bien sur un serveur distant.

Références

  1. ↑ (en) « MODBUS APPLICATION PROTOCOL SPECIFICATION » Accès libre [PDF], sur Modbus.org (consulté le )
  2. ↑ (en) « MODBUS MESSAGING ON TCP/IP IMPLEMENTATION GUIDE » [PDF], sur Modbus.org (consulté le )
  3. ↑ « Principe maître-esclave Modbus », sur https://product-help.schneider-electric.com/ (consulté le )
  4. ↑ (en) « MODBUS over Serial Line. Specification and Implementation Guide » Accès libre [PDF], sur Modbus.org (consulté le )
  5. ↑ (en) Arnaud Soullié, « DEF CON 25 - ICS Village - Arnaud Soullié - fun with Modbus 0x5a - Nothing New. Still Relevant. » [vidéo], sur DEF CON 25 (consulté le )
  6. ↑ (en) « MODBUS/TCP Security » Accès libre [PDF], sur Modbus.org (consulté le )

Voir aussi

Articles connexes

Liens externes