Cette section analyse le protocole d'application Modbus.
L'unité PDU du protocole d'application Modbus est transmise par une Ethernet TCP/IP. Les types de tramage Ethernet II et IEEE 802.3 sont tous deux gérés. Ethernet II est défini par défaut.
. . . à partir du conducteur d'entrée pour trame IEEE 802.3 . . .
. . . est une trame IEEE 802.3 si longueur <=1500 . . .802.3_pdu ::= {dst_addr[6], src_addr[6], length[2], data=802.2_pdu} *un PDU IEEE 802.3 a une taille de trame maxi de 1 518 octets
*un PDU IEEE 802.3 a une taille de trame mini de 64 octets 802.2_pdu : {dsap[1], ssap[1], frm_cntrl[1], snap_hdr[5], data=ip_pdu} *le snap_hdr est associé à un sap 802.2 snap_hdr bien connu
::={org_code[3], ethertype[2] }
*le snap hdr (sub network access protocol) permet aux anciens protocoles
Ethernet de fonctionner sur la nouvelle interface IEEE 802.2. Le
paramètre ethertype indique le service, ex. ip ou arp. IP a la valeur
0x800. . . . à partir du conducteur d'entrée pour trame Ethernet II . . .
. . . est une trame Ethernet II si longueur >1500 . . .802.3_pdu ::= {dst_addr[6], src_addr[6], length[2], data=ip_pdu} . . . la partie commune du paquet commence ici . . .ip_pdu ::= {ip_hdr[20], data=tcp_pdu}tcp_pdu ::= {tcp_hdr[24], data=appl_pdu=mbap_pdu}
Le mbap_pdu est le protocole d'application Modbus dont les messages sont réceptionnés sur un port déterminé. La taille maximum actuelle de la mbap_pdu pour cette classe de services est de 256 octets.
La structure et le contenu de mbap_pdu sont définis ainsi :
mbap_pdu ::={ inv_id[2], proto_id[2], len[2], dst_idx[1], data=mb_pdu }L'en‐tête a 7 octets de long et comporte les champs suivants :
inv_id [2 octets] id d'appel servant à l'appariement des transactions proto_id [2 octets] sert au multiplexage local, vaut 0 par défaut pour Modbus
services len [2 octets] le champ len est un compte du nombre d'octets des champs restants et
contient dst_id et des champs de données.
Le reste de l'unité PDU contient deux champs :
dst_idx [1 octet] index cible servant au routage local des
paquets. (pas encore mise en œuvre actuellement) data [n octets] il s'agit de la partie service (communication) du pdu Modbus, mb_pdu, et elle est
définie ci‐dessous
La partie service du protocole d'application Modbus appelée mb_pdu, contient 2 champs :
mb_pdu ::= { func_code[1], data[n] }
func_code [1 octet] code fonction MB data [n octets] ce champ dépend du code fonction et contient généralement
des informations telles que différentes références, différents comptes et des décalages de données.
La taille et le contenu du champ de données dépendent de la valeur du code fonction.