====== RT-LAB ====== Sur cette page sont regroupées les notes relatives à la formation Opal-RT sur RT-LAB. {{ :tutos:rt-lab.png?nolink&320 |}} Les fichiers de la formation se trouvent [[http://le2p-nas.univ.run:8080/share.cgi?ssid=0cew3D9|ici]] (Accès en interne uniquement, mot de passe à voir avec Yassine) : * slides et exemples fournis par le formateur, * patch pour Matlab 2015aSP1 (problème d'affichage à l'ouverture de fenêtres Matlab 2015aSP1). ===== Notes Installation ===== ==== RT-LAB Library ==== Defaut d' installation RT-LAB Library dans simulink. Lors de l'installation d'opal-rt, puis au lancement de matlab, puis simulink, la library RT-LAB n'apparait pas. Un defaut d'installation détecté a régler avec la procédure suivante. Suite a l'installation de Matlab puis Opal-RT. copier le fichier setup_rtlab.m depuis C:\OPAL-RT\RT-LAB\v11.1.4.59\Simulink\m vers C:\OPAL-RT\RT-LAB\v11.1.4.59\Simulink\m puis une fois matlab lancé, ouvrez ce fichier depuis C:\OPAL-RT\RT-LAB\v11.1.4.59\Simulink\m Executez ce script. Puis ouvrez simulink, a l'ouverture de la librairie un message en haut de la fenêtre s'affiche, cliquez sur FIX. la librairie RT-LAB doit apparaitre. ===== Mode d'utilisation de simulation temps réel ==== **Model in the loop** : Pas d'organe réel, tout simulé **Hardware in the loop** : Contrôleur réel et autre organe simulé **Prototypage rapide** : Contrôleur simulé et autre organe réel **Power Hardware in the loop** : Ajout de la notion de puissance par le bias d'un convertisseur ===== Slides n°2 et 3 ===== ==== Création du modèle ==== Structurer son modèle en sous-système (subsystem) avec les sous-systèmes suivants : * Un sous-système nommé **SM_nom** pour la partie calcul qui sera compilé sur un cœur du simulateur * Un sous-système nommé **SC_nom** pour le GUI qui sera utilisé sur le PC pour la supervision [scopes, displays, switches, constants] * Des sous-systèmes **SS_nom** qui pourra être utilisé pour le calcul en parallèle sur plusieurs cœurs du simulateur. * Dans chaque sous-système, rajouter un bloc **OpComm** qui aura le même nombre d'I/O que les entrées du sous-système et qui sera placé juste après chaque entrée du sous-système assurer la communication entre les sous-systèmes. ==== Config ==== * Désactiver dans "//Model Configuration Parameter//" (roue dentée) les options: * Block Reduction (dans le sous-menu "//Optimization//") * Signal Storage (dans le sous-menu "//Optimization/Signal//") * Mettre un pas de temps fixe (impossible d'utiliser un temps de simulation variable dans une configuration temps réel) ==== Conseil ==== * Faire toujours un "//run//" (mode Offline) sous simulink pour tester avant de le lancer sous RT-LAB * Gestion du temps réel {{ :tutos:fig_1.jpg?direct&400 |}} {{ :tutos:fig_2.jpg?direct&400 |}} ==== Ajout du modèle sur le système OpalRT ==== * Ouvrir RT lab sur l'ordinateur * Ajouter une cible en réalisant un clic droit sur "//target//" puis "//new target//" * Créer un nouveau projet grâce au bouton + sur le menu contextuel * Lier ou importer le modèle créer précédemment ==== Lancement de la simulation sur le système OpalRT === Pour le cablage a l'arrière d'OpalRT et dans le mode "//auto-alimenté//" de la carte, brancher ou débrancher la carte avec l'alimentation coupée. * Clic gauche sur le modèle importé * Aller dans l'ongle "//overview//" * Clic sur "//build//" et attendre la compilation * Clic sur "//load//" pour charger le projet dans le système OpalRT * Clic sur "//execute//" pour lancer la simulation temps réel et réaliser la supervision grâce à votre GUI À la fin de chaque simulation, ne pas oublier de cliquer sur "//reset//" en dessous de "//execute//" pour terminer la simulation et permettre à un autre utilisateur de lancer sa simulation. Et si plusieurs personne utilise le système en même temps, choisir les coeurs utilisés dans les options "advence". * Une erreur courante : lorsque le répertoire //OpREDHAWKtarget// (dans lequel se trouve d'ailleurs les fichiers .mat) est ouvert, RT-LAB renvoie une erreur lors du build. * Faire un rebuild all au lieu de build, en particulier après une erreur de RT-LAB... ==== Pour la modification de paramètre en direct ==== * Réaliser les étapes pour lancer la simulation * Aller sur le modèle et cliquer sur Variables Tables * Aller dans le menu contextuel sur la gauche et étendre le menu contextuel jusqu'à voir apparaitre les variables (blocs) du système * Ouvrir le menu contextuel du bloc nécessaire et faite un drag and drop de la variable dans Variables Tables ==== Monitoring de la simulation temps réel ==== === Méthode statique === * Éditer votre modèle pour ajouter un bloc OPmonitor dans le sous-système GUI (SC) (disponible dans la bibliothèque) * Ne pas relier l'entrée du bloc et relier les sorties sur un "**mux**" pour concaténer les variables dans un vecteur * Relier la sortie du **mux** sur un **display** et régler sa taille afin de permettre l'affichage des variables * Répéter les étapes pour lancer la simulation === Méthode Dynamique=== Permet de de monitorer **tout** les signaux dynamique (voir image ci-dessous) * Dans Matlab/simulink * Dans **OpComm** du **SC_xxx**, cocher l'option "//Dynamic signal acquisition//" * Le relier directement à un **display** ou déconcatener avec un **demux** * Dans RT-LAB * Cliquer sur "//probe control//" dans les icônes en haut * Cliquer sur signaux * Choisir le nombre de signaux à visualiser * Développer le menu contextuelle qui liste les signaux * Faite un drag and drop du signal désiré dans le tableau * Ouvrir le scope pour vérifier la visualisation {{ :tutos:fig_3.jpg?direct&400 |}} ==== Sauvegarde de donnée sur le disque dur du système OpalRT ==== * Éditer votre modèle pour ajouter un bloc "**OPwritefile**" dans le sous-système de calcul (SM) * Ajouter un **mux** qui concaténera toutes les variables à enregistrer dans un seul vecteur * Relier la sortie du **mux** au bloc **OPwritefile** et modifier les paramètres du bloc (taille du fichier, nom du fichier, nom du vecteur, etc.) * Le fichier créé (un .mat) se trouve dans un sous-répertoire du workspace (//chemin_workspace/nom_projet/models/nom_du_modele_matlab/nom_du_SM/OpREDHAWKtarget/ //) Seulement 5 blocs **OPwritefile** peuvent être placés dans un modèle * Il est possible de rajouter un bloc "**OpTrigger**" : cela permet de lancer l'acquisition de donnée à partir d'une certaine condition. Il faut faire attention à ce que "**AcquisitionGroup**" soit le même dans OpTrigger et OpWriteFile * Calcul de nombre d’enregistrement par seconde (Ns/sec) : * Exemple pour un système électrique Fenêtre de mesure (d) = 200 ms ; Ts = 50 micro seconde ; Decimation factor (Df) = 1 Ns/s = d/(Ts*Df) = 4000 ==== Pour un calcul sur plusieurs processeurs ==== * Pour de la parallélisation, Il faut séparer le modèle en sous-système * Il faut aussi placer un générateur d'état sur chaque sous-système (**Integrator** ou **Memory**) ===== Slides n°4 ===== ==== Utilisation des entrées/sorties ==== Toujours placer les fichiers .bin et .conf disponible dans le dossier "...\OPAL-RT Training\3 - Project Files\Test Model" dans le même dossier que le programme simulink avant de l'importer dans RT lab. Un numéro de port correspond à 8 sortie, d'où le mux pour choisir la bonne sortie/entrée RT lab doit être configurer sur "**Hardware synchronise**" si de entrées/sorties sont utilisés. De plus, le mode "**XHP**" (Extra High Performence) doit être activé. === Sortie analogique === * Placer les bloc AnalogOut (disponible dans la bibliothèque simulink RTlab I/O-> OpalRT -> common) * Configurer le numéro de port (voir les numéro de port dans la datasheet) * Mettre en entrée un mux pour choisir la sortie analogique (si une seule sortie est utilisé et qu'il s'agit de la première, ne pas mettre de mux et réglé le bloc AnalogOut pour n'utiliser qu'une seule sortie) * Placer le bloc OpCtrl et le configurer (nom du .bin, etc.) === Entrée analogique === * Placer les bloc AnalogIn (disponible dans la bibliothèque simulink RTlab I/O-> OpalRT -> common) * Mettre en sortie un demux pour choisir l'entrée analogique (si une seule entrée est utilisé et qu'il s'agit de la première, ne pas mettre de demux et réglé le bloc AnalogIn pour n'utiliser qu'une seule entrée) * Placer le bloc OpCtrl et le configurer (nom du .bin, etc.) === Entrée/Sortie digital === * La procédure est la même que pour les entrées/sorties analogique à la différence que le bloc est DigitalIn / DigitalOut ou si on utilise une PWM -> PWMin / PWMout Les port number pour les entrées/sorties digital ne peuvent être utilisés que sur une configuration : * Digital * PWM * tsd === RTE events === * Utilisé dans le cas ou la fréquence de la PWM générer par simulink (hors utilisation des entrées/sorties PWM) est trop élevé pour le calcul sur le processeur. * Utilisé pour la génération de transition à l'intérieur du pas de temps Toujours faire attention au pas de temps, ils doivent toujours être des multiple pour être synchronisé * Deux bloc disponible FIXME: * RTE relation operator : un seule événement par pas de temps * SPWM : pour des fréquences très élevés avec un maximum de 255 événement par pas de temps ==== Automatisé les tâches ==== FIXME avec les programmes de la formation Il est possible d'automatisé des tâches via un code Python directement dans RTlab grâce à "**RT LAB API**" Ne pas oublier de placer le RTlab API import ==== Temps réel SmartGrid ==== FIXME avec les programmes de la formation * Placer le bloc SimPower * Placer le bloc Arthemis Arthemis est un solver qui permet d'accélérer la simulation pour les réseaux smartgrid ==== Interface Graphiqe Labview ==== FIXME Voir avec ceux qui sont resté jusqu'à la fin.