LP AICP Module EC3-1 Supervision des procédés - Travaux Pratiques en Réseau TP 2 Architecture Client-Serveur sous TCP-IP : Protocoles Modbus/TCP Objectifs : L objectif de ce TP est de mettre en œuvre une application de type client/serveur basée sur la pile protocolaire suivante : OpenModbus, TCP, IP et Ethernet. Le langage C# ainsi que le composant logiciel Winsock seront exploités simplement dans cette application. Présentation de l application : PC client Internet Ethernet IUT GEII PC client Dans ce TP, l architecture utilisée est constituée d un PC client et d un module d entrées/sorties (WAGO). Comme représenté sur la figure cicontre, les équipements peuvent dialoguer via Ethernet et le protocole applicatif Modbus-TCP. D autre part, le module WAGO est également accessible depuis l extérieur (à savoir via Ethernet). Le module WAGO permet de commander un process composé de cartes d entrées/sorties (E/S) «tout ou rien»(tor) ou analogique (ANA). Le process est alors piloté par le (ou les) PC client(s) qui envoient des requêtes au travers d une connexion TCP-IP standard au module d E/S. Travail à réaliser 1 Préparation des équipements 1. Après la mise sous tension et le démarrage du PC client et du module WAGO, vérifier le bon fonctionnement des drivers et des couches protocolaires de type TCP-IP sur les deux équipements : Prendre connaissance des différentes adresses IP (PC Client et WAGO) et du nom du PC. Indication : utiliser les commandes ipconfig et hostname, l adresse IP du module d E/S est notée sur celui-ci. Vérifiez la connectivité entre les deux équipements en utilisant un service de la couche ICMP (au travers de la commande ping <nom ou adresse machine distante>). Consulter les caractéristiques du module WAGO en interrogeant son serveur Web intégré. Ajouter l équivalence de @IP - nom logique wago dans le fichier c :/winnt/system32/drivers/etc/hosts. Verifier le fonctionnement via la commande ping wago 1
2 Etude du protocole de «couche application»sous TCP-IP Cette partie du TP est basée sur le modèle client/serveur dont le principe est rappelé sur la figure ci-dessous. Client 1. requête 2. indication 4. confirmation 3. réponse Serveur Le module WAGO (serveur de communication) permet de commander un process au travers de cartes d entrées/sorties. Le process est alors piloté par le (ou les) PC client(s) qui envoient des requêtes (ordres) au travers d une connexion TCP-IP standard au module d E/S. Cette configuration peut être comparée à des applications actuelles. Par exemple, la RATP a mis en place une architecture semblable où un poste de conduite et de supervision communique, via une liaison longue distance, avec des automates raccordés à des dispositifs de gestion de stations de métro (escaliers mécaniques, caméras, ventilations,...). L accès peut être réalisé depuis n importe quel point de la planète (aux problèmes de qualité de service et de sécurité près bien entendu! et tant que l équipement cible est accessible sur Internet de manière totale et continue...ce qui n est heureusement généralement pas le cas pour les équipements industriels sur la majorité des réseaux d entreprises). Après étude des annexes 1 et 2, utiliser le programme (.exe) permettant de vous connecter au serveur et d envoyer des trames applicatives. Construisez et envoyez différentes trames utilisant les services de lecture/écriture de variables TOR et ANA à disposition sur le nœud WAGO (tester au moins une de chaque type - lecture/écriture - TOR/ANA). Ouvrer le logiciel WIRESHARK qui est un outil de capture de trames sur le réseau Ethernet. Réaliser une capture de trames en envoyant une demande de lecture/écriture réalisée précédemment. Filtrer la capture de façon à n observer que les trames Modbus/TCP (filtre : mbtcp). Analyser une trame de requête et de réponse. Expliquer la construction de chaque trame et retrouver les différents octets envoyés depuis le programme. 3 Pour aller plus loin... programmation du maître/client TCP- IP : Il s agit ici de réaliser votre propre application sur le PC client permettant de piloter le process. Par un («simple») programme écrit en C#, il est possible de se connecter à un serveur distant, envoyer des requêtes et recevoir les réponses de celui-ci au travers des couches TCP - IP (et cela que la machine distante soit à 3 mètres de vous ou à 5000 km). Le listing de l annexe 3 donne une idée du code relatif au programme que vous devez réaliser (/compléter) : Dans un premier temps, analyser ce programme source en C#, puis, écrire et tester (une après l autre) les quatre fonctions qui correspondent aux services offerts par la couche application : ReadTcpWordRequest ReadTcpWordConfirm 2
WriteTcpWordRequest WriteTcpWordConfirm 3
Annexe 1 : Protocole Application OpenModbus & Adressage E/S WAGO Le protocole de niveau application exploité sur le module WAGO est une utilisation de ModBus sur TCP-IP appelé OpenModbus ou Modbus-TCP. Ce protocole est défini par Schneider Electric et permet une utilisation et une exploitation libres (sans payement de droits de licence). Les APDU envoyées sont composées d un suite d octets dont une partie est strictement identique à une trame ModBus. On pourra constater que sur Ethernet le nœud possède une adresse MAC(couche liaison), une adresse IP (couche réseau) et une adresse de nœud esclave OpenModbus (couche application). A noter que l adresse couche application ne présente de l intérêt que si le nœud est une passerelle transparente OpenModbus/Modbus : c est à dire re-expédie la trame OpenModbus reçue sur Modbus (après ajout du CRC et suppression de l entête OpenModbus) et envoi la réponse reçue sur la liaison TCP-OpenModbus (après vérification/suppression du CRC et ajout de l entête OpenModBus). Structure du protocole Requête : Ti 1 Ti 2 0 0 0 Len Esc CF...... En-tête OpenModbus Trame Modbus sans CRC Ti 1 - Ti 2 : identifiant de la requête (16 bits généralement à 0 et recopié dans la trame de réponse) Len : Longueur de la «Trame Modbus sans CRC»(en octets) Esc : Numéro de l esclave CF : Code fonction (de lecture, d écriture,...) Confirmation : Ti 1 Ti 2 0 0 0 Len Esc CF...... En-tête OpenModbus Trame Modbus sans CRC Ti 1 - Ti 2 : identifiant de la requête (16 bits recopié dans la trame de requête) Len : Longueur de la «Trame Modbus sans CRC»(en octets) Esc : Numéro de l esclave CF : Code fonction (de lecture, d écriture,...) Adressage des E/S sur le module WAGO : Dans la trame OpenModbus, le numéro d esclave (Esc) n est pas exploité par le coupleur. Par principe, il est positionné à 1 par l application maître-client. Notons que dans le cadre du TP, il est possible d avoir à faire un reset du module en cas de «plantage de votre application client»générant un problème dit de deadlock. Ceci ne reflète pas la réalité industrielle, mais une non utilisation d une fonctionnalité d activation d un chien de garde réseau sur le coupleur. Adresses des E/S disponibles : Lecture des 4 entrées ANA 15 bits : 1 Mot par entrée @ 0x0 à 0x3 Ecriture des 2 sorties ANA 15 bits : 1 Mot par sortie @ 0x200 et 0x201 4
Lecture des 4 bits d entrées TOR (E TOR) : 3 Mots d @ 0x4 Ecriture des 2 bits de sorties TOR (S TOR) : 1 Mot d @ 0x202 5
Annexe 2 : Quelques trames Modbus...et non OpenModbus Lecture de n mots de 16 bits La lecture de n mots consécutifs en mémoire de l esclave est réalisée par émission d une trame contenant l adresse du premier mot à lire ainsi que le nombre de mots à lire. La réponse contient la valeur de chacun des mots lus. Requête : @ Esc 03h @ 1er mot à lire Nb mot à lire CRC 1 octet 1 octet 2 octets 2 octets 2 octets Réponse : @ Esc 03h Nb octets de données 1er mot lu... CRC 1 octet 1 octet 1 octets 2 octets 2 octets Ecriture de n mots de 16 bits L écriture de n mots consécutifs en mémoire de l esclave est réalisée par émission d une trame contenant l adresse du 1er mot à écrire, le nombre de mots à écrire codé sur 1 mot de 16 bits, ainsi que le nombre d octets à écrire - 2 fois le nombre de mots - codé sur 1 octet, puis la valeur de chacun des mots. Requête : @ Esc 10h @ 1er mot à ecrire Nb mot à ecrire Nb octet à ecrire Valeur 1er mot... CRC 1 octet 1 octet 2 octets 2 octets 1 octet 2 octet 2 octet 2 octet Réponse : @ Esc 10h @ 1er mot écrit Nb de mots écrit CRC 1 octet 1 octet 2 octets 2 octets 2 octets Trame de réponse d exception Dans le cas de l envoi par la maître d un message problèmatique, l esclave renvoi la trame suivante : Code Erreur de base : 1 - Code Fonction erroné (Fonction non supportée par l esclave) 2 - Adresse Incorrecte (Adresse non autorisée sur @ Esc CF+80h C Err CRC l esclave) 3 - Données Incorrectes (Données non autorisées à l adresse indiquée) 1 octet 1 octet 1 octets 2 octets 4 - Automate Non Prêt (Impossibilité échange coupleur avec API de l esclave) 6