Analyse PDU du protocole d'application Modbus
Traduction de la notice originale
Vue d'ensemble
Cette section analyse le protocole d'application Modbus.
Analyse
L'unité PDU du protocole d'application Modbus est transmise par une pile 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.
Structure et Contenu
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.