Modbus est unprotocole de communication non-propriétaire, créé en 1979 parModicon (absorbée en1996 parSchneider Electric), de lacouche ISO applicatif. Il permet à des composants électroniques industriels de communiquer entre eux, souvent dans le cadre d'unSCADA. Il peut être utilisé dans le cas d'échange via des communications séries ou via unréseau TCP/IP.
Le protocole MODBUS est un protocole de typeclient/serveur[1]. Par exemple, uneInterface Humain-Machine SCADA est connectée à uneunité 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[3]. 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 :
Modbus définit 3 types de PDU (Protocol Data Unit) disctincts[4]:
Le procotole 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 |
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 type | Function name | Function code | Subcode | Comment | ||
|---|---|---|---|---|---|---|
| Data Access | Bit access | Physical Discrete Inputs | Read Discrete Inputs | 2 | ||
| Internal Bits or Physical Coils | Read Coils | 1 | ||||
| Write Single Coil | 5 | |||||
| Write Multiple Coils | 15 | |||||
| 16-bit access | Physical Input Registers | Read Input Registers | 4 | |||
| Internal Registers or Physical Output Registers | Read Multiple Holding Registers | 3 | ||||
| Write Single Holding Register | 6 | |||||
| Write Multiple Holding Registers | 16 | |||||
| Read/Write Multiple Registers | 23 | |||||
| Mask Write Register | 22 | |||||
| Read FIFO Queue | 24 | |||||
| File Record Access | Read File Record | 20 | ||||
| Write File Record | 21 | |||||
| Diagnostics | Read Exception Status | 7 | serial only | |||
| Diagnostic | 8 | 00-18, 20 | serial only | |||
| Get Com Event Counter | 11 | serial only | ||||
| Get Com Event Log | 12 | serial only | ||||
| Report Server ID | 17 | serial only | ||||
| Read Device Identification | 43 | 14 | ||||
| Other | Encapsulated Interface Transport | 43 | 13, 14 | |||
| CANopen general Reference | 43 | 13 | ||||
Le protocole Modbus peut être implémenté :
Modbus n'est pas sécurisé par défaut[5]. 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[6].
Le serveur et le client Modbus s'authentifient mutuellement par TLS. Les autorisations du client sontdéfinis par rôle. Le rôle est écrit dans une extension « RoleOID » ducertificat X.509 du client, qui permet au serveur de vérifier si le client est autorisée à réaliser l'action demandée sur la ressource. Labase 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.