Application de MATLAB / Simulink avec des équipements fabriqués par InSys JSC

Une tâche pratique importante est l'utilisation de Matlab / Simulink avec un équipement réel qui vous permettra de recevoir un signal du monde réel. Ceci est très utile pour le débogage d'algorithmes. Ce document présente la technologie de connexion des appareils ADC fabriqués par InSys JSC à Simulink. Une DLL est utilisée pour se connecter, qui est visible dans Simulink en tant que composant sm_adc. Un programme de console distinct est utilisé pour travailler avec l'équipement. La communication avec la DLL se fait via la mémoire partagée. Selon cette technologie, n'importe quel ADC sur n'importe quel module porteur d'InSys JSC peut être connecté. L'ouvrage présente un système d'un générateur A7_DAC et d'un module d'acquisition FMC128E / FM412x500M.

Ce travail a été démontré lors de la conférence «Technologies pour le développement et le débogage de systèmes techniques complexes» du 27 au 28 mars 2018.





Énoncé du problème

Cela nécessite le développement d'un système à partir d'un générateur de signaux et d'un ADC qui générera un signal avec les paramètres donnés et le numérisera. Les données reçues doivent être transférées à Simulink pour traitement.

Équipement

Pour le travail, un support a été assemblé à partir du module ADC et du générateur. En tant qu'ADC, le sous-module FM412x500M est utilisé dans lequel il y a quatre canaux ADC avec une fréquence d'échantillonnage de 500 MHz. Le sous-module est installé sur le module support FMC128E dans lequel se trouvent un FPGA Artix 7 et une interface USB 3.0. Les deux appareils sont connectés à un ordinateur portable exécutant Simulink. Pour surveiller les performances, bien sûr, un oscilloscope est utilisé.

Apparence du stand:



Schéma structurel du stand:



Signal généré:



L'algorithme du stand:

  1. Simulink se prépare à lancer l'ADC et le générateur
  2. Simulink demande au générateur de démarrer
  3. Le générateur forme un stroboscope (signal jaune) et le signal réel (bleu)
  4. ADC sur le devant de la porte commence à collecter des données
  5. L'ADC collecte la baie et la transmet à Simulink
  6. Simulink affiche le signal reçu de l'ADC


Il s'agit d'un mode de collecte unique classique. Sa particularité est précisément l'unicité. L'équipement le long du front du signal recueille un réseau de données donné. La phase de collecte des données se déroule en mode «temps réel dur», mais le traitement est de savoir comment les obtenir. Le taux de collecte est déterminé par le nombre de canaux sélectionnés et le taux d'échantillonnage. Pour quatre canaux ADC et une fréquence d'échantillonnage de 500 MHz, le débit de données est de 4 Go / s. À cette vitesse, les données peuvent être écrites sur le SODIMM du FMC128E. Autrement dit, un échantillon de 4 Go peut être enregistré.

De plus, les données doivent être transférées vers l'ordinateur. Le module FMC128E est connecté à l'ordinateur via l'interface USB 3.0. Le taux de transfert de données est de 300 Mo / s.

Simulink reçoit un tableau de données et le transmet pour un traitement ultérieur. Le temps de ce traitement est déjà déterminé par la complexité du modèle. Dans cet exemple, la matrice est simplement affichée sur le panneau de l'oscilloscope.

À un moment donné, Simulink décide qu'il est nécessaire d'effectuer le cycle suivant et tout se répète. De nouveau, des commandes USB sont envoyées pour préparer l'ADC, pour démarrer le générateur et pour collecter des données.

Ce mode est très pratique pour déboguer du matériel et des algorithmes. Vous ne pouvez vous précipiter nulle part. Collectez un tableau de données. Vous pouvez le regarder calmement, le graver sur un disque et boire du café. Mais lorsque tout est réglé, il est déjà possible de passer en mode de collecte continue.

Connexion DLL

Matlab vous permet de connecter des fonctions implémentées dans des DLL externes. Simulink a également la possibilité de connecter des DLL externes, tout en ajoutant certaines exigences. Dans Simulink, la DLL externe ressemble à un bloc S-Function.



MATLAB fournit un grand nombre d'exemples, y compris la création de DLL externes. Cependant, la méthode proposée par MATLAB n'est pas très pratique. Il existe un projet OpenSource easyLink . Ce projet a développé une bibliothèque de classes pour se connecter à Simulink.

Pour créer un composant, vous devez créer une classe dérivée de BaseBlock et déclarer des ports:





Problèmes de connexion DLL

Les DLL externes permettent beaucoup, mais il existe un certain nombre de problèmes lors de leur utilisation. Les plus importants pour moi personnellement sont les suivants:

  1. Le débogage des DLL est difficile
  2. Il est difficile de regarder la sortie de printf ()
  3. La recompilation d'une DLL nécessite la sortie de MATLAB

Lors du débogage d'un programme, un débogage étape par étape est requis. Dans le cas d'une DLL, il est possible de se connecter à une DLL déjà chargée en mémoire, d'y affecter un point d'arrêt et de mener une session de débogage. Mais il est nécessaire de rattraper le moment de charger la DLL via Simulink, retarder en quelque sorte le début du travail. Tout cela peut être fait, mais peu pratique.

