{ "cells": [ { "cell_type": "markdown", "id": "489339df", "metadata": {}, "source": [ "# Premiers pas avec la Microlabbox\n", "::: danger Avertissement\n", "Ce guide a pour but d'initier au pilotage d'un équipement physique à l'aide de la Microlabbbox. Ces étapes doivent être scrupuleusement suivies. En cas de mauvaise manipulation, un danger pour le matériel et les personnes est possible.\n", "\n", "Exécuter ce tutoriel uniquement avec l'autorisation et sous la supervision de votre encadrant.\n", ":::" ] }, { "cell_type": "markdown", "id": "c4f4e4bd", "metadata": {}, "source": [ "# Objectif du tutoriel #\n", "Ce tutoriel va permettre de se familiariser \"pas à pas\" avec les différentes étapes d'un projet HIL.\n", "L'objectif est le **pilotage de l'alimentation DC réversible** (PSB E9000) à l'aide de la **Microlabbox** par protocole de communication **CANopen**.\n", "\n", "Les étapes successives abordées sont:\n", "\n", "1. Modélisation dans Simulink.\n", "2. Compilation avec Real-Time Interface (RTI).\n", "3. Téléchargement dans la MicroLabBox.\n", "4. Exécution temps réel du code.\n", "5. Supervision avec ControlDesk : visualisation et interaction en direct.\n", "\n", "Avant de débuter ce tutoriel, l'utilisateur s'est assuré que :\n", "- Matlab dispose des modules RTI nécessaires\n", "- la Microlabbox est correctement connectée au réseau Ethernet et sous tension\n", "- l'alimentation DC (PSB E9000) est alimentée en triphasée et sous tension\n", "- l'alimentation DC est reliée à la Microlabbox par bus CAN (en respectant les impédances de terminaison 120 $\\Omega$ du bus)\n", "\n", "::: warning Avertissement\n", "Par précaution, aucune charge électrique ne sera reliée à la sortie de l'alimentation DC.\n", ":::" ] }, { "cell_type": "markdown", "id": "f911196d", "metadata": {}, "source": [ "## Modélisation dans Simulink ##\n", "\n", "### Vérification de la configuration minimale du contrôleur ###\n", "La MicroLabBox de dSPACE permet de contrôler un réseau CAN via le protocole CANOpen. Pour cela, deux toolboxes sont nécessaires :\n", "\n", "- dSPACE CANOpen Master Blockset\n", "- dSPACE RTI CAN MultiMessage Blockset\n", "\n", "Via le ***RTICANMM ControllerSetup***, le connecteur CAN de la MicroLabBox peut être configuré ou non avec une résistance de terminaison de 120 Ohm. Si oui, l’équipement peut être en bout du réseau CAN.\n", "\n", "Pour générer et configurer le connecteur CANOpen de la MicroLabBox, il faut tout d’abord s’assurer de la présence du RTI data adapté à celle-ci : ***DS1202***.\n", "Ce bloc est créé automatiquement quand un nouveau modèle RTI1202 est généré.\n", "\n", " 1. Créer un dossier racine dans lequel tous les fichiers seront créés (ex: `Work(D:)\\projet_initiation_microlabbox\\`)\n", " 2. Lancer matlab puis Simulink\n", " 3. Modifier le dossier de travail (`D:\\projet_initiation_microlabbox`)\n", "\n", " ### Création d'un nouveau projet ###\n", "1. Faire `New->Project->Blank project`\n", "2. Rentrer le nom du projet (ex: Project name: `TUTO_projet_Simulink`), le chemin d'accès puis cliquer sur __Create__.\n", "3. Lancer Simulink (à l'aide du menu HOME->Simulink ou en tapant `simulink` dans la fenêtre __Command Window__ puis Entrée)\n", "4. Sélectionner le template **RTI1202**" ] }, { "cell_type": "markdown", "id": "1e00a9b8", "metadata": {}, "source": [ "```{dropdown} Template RTI1202\n", ":open: false\n", "\n", "\"drop\n", "```" ] }, { "cell_type": "markdown", "id": "cd15ecc0", "metadata": {}, "source": [ "A la création du projet, seul le bloc __RTI Data__ apparaît." ] }, { "cell_type": "code", "execution_count": 2, "id": "cf445e5e", "metadata": { "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/html": [ "\"RTI_data.PNG\"" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import HTML\n", "HTML('\"RTI_data.PNG\"\n", "```" ] }, { "cell_type": "markdown", "id": "a6dd816d", "metadata": {}, "source": [ "::: tip Conseil\n", "Pour tout fichier matlab nécessaire au projet, penser à associer les fichiers .m au projet en procédant comme précédemment.\n", ":::" ] }, { "cell_type": "markdown", "id": "69a2291e", "metadata": {}, "source": [ "### Ajouter et configurer les toolbox ###\n", "\n", "8. Ajouter les blocs simulink nécessaires à la communication CANopen. Ouvrir __Library Browser__ du menu __SIMULATION__ de Simulink et ajouter les blocs de la librairie Dspace suivants:\n", "- CANOpen Master Blockset ->CANopen Setup\n", "- RTI CAN MultiMessage Blockset -> RTICANMM Controller Setup\n", "- RTI CAN MultiMessage Blockset -> RTICANMM General Setup" ] }, { "cell_type": "markdown", "id": "bd5fc3cc", "metadata": {}, "source": [ "```{dropdown} Library Browser\n", ":open: false\n", "\n", "\"library_browser\"\n", "```" ] }, { "cell_type": "markdown", "id": "b79802bc", "metadata": {}, "source": [ "#### Bloc RTI CAN MultiMessage Setup ####\n", "\n", "9. Double cliquer sur le bloc **RTI CAN MultiMessage Setup - General Setup**, pour obtenir la fenêtre suivante:" ] }, { "cell_type": "markdown", "id": "8aef1a2e", "metadata": {}, "source": [ "```{dropdown} RTI CAN MultiMessage Setup\n", ":open: false\n", "\n", "\"bloc\n", "```" ] }, { "cell_type": "markdown", "id": "832c2775", "metadata": {}, "source": [ "Ce bloc permet de définir le dossier dans lequel l'ensemble des fichiers générés seront enregistrés. Par défaut, le dossier est nommé __RTICANMM_FILES__. Vérifier que le __Model root__ s'adresse correctement au dossier de votre projet. Puis __OK__." ] }, { "cell_type": "markdown", "id": "65afbc4b", "metadata": {}, "source": [ "#### Bloc RTI CAN ControllerSetup ####\n", "\n", "10. Double cliquer sur le bloc **RTI CAN ControllerSetup**, pour obtenir la fenêtre suivante:" ] }, { "cell_type": "markdown", "id": "1d047cff", "metadata": {}, "source": [ "```{dropdown} RTIcan Controller Setup\n", ":open: false\n", "\n", "\"bloc\n", "```" ] }, { "cell_type": "markdown", "id": "b6d2e293", "metadata": {}, "source": [ "Ce bloc permet de configurer un contrôleur CAN en définissant les paramètres de communication du bus CAN pour que le reste du modèle Simulink puisse envoyer et recevoir des messages CAN en temps réel.\n", "\n", "11. Régler la vitesse de communication à `250 Kb/s` puis __Apply__." ] }, { "cell_type": "markdown", "id": "e0ed5fb8", "metadata": {}, "source": [ "### Création d'un noeud ###\n", "Le troisième bloc permet de créer les différents noeuds (équipements reliés au bus CAN).\n", "\n", "Le bloc CANopen Setup sert à :\n", "- Initialiser la couche CANopen sur le matériel dSPACE\n", "- Définir les paramètres de base du réseau CANopen\n", "- Permettre l'utilisation des blocs CANopen dans le modèle\n", "\n", "Dans ce tutoriel, un seul noeud est requis (l'alimentation DC PSBE 9000).\n", "\n", "12. Double cliquer sur le bloc **CANopen Setup**, pour obtenir la fenêtre suivante:" ] }, { "cell_type": "markdown", "id": "60e4541d", "metadata": {}, "source": [ "```{dropdown} bloc CANopen Setup\n", ":open: false\n", "\n", "\"bloc\n", "```" ] }, { "cell_type": "markdown", "id": "5d26ef40", "metadata": {}, "source": [ "Cette fenêtre comporte 3 menus dans la colonne de gauche:\n", "- General Setup\n", "- Nodes\n", "- Synch block\n", "\n", "13. Sélectionner __Nodes__. Indiquer le numéro du noeud de l'équipement à définir.\n", "\n", "::: tip Conseil\n", "Le numéro ID des équipements est directement configuré sur les appareils. L'alimentation DC PSBE 9000 est déclarée comme étant le noeud **2**.\n", "Pour vérifier la configuration de l'alimentation, suivre les consignes [configuration ID de l'alimentation](ID_alim).\n", ":::\n", "\n", "Dans __Select nodes__, indiquer `2` puis __add to model__. __Node 2__ apparaît dans la colonne de gauche.\n", "14. Cliquer sur le noeud créé.\n", "Les menus **General** et **Advanced** apparaissent.\n", "\n" ] }, { "cell_type": "markdown", "id": "3a9eb3bb", "metadata": {}, "source": [ "Le menu général permet de configurer: \n", "-\tLe numéro du nœud\n", "-\tLe nombre de RxPDO souhaité\n", "-\tLe nombre de TxPDO souhaité" ] }, { "cell_type": "markdown", "id": "c5065181", "metadata": {}, "source": [ "```{dropdown} Canopen Setup\n", ":open: false\n", "\n", "
\n", " \"bloc\n", " \"bloc\n", "
\n", "```" ] }, { "cell_type": "markdown", "id": "c684bdd0", "metadata": {}, "source": [ "::: warning Avertissement\n", "Il est important de sélectionner __No boot-up message expected__ pour l'alimentation DC qui ne génère pas de message de démarrage.\n", ":::" ] }, { "cell_type": "markdown", "id": "d4065a2a", "metadata": {}, "source": [ "15. Cliquer sur Synch block et indiquer un __Time period for syncrhonization message [s]__ de `0.5`.\n", "16. Cliquer sur le bouton `Create`. Le modèle simulink crée un bloc noeud comme illustré ci-dessous." ] }, { "cell_type": "markdown", "id": "70dfdba1", "metadata": {}, "source": [ "```{dropdown} Bloc noeud Créé\n", ":open: false\n", "\n", "\"noeud\n", "```" ] }, { "cell_type": "markdown", "id": "da709f89", "metadata": {}, "source": [ "Ce bloc affiche toutes les entrées et les sorties pour intéragir avec le noeud 2 en temps-réel.\n", "\n", "::: tip Conseil\n", "Pour connaître la définition des différentes entrées et sorties, voir [Définition des E/S node bloc](definition_simulink_node_bloc).\n", ":::" ] }, { "cell_type": "markdown", "id": "6f38e178", "metadata": {}, "source": [ "A présent que le noeud est créé, il faut compléter ses entrées et sorties pour permettre l'envoi et la réception de messages à l'équipement via le bus CAN.\n", "Ces messages, codés en hexadécimal, obéissent à un format standardisé en partie (ex: VendorName ou ProductNumber). D'autres sont modifiables par le fabricant et spécifiques à chaque équipement.\n", "\n", "Pour connaître l'ensemble de ces paramètres de réglage et de communication, les équipements communicants possèdent un fichier **EDS** (Electronic Data Sheet) qui décrit les différents registres de l'équipement, les valeurs associées.\n", "\n", "Le fichier **EDS** de l'alimentation DC est consultable sur le lien suivant [Fichier EDS](lecture_fichier_eds).\n", "\n", "::: tip Conseil\n", "Pour faciliter la lecture des fichiers EDS, vous pouvez utiliser le logiciel Vector téléchargeable ici [Vector EDS](../../5_%20Ressources%20logicielles/Vector/CANeds.zip).\n", ":::" ] }, { "cell_type": "markdown", "id": "340f3e16", "metadata": {}, "source": [ "## Exemple de modèle Simulink de contrôle de l'alimentation DC ##\n", "\n", "```{dropdown} Modèle Simulink - Contrôle Alimentation DC\n", ":open: false\n", "\n", "\"modele\n", "```" ] }, { "cell_type": "markdown", "id": "4eb46024", "metadata": {}, "source": [ "## Compilation avec Real-Time Interface ##" ] }, { "cell_type": "markdown", "id": "6d816af3", "metadata": {}, "source": [ "## Téléchargement dans la Microlabbox ##" ] }, { "cell_type": "markdown", "id": "4b51af78", "metadata": {}, "source": [ "## Exécution temps-réel du code ##" ] }, { "cell_type": "markdown", "id": "9bf31020", "metadata": {}, "source": [ "## Supervision avec ControlDesk ##" ] } ], "metadata": { "kernelspec": { "display_name": "python3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.11" } }, "nbformat": 4, "nbformat_minor": 5 }