Programmation Multitâches & Parallélisme
Jeudi 23/04/2020 Pr.Benouaret |
Préliminaires :
Tout au long du processus de développement des systèmes inhérents au contrôle avancé, les ingénieurs font face à des défis tels que le temps de développement plus court, les exigences de qualité et de flexibilité plus élevées et la réutilisation du code de contrôle. Étant donné que les technologies et les approches classiques sont limitées par leur efficacité, de nouvelles approches sont nécessaires.
Ce cours vise à apprendre à l’étudiant , à travers une application spécifique et bien ciblée, à programmer en utilisant le langage Ladder et par la suite le langage Graph (Grafcet) dans l'environnement Tia portal or Simatic Manager pour step 7. On va également réaliser l'interface home-machine « HMI » pour controller l'évolution du système faisant l'objet de cette application. Mais comme vous le savez sans aucun doute, il existe plusieurs autres "paradigmes" pour créer de la programmation avancée en se basant sur la notion de multi-tâches tout en ayant recours à l’aspect du parallélisme, ce qui nous va conduire à programmer avec compétence et aisance la problématique confrontée ainsi que de réduire considérablement la complexité algorithmique et par conséquent rendre notre programme plus lucide et intiment cohérent avec le contexte adopté pour cette application.
Au cours de cette présentation, l'étudiant sera confronté à des problèmes de programmation réels qui peuvent être résolus sur n'importe quel contrôleur programmable (API) ou n'importe quel autre système en temps réel. En espérant que ce support soit non seulement consistant et cohérent en termes de la programmation avancée qui sera consacrée pour apprendre comment diviser le cahier de charges initial en plusieurs tâches découplées pour en faciliter davantage leur implémentation en temps réel , mais également que cette notion fasse partie de la bibliothèque de référence technique personnelle de l’étudiant.
I. Cycle de fonctionnement & configuration
Les automates peuvent lire et écrire des signaux vers différents appareils via les modules d'E/S. Les modules d'E/S peuvent être des cartes d'E/S simples ou des périphériques d'E/S décentralisés complexes. Les périphériques d'entrée se présentent sous forme des capteurs, des claviers et des commutateurs. Les dispositifs de sortie peuvent être des voyants de signalisation, des solénoïdes, des contacteurs, de petits moteurs, des vérins pneumatiques ou hydrauliques. Les API peuvent communiquer avec différents appareils intelligents tels que les contrôleurs de robots, les variateurs de fréquence, les caméras, les serveurs de base de données, etc. Tous ces appareils communiquent via différents types de bus de terrain.
I.1 scanning cycle (scrutation or balayage) :
Lorsque l'automate est mis en mode exécution, il exécute une étape d'initialisation. En l'absence de problème, l'automate exécute autant de fois la séquence du cycle de balayage (scanning cycle) . Le cycle de scrutation "scan" prend généralement quelques millisecondes. Il est à noter que le cycle de scan comprend cinq étapes principales.

I.2 Balayage de l'entrée (Input scan):
L'état de tous les modules d'entrée est copié dans la zone de mémoire appelée table d'images d'entrée. Cela évite les cas où une entrée peut avoir un changement dés le départ jusqu'à la fin du programme.
I.3 Analyse du programme (Program scan):
Les données dans la zone de la mémoire image d'entrée sont appliquées au programme utilisateur. Le programme utilisateur est exécuté et la zone de la mémoire image de sortie est mise à jour.
I.4 Balayage de sortie( Output scan):
Les données, extraites de la zone image de sortie, sont envoyées à tous les modules de sortie du système.
I.5 Entretien ménager( Housekeeping):
Il existe également d'autres étapes comme les vérifications des systèmes et la mise à jour des valeurs actuelles du compteur interne et du temporisateur. En général, il s'agit de connecter et de lier le système de contrôle avec son code de contrôle. L'objectif est d'utiliser une approche centrée sur l'application, au lieu d'une approche classique centrée sur le dispositif. Enfin, nous attribuons le matériel des systèmes de contrôle aux composants des applications, représentant le code de contrôle au lieu de la procédure standard lorsqu'un utilisateur commence d'abord par une configuration matérielle, puis écrit le code de chaque contrôleur dans la configuration retenue. Nous devons représenter le système de contrôle (CPU), qui exécute le code de contrôle et les composants de l'application ciblée et son comportement.
II- Exemple d’application :
Pour une meilleure illustration et explication, nous présentons l'aspect de la programmation modulaire par l'exemple. Nous allons introduire toutes les notions sus-indiquées.
Considérons qu'il existe une station de remplissage simple (Bottle filling station) composée de deux vannes digitales, de leurs relais de 24v DC, un réservoir de 100 litres de capacité, pupitres de commande et convoyeur à bande de 11m de langueur. En plus, le convoyeur à bande est doté d’un moteur approprié. Quatre boutons poussoirs seront mobilisés pour gérer le fonctionnement de la station. Le bouton "Start" sert d'un élément de démarrage qui mettra le processus en service ; le bouton "Reset" prend particulièrement soin de l'état de la bouteille en cas de panne ou d'anomalie pouvant survenir lors de la phase de remplissage de cette dernière. Le bouton "Reset" va permettre donc d'initialiser l'opération en cours pour éviter toute sorte de blocage ou de plantage du programme de gestion. Il va donc de soi que le bouton "Stop" ? mettra le système hors service pour une éventuelle maintenance. Quant au quatrième bouton qui a pour mission d’interrompre l’exécution de la supervision HMI et de revenir vers l’environnement de programmation pour pouvoir y apporter des modifications si le besoin se fait sentir.
En ce qui concerne le tapis roulant (conveyor belt) qui peut acheminer la bouteille ? à partir de la zone d'approvisionnement vers la position de remplissage qui se trouve juste au milieu du réservoir et sous la portée de la vanne 2 (Valve 2). A ce moment-là le moteur doit s'arrêter ainsi que la vanne 1 (Valve 1) et après l'écoulement du temps de 3 seconds la vanne 2 s'ouvre pour remplir la bouteille présente dont sa présence sera notifiée par un signal " Bottle_present".
Lorsque la quantité du liquide versé dans la bouteille atteint 10 Litres (Bottle_Value) un signal "Bottle_Fill" indique la fin de l'opération du remplissage et par conséquent le moteur tourne de nouveau pour amener la bouteille vers la zone de stock. Le cycle est terminé et le système va répéter l'opération autant de fois d'une façon automatique.
Il est à noter que le débit des vannes (Valve 1) est d'environ 2L/s, par contre celui de la vanne 2 (Valve 2) est fixé à 1L/ s. en revanche, le convoyeur se déplace à une vitesse constante d'environ 1m /s.
En ayant recours uniquement aux composants primitifs de l'environnement Tia portal tels que Compteur, temporisations, Bascules SR, manipulation des mots... etc.) pour concrétiser, façonner et bien confectionner cette application.

