Vous êtes sur la page 1sur 13

rapport Modbus TCP / IP

TCP / IP

TCP est Transmission Control Protocol et IP est le protocole Internet. Ces protocoles sont
utilisés conjointement et représentent le protocole de transport pour l'Internet. Lorsque les
informations de modbus est envoyée en utilisant ces protocoles, les données sont transmises à
TCP où l'information supplémentaire est attaché et donné à IP. IP met ensuite les données
dans un paquet (ou datagrammes) et la transmet.

TCP doit établir une connexion avant de transférer des données, car il est un protocole basé
sur la connexion. Le Maître (ou Client Modbus TCP) établit une connexion avec l'esclave (ou
serveur). Le serveur attend une connexion entrante à partir du client. Une fois la connexion
établie, le serveur répond alors aux questions du client jusqu'à ce que le client ferme la
connexion.

Modbus RTU sur TCP

Autrement dit, ceci est un message Modbus RTU transmis avec un TCP / wrapper IP et
envoyé sur un réseau au lieu de lignes série. Le serveur n'a pas de SlaveID car il utilise une
adresse IP à la place.

Modbus TCP

Un guide d'implémentation Modbus Messaging fournie par Schneider Automation décrit un


protocole modifié spécifiquement pour une utilisation sur TCP / IP. La spécification officielle
de Modbus peut être trouvé à

. Les principales différences entre Modbus RTU et Modbus TCP sont décrites ici.

ADU & PDU

Mis à part les principales différences entre les connexions série et réseau indiqués ci-dessus, il
y a quelques différences dans le contenu du message.

En commençant par le message Modbus RTU et le retrait du SlaveID dès le début et la CRC à
partir des résultats finaux de l'unité PDU, l'unité de données de protocole.

Voici un exemple d'une requête Modbus RTU pour le contenu de l'analogique tenue de
registres de sortie # 40108 à 40110 du dispositif esclave avec l'adresse 17.

11 03 006B 0003 7687

11 : L'adresse SlaveID (17 = 11 hex) 03 : Le code de fonction (lecture de sortie analogique


registres de maintien) 006B : L'adresse de données du premier registre demandé. (40108-
40001 = 107 = 6B hex) 0003 : Le nombre total de registres demandés.(lire 3 registres 40108
à 40110) 7687 : Le CRC (contrôle de redondance cyclique) pour lecontrôle d' erreur.
Retrait du SlaveID et CRC donne la PDU:

03 006B 0003

MBAP Header

Un nouvel en-tête de 7 octets appelé l'en-tête MBAP (Modbus application en-tête) est ajouté
au début du message. Cet en-tête comporte les données suivantes:

Transaction Identifier: 2 octets fixés par le client pour identifier chaque demande. Ces octets
sont repris par le serveur puisque ses réponses ne peuvent pas être reçues dans le même ordre
que les demandes.

Protocole Identifier: 2 octets fixés par le client, = toujours 00 00

Durée: 2 octets identifiant le nombre d'octets dans le message à suivre.

Identificateur d'unité: 1 octet défini par le client et repris par le serveur pour l'identification
d'un esclave distant connecté sur une ligne série ou sur d'autres bus.

Résumé

La demande équivalente à cet exemple Modbus RTU

11 03 006B 0003 7687

Modbus TCP est:

0001 0000 0006 11 03 006B 0003

0001 : L' identificateur de transaction 0000 : Protocole Identificateur 000 6 : Longueur


du message (6 octets à suivre) 11 : L'identificateur de l' unité (17 = 11 hex) 03 : Le code de
fonction (lecture de sortie analogique registres de maintien) 006B : L'adresse de données de
la première inscrivez -vous demandé. (40108-40001 = 107 = 6B hex) 0003 : Le nombre total
de registres demandés. (lire 3 registres 40108 à 40110)
TCP / IP Wrapper

Frequently Asked Questions


Qu'est-ce que ASCII?

ASCII reposer American Standard Code for Information Interchange. De la même