Dans le processus, je veux vraiment voir la sortie de débogage qui est formée comme un flux stdout standard. Dans le cas de la DLL, ce fil peut en quelque sorte être intercepté, mais je n'y suis pas parvenu.

Enfin, l'inconvénient le plus important est la nécessité de quitter MATLAB lors de la recompilation de la DLL. Sinon, vous ne pouvez tout simplement pas écrire un nouveau fichier. Et la sortie et le lancement ultérieur de MATLAB prennent beaucoup de temps.

Pour résoudre ces problèmes, il existe un moyen classique de créer des systèmes logiciels complexes. Il s'agit de l'interaction entre les programmes via la mémoire partagée.

Connexion de mémoire partagée

Les systèmes d'exploitation modernes, Windows et Linux, vous permettent d'organiser des zones de mémoire communes. Cela vous permet de créer des programmes fiables. Par exemple, un programme peut contenir une interface graphique et interagir avec l'opérateur, et un autre programme peut interagir avec l'équipement. Dans ce cas, le gel du programme qui interagit avec l'équipement n'entraînera pas le gel du programme d'interaction avec l'opérateur. Dans le cas de Simulink, cette approche présente également certains avantages. Le programme de travail avec l'équipement sera lancé une fois, il préparera l'équipement et attendra la commande via la mémoire partagée. La DLL se charge à chaque fois que vous exécutez Simulink en simulation. Étant donné que la DLL ne fonctionne pas directement avec le matériel, ce lancement sera rapide.

Deux programmes et deux DLL ont été développés pour ce stand:

  1. simulink_a7dac - programme de contrôle du générateur
  2. simulink_adc - programme de contrôle ADC
  3. sm_ctrl - DLL de contrôle du générateur
  4. sm_adc - DLL de contrôle ADC


Le schéma fonctionnel est présenté dans la figure ci-dessous:



Le programme simulink_adc est basé sur la bibliothèque Bardy. Ce programme vous permet de travailler avec n'importe quel ADC fabriqué par InSys JSC. Le réglage d'un ADC et d'un module opérateur spécifique s'effectue via des fichiers d'initialisation.

Vue de schéma dans Simulink

Et enfin, à quoi cela ressemble à l'intérieur de Simulink:



Tout ressemble à Simulink. Une unité pour le contrôle ADC. Le deuxième bloc pour contrôler le générateur. Un certain nombre de paramètres sont disponibles pour contrôler le générateur. Pour l'ADC, tout se fait via le fichier d'initialisation. Si nécessaire, un certain nombre de paramètres ADC peuvent également être affichés au niveau du bloc.

Notez les deux oscillateurs maîtres. En termes d'heure du modèle, ils précisent l'heure de début et le moment de la collecte des données. Ces points sont très importants. Ils établissent en fait le lien entre le modèle et le monde réel. Le signal de démarrage entre dans le bloc ADC, il est traité dans la DLL. Grâce à la mémoire partagée, il entre dans le programme ADC. Il est ensuite converti en une séquence de commandes d'écriture dans les registres, qui via USB entrent dans le FPGA. Et à l'intérieur du FPGA, le bord avant de recherche du signal de démarrage est armé. Et ce n'est qu'après avoir armé la machine dans la direction opposée que la confirmation passe par la même chaîne. Lorsque la confirmation atteint Simulink, le signal start_out apparaîtra à la sortie du bloc sm_adc, qui sera transmis au bloc sm_ctrl. Et ce sera tout de même le moment du modèle. Dans le bloc sm_ctrl, le long de la même chaîne, le signal sera transmis au FPGA du générateur et il formera le signal. L'ADC capturera ce signal dans sa mémoire. Un signal d'acquisition de données sera généré par le second oscillateur maître. De la même manière, les données vont à Simulink et vont à la sortie de données du bloc sm_adc. Pour le moment, un bloc de 16384 comptes est retourné. Le bloc reçu est affiché sur l'oscilloscope.



Résultats

Le travail à travers la mémoire partagée s'est avéré efficace. Le programme de gestion ADC vous permet de travailler avec n'importe lequel de nos ADC. Dans le même temps, il reste un moyen pratique de configurer les paramètres via le fichier de configuration. Le programme est conçu comme une application console, tandis que toute la sortie de débogage est visible. Il y a une indication d'opérabilité. Le composant SM_CTRL vous permet de connecter diverses applications externes pour contrôler l'équipement. Le débogage du programme de contrôle ADC ne pose aucune difficulté. Il s'agit d'un programme courant où vous pouvez définir des points d'arrêt et déboguer. En utilisant la même technologie, d'autres programmes d'interaction entre Matlab / Simulink et le monde extérieur peuvent être développés.

L'ouvrage est publié sur le site hub.exponenta.ru ;

Références:
  1. Projet SIMULINK_SM - code source du programme: https://github.com/dsmv/simulink_sm
  2. Projet EasyLink: https://sourcesup.renater.fr/frs/?group_id=1500
  3. Module porteur FMC128E http://insys.ru/fmc/fmc128e
  4. Sous-module FM412x500M http://insys.ru/mezzanine/fm412x500m
  5. Chaîne de télégramme InSys Research

Source: https://habr.com/ru/post/fr470327/


All Articles