III. Modélisation & complexité algorithmique :
Tout d'abord, nous devons créer des modèles orientés objet représentant des parties générales de la station de remplissage et implémenter leur code PLC pour décrire le comportement de chaque tâche en interactions avec les autres tâches parallèles. Deuxièmement, nous créons l'application particulière constituée d'une hiérarchie spécifique de chaque composant. Ensuite, nous examinerons l’aspect de l'optimisation pour réduire considérablement la complexité algorithmique et accélérer d’avantage les performances du système de contrôle.
III.1 Variables globales (PLC-Tags)
La meilleure façon de ne pas se tromper lors de l’implémentation des tâches particulière est de veiller à bien lister, dans un tableau, l’ensemble des variables nécessaires pour faciliter la description de chaque partie du programme. Le tableau suivant illustre la signification et détermine l'intention de cette désignation.
PLC Tag
|
Type
|
Address
|
Comments
|
H_displacement
|
Int
|
%MW40
|
Conveyor displacement
|
Reset
|
Bool
|
%M5.2
|
Reset counter after one cycle
|
bottle_Present
|
Bool
|
%M7.4
|
Bottle present indicator
|
Run
|
Bool
|
%M10.5
|
System in Run mode (In service)
|
Motor
|
Bool
|
%Q0.0
|
Motor for motion control
|
Start
|
Bool
|
%M10.0
|
Putting the system into service
|
Stop
|
Bool
|
%M10.1
|
Decommission the system
|
Tank_Low
|
Bool
|
%M7.0
|
Tank Low level indicator
|
Tank_High
|
Bool
|
%M7.1
|
Tank High Level indicator
|
Valve1
|
Bool
|
%Q0.1
|
Valve 1 as a digital output
|
Tank_Value
|
Int
|
%MW20
|
Evolution of the tank value in liters
|
bottle_Fill
|
Bool
|
%M7.5
|
Bottle is Fill indicator
|
Valve2
|
Bool
|
%Q0.2
|
Valve 2 as digital output
|
Bottle_Value
|
Int
|
%MW60
|
Evolution of the bottle value in liters
|
To_Stock
|
Bool
|
%M7.6
|
To stock indicator signal
|
Init_Bottle
|
Bool
|
%M7.3
|
Button for bottle value Reset
|
III.2 Gestion de la vanne 1 & remplissage du réservoir principal.
Le croquet global décrivant le fonctionnement de la station peut être divisé en trois tâches qui seront bien développées pour répondre lucidement à la contrainte imposée par le cahier des charges initial. Ainsi, le premier composant se réfère à la valve 1 (valve 1) dont le but est d'assurer le remplissage du réservoir principal.

Il découle de cette représentation de la machine d'état un composant portant sur le langage "Ladder" ayant pour vocation de corroborer le lien ? intime entre la description explicite et la traduction fidèle de la tâche à réaliser pour satisfaire l'exigence demandée par le utilisateur.



III.3 Gestion de la vanne 2 & remplissage des bouteilles.
La deuxième tâche à réaliser concerne la valve 2 (valve 2) qui est dédiée au contrôle de l'évolution de la quantité de liquide à mettre dans la bouteille ? dont le taux de remplissage est fixé à 1L /s. Pour ce faire, un compteur cadencé à 1 seconde qui sera associé à un comparateur pour garantir le bon fonctionnement de cette partie de l'application complète.

Ensuite, le programme correspondant est illustré par les deux réseaux suivants, exprimés en langage "Ladder" pour effectuer cette tâche qui est parfaitement indispensable pour réduire de manière significative la complexité algorithmique intrinsèque.

III.4 Gestion du tapis roulant (Conveyor Belt).
En tant que troisième composant, autrement dit la dernière tâche, s'occupe principalement du mouvement du convoyeur qui assure le déplacement des bouteilles à partir de la zone d’approvisionnement jusqu'au dépôt du produit dans la zone de stockage. Le mouvement du tapis roulant est assuré par un moteur approprié. La figure ci-dessous montre le diagramme fonctionnel se forme d’une machine d’état (FSM) pour aider à l’implémentation de cette partie.

Enfin, le programme relatif à cette partie est donné par les trois réseaux qui ont été construits en utilisant le langage "Ladder" qui est bien adapté à cette situation.



Pour éviter toute répercussion fâcheuse lors de l'exécution du programme global, il est impératif de prévoir une initialisation des variables connexes.

VI- Simulation & Validation du programme