manière que tous les 4 bits peuvent être combinés et représentés par un des seize
caractères hexadécimaux de 0 à F , toutes les 8 bits (chaque octet) peuvent être
combinés et représentés par un de 256 caractères ASCII, y compris les caractères
du clavier communs. Par exemple, certaines des valeurs pour les caractères ASCII
sont ...
décimale binaire Hex ASCII
(Base10) (base2) (base16) (base256)
0 0000 0000 00 nul
1 0000 0001 01 "
34 0010 0010 22 #
35 0010 0011 23 $
36 0010 0100 24 %
47 0010 1111 2F /
48 0011 0000 30 0
49 0011 0001 31 1
56 0011 1000 38 8
57 0011 1001 39 9
58 0011 1010 3A :
64 0100 0000 40 @
65 0100 0001 41 UNE
66 0100 0010 42 B
89 0101 1001 59 Y
90 0101 1010 5A Z
91 0101 1011 5B [
95 0101 1111 5F _
96 0110 0000 60 `
97 0110 0001 61 une
122 0111 1010 7A z
123 0111 1011 7B {
174 1010 1110 AE ®
255 1111 1111 FF

Comment les données sont stockées dans Modbus standard?

Les informations sont stockées dans le dispositif de l' esclave dans quatre tables
différentes.
Deux tables stockent on / off des valeurs discrètes (bobines) et les valeurs
numériques de deux magasins (registres). Les bobines et registres ont chacun une
lecture seule table et lecture-écriture table.

Chaque table a 9999 valeurs.


Chaque bobine ou le contact est 1 bit et attribuer une adresse de données
entre 0000 et270E .
Chaque registre est 1 mot = 16 bits = 2 octets et a également l' adresse de données
entre0000 et 270E .

Coil/Register Numbers Data Addresses Type Table Name


1-9999 0000 to 270E Read-Write Discrete Output Coils
10001-19999 0000 to 270E Read-Only Discrete Input Contacts
30001-39999 0000 to 270E Read-Only Analog Input Registers
40001-49999 0000 to 270E Read-Write Analog Output Holding Registers

Coil / enregistrer les numéros peuvent être considérés comme des noms de lieux,
car ils ne figurent pas dans les messages réels. Les adresses de données sont utilisés
dans les messages.

Par exemple, le premier registre de maintien, le numéro 40001, a l'adresse de


données0000 .
La différence entre ces deux valeurs est le décalage .
Chaque table a un déport différent. 1, 10001, 30001 et 40001.

Quel est l'ID esclave?

Chaque esclave dans un réseau se voit attribuer une adresse de l'unité unique de 1 à
247. Lorsque les données des demandes de maître, le premier octet, il envoie
l'adresse de l'esclave. De cette façon, chaque esclave sait après le premier octet ou
non d'ignorer le message.

Quels sont les formats de commandes et de réponses Modbus?

Suivez les liens dans ce tableau pour voir des exemples de demandes et de
réponses.

Data Addresses Read Write Single Write Multiple


Discrete Output Coils 0xxxx FC01 FC05 FC15
Discrete Input Contacts 1xxxx FC02 NA NA
Analog Input Registers 3xxxx FC04 NA NA
Analog Output Holding Registers 4xxxx FC03 FC06 FC16
les fonction modbus

Lire Coil Status (FC = 01)


Demande

Cette commande demande l'état ON / OFF de bobines discrètes # 20-56


du dispositif esclave avec l' adresse 17.

11 01 0013 0025 0E84

11 : L'adresse de l' esclave ( 11 hex = address17)

01 : Le code de fonction 1 (lire Coil Status)

0013 :. L'adresse de données de la première bobine à lire(0013 hex = 19, + 1


offset = bobine n ° 20)

0025 : Le nombre total de bobines demandé. ( 25 hex = 37, entrées 20-56)

0E84 : Le CRC (cyclique contrôle de redondance) pour la vérification des erreurs.

Réponse

11 01 05 CD6BB20E1B 45E6

11 : L'adresse de l' esclave ( 11 hex = address17)

01 : Le code de fonction 1 (lire Coil Status)

05 : Le nombre d'octets de données à suivre (37 Bobines / 8 bits par octet = 5


octets)

CD : Bobines 27-20 ( 1100 1101 )

6B : bobines 35-28 ( 0110 1011 )

B2 : bobines 43-36 ( 1011 0010 )

0E : bobines 51-44 ( 0000 1110 )


1B: 3 supports spatiaux et bobines 56-52 ( 0001 1011 )

45E6 : Le CRC (cyclique contrôle de redondance).

Read Input Status (FC = 02)


Demande

Cette commande demande l'état ON / OFF des entrées discrètes # 10197-10218


du dispositif esclave avec l' adresse 17.

11 02 00C4 0016 BAA9

11 : L'adresse de l' esclave ( 11 hex = address17)

02 : Le code de fonction 2 (lire Input Status)

00C4 :. L'adresse de données de la première entrée à lire (00C4 hex = 196, +


10001 offset = entrée # 10197)

0016 : Le nombre total de bobines demandé. ( 16 hex = 22, entrées 197-218)

BAA9 : Le CRC (cyclique contrôle de redondance) pour la vérification des erreurs.

Réponse

11 02 03 ACDB35 2018

11 : L'adresse de l' esclave ( 11 hex = address17)

02 : Le code de fonction 2 (lire Input Status)

03 : Le nombre d'octets de données à suivre (22 entrées / 8 bits par octet = 3


octets)

AC : Entrées TOR 10204 -10197 ( 1010 1100 )

DB : Entrées TOR 10212 à 10205 ( 1101 1011 )

35 : 2 espace détenteurs et entrées TOR de 10218 à 10213 ( 0011 0101 )

2018 : Le CRC (cyclique de contrôle de redondance).


Lire les registres de maintien (FC = 03)
Demande

Cette commande demande le contenu de sortie tenant des registres analogiques # à


40108 40110 du dispositif esclave avec l' adresse 17.

11 03 006B 0003 7687

11 : L'adresse de l' esclave ( 11 hex = address17)

03 : Le code de fonction 3 (lire lasortie analogique registres de maintien) 0

06B . L'adresse de données du premier registre demandé ( 006B hex = 107, + 40001
offset = entrée # 40108)

0003: Le nombre total de registres demandés. (lire 3 registres 40108 à 40110)

7687 : Le CRC (contrôle de redondance cyclique) pour le contrôle d' erreur.

Réponse

11 03 06 AE41 5652 4340 49AD

11 : L'adresse de l' esclave ( 11 hex = address17)

03 : Le code de fonction 3 (lire lasortie analogique registres de maintien)

06 : Le nombre d'octets de données à suivre (3 registres x 2 octets chacun = 6 octets)

AE41 : Le contenu du registre 40108

5652: Le contenu du registre 40109

4340 : Le contenu du registre 40110

49AD : Le CRC (cyclique de contrôle de redondance).

Lire les registres d'entrée (FC = 04)


Demande

Cette commande demande le contenu de l' entrée analogique registre # 30009


du dispositif esclave avec l' adresse 17.

11 04 0008 0001 B298

11 : L'adresse de l' esclave ( 11 hex = address17)

04 : Le code de fonction 4 (lire lesregistres d' entrées analogiques)

0008 : L'adresse de données du premier registre demandé. ( 0008 hex =


8, + 30001 offset = registre d'entrée # 30009)

0001: Le nombre total de registres demandés. (lire 1 registre)

B298 : Le CRC (cyclique contrôle de redondance) pour la vérification


des erreurs.

Réponse

11 04 02 000A F8F4

11 : L'adresse de l' esclave ( 11 hex = address17)

04 : Le code de fonction 4 (lecture des registres d' entrée analogique)

02 : Le nombre d'octets de données à suivre (1 entrées x 2 octets chacun = 2 octets)

000A : Le contenu du registre 30009

F8F4 : Le CRC (cyclique contrôle de redondance).

Force de Single Coil (FC = 05)


Demande

Cette commande est en train d' écrire le contenu de la bobine discrète # 173 à ON
dans le dispositif esclave avec l' adresse 17.

11 05 00AC FF00 4E8B


11 : L'adresse de l' esclave ( 11 hex = address17)

05 : Le code de fonction 5 (Force Single Coil)

00AC : L'adresse de données de la bobine.

(bobine n ° 173 - 1 = 172 =AC . hex) ( 00AC hex = 172, + 1 offset = bobine #
173)

FF00 : Le statut d'écrire ( FF00 = ON, 0000 = OFF)

4E8B : Le CRC (contrôle de redondance cyclique ) pour la vérification des erreurs.

Réponse

La réponse normale est un écho de la requête, retourné après la bobine a été écrite.

11 05 00AC FF00 4E8B

11 : L'adresse de l' esclave ( 11 hex = address17)

05 : Le code de fonction 5 (Force Single Coil)

00AC : L'adresse de données de la bobine. (bobine n ° 173 - 1 = 172 =AC hex)

FF00 : Le statut écrit ( FF00 = ON, 0000 = OFF)

4E8B : Le CRC (cyclique contrôle de redondance) pour la vérification des erreurs.

Preset Single Register (FC = 06)


Demande

Cette commande est en train d' écrire le contenu de la sortie analogique de maintien
registre # 40002
à l'appareil esclave avec l' adresse 17.

11 06 0001 0003 9A9B

11 : L'adresse de l' esclave ( 11 hex = address17)

06 : Le code de fonction 6 (Preset Single Register)


0001 :. L'adresse de données du registre ( 0001 hex = 1, + 40001 offset =
registre # 40002)

0003 : La valeur à écrire

9A9B : Le CRC (cyclique contrôle de redondance) pour la vérification des erreurs.

Réponse

La réponse normale est un écho de la requête, retourné après le contenu du registre


ont été écrits.

11 06 0001 0003 9A9B

11 : L'adresse de l' esclave ( 11 hex = address17)

06 : Le code de fonction 6 (Preset Single Register)

0001 : L'adresse de données du registre. (# 40002 au 40001 = 1)

0003 : La valeur écrite

9A9B : Le CRC (cyclique contrôle de redondance) pour lavérification des erreurs.

Force de Bobines multiples (FC = 15)


Demande

Cette commande est en train d' écrire le contenu d'une série de 10 bobines discrètes
de # 20 à # 29
sur le dispositif esclave avec l' adresse 17.

11 0F 0013 000A 02 CD01 BF0B

11 : L'adresse de l' esclave ( 11 hex = address17)

0F : Le code de fonction 15 (Force Bobines multiples, 0F hex = 15)

0013 :. L'adresse de données de la première bobine ( 0013 hex = 19, + 1


offset = bobine # 20 )

000A : Le nombre de bobines écrite ( 0A hex = 10)


02 : Le nombre d'octets de données à suivre (10 bobines / 8 bits par octet = 2
octets)

CD : bobines 27-20 ( 1100 1101 )

01 : 6 espace détenteurs & bobines 29-28 ( 0000 0001 )

BF0B : Le CRC (cyclique contrôle de redondance) pour la vérification des erreurs.

Réponse

11 0F 0013 000A 2699

11 : L'adresse de l' esclave ( 11 hex = address17)

0F : Le code de fonction (Force Multiple Coils, 0F hex = 15)

0013 :. L'adresse de données de la première bobine ( 0013 hex = 19, + 1


offset = bobine n ° 20)

000A : Le nombre de bobines écrite ( 0A hex = 10)

2699 : Le CRC (cyclique contrôle de redondance) pour lavérification des erreurs.

Preset Multiple Registers (FC = 16)


Demande

Cette commande est en train d'écrire le contenu de deux registres de maintien de


sortie analogiques # 40002 & 40003 au dispositif esclave avec l'adresse 17.

11 10 0001 0002 04 0102 000A C6F0

11 : L'adresse de l' esclave ( 11 hex = address17)

10 : Le code de fonction 16 (Preset Multiple Registers, 10 hex - 16)

0001 :. L'adresse de données du premier registre ( 0001 hex = 1, + 40001


offset = registre # 40002 )

0002 : Le nombre de registres à écrire


04 : Le nombre d'octets de données à suivre (2 registres x 2 octets chacun = 4
octets)

000A : La valeur à écrire à enregistrer 40002

0102 : La valeur à écrire à enregistrer 40003

C6F0 : Le CRC (contrôle de redondance cyclique) pour le contrôle d' erreur.

Réponse

11 10 0001 0002 1298

11 : L'adresse de l' esclave (17 = 11 hex)

10 : Le code de fonction 16 (Preset Multiple Registers, 10 hex - 16)

0001 : L'adresse de données du premier registre. (# 40002 au 40001 = 1)

0002 : Le nombre de registres écrits.

1298 : Le CRC (cyclique contrôle de redondance) pour la vérification des erreurs.

Les bits les plus significatifs contiennent les variables de bobine supérieures. Ceci
montre que la bobine 20 est activée ( 1 ) et 21 est désactivé ( 0 ). En raison du
nombre de spires requises, le dernier champ de données 01 contient l'état de
seulement deux bobines. Les bits inutilisés dans le dernier octet de données sont
remplies par des zéros.

Réponse