Contenu principal

Accéder aux signaux de bus Simulink dans les fonctions MATLAB

Cet exemple montre la manière de lire à partir des signaux de bus Simulink® et de leur écrire dans une fonction MATLAB® en utilisant les bus MATLAB et Stateflow®. Les structures MATLAB vous permettent de regrouper des données de tailles et types différents dans une seule variable. Vous pouvez créer une structure MATLAB pour :

  • Stocker des données associées dans une variable locale et persistante d’une fonction MATLAB

  • Lire à partir d’un bus local Stateflow ou lui écrire

  • Interagir avec un signal de bus Simulink à un port d’entrée ou de sortie

Les fonctions MATLAB supportent uniquement les bus non virtuels. Pour plus d’informations, veuillez consulter Composite Interface Guidelines (Simulink).

Définir les structures dans les fonctions MATLAB

Dans cet exemple, un diagramme Stateflow traite les données depuis un signal de bus Simulink et émet le résultat à un autre signal de bus Simulink. Les signaux de bus d’entrée et de sortie sont définis par l’objet BusObject Simulink.Bus (Simulink). Ces bus possèdent quatre champs : sb, a, b et c. Le champ sb est également un signal de bus défini par l’objet SubBus Simulink.Bus. Il possède un champ appelé ele.

Dans le diagramme, les signaux de bus Simulink interagissent avec les bus Stateflow in et out. La fonction sb2abc extrait les informations du bus d’entrée et les stocke dans le bus local Stateflow localbus. Le diagramme écrit alors au bus de sortie en combinant les valeurs du bus local et d’un des éléments du tableau des structures subBusArray. Pour plus d’informations sur l’accès et la modification du contenu d’un bus Stateflow ou d’un tableau de bus Stateflow, veuillez consulter Index and Assign Values to Stateflow Structures.

La fonction MATLAB® sb2abc prend un bus Stateflow de type SubBus et renvoie un bus Stateflow de type BusObject. La fonction décompose en trois composants la valeur du champ ele à partir de son entrée : un vecteur, une matrice 3 par 2 et un scalaire. La fonction stocke ces composants dans un bus local MATLAB struct qui possède les mêmes champs que l’objet BusObject Simulink.Bus. La fonction attribue alors la valeur de la struct MATLAB au bus de sortie y.

  • X est une struct scalaire avec un seul champ appelé ele. Ce champ contient une matrice 3 par 3 de type int8, qui correspond à la disposition de l’objet SubBus Simulink.Bus.

  • Y est une struct scalaire avec quatre champs : sb est une sous-structure de type SubBus, a est un vecteur bidimensionnel de type double, b est une matrice 3 par 2 de type uint8 et c est un produit scalaire de type double. Ces champs correspondent à la disposition de l’objet BusObject Simulink.Bus.

function y = sb2abc(u)
% extract data from input bus
A = double(u.ele(1:2,1));
B = uint8(u.ele(:,2:3));
C = double(u.ele(3,1));
% create local bus
X = struct(ele=int8(zeros(3)));
Y = struct(sb=X,a=A,b=B,c=C);
% assign value to output bus
y = Y;
end

Définir les structures d’entrée et de sortie

Pour accéder à un bus local Stateflow ou à une interface avec un signal de bus Simulink dans une fonction MATLAB, définissez les bus d’entrée et de sortie pour la fonction :

  1. Dans l’espace de travail de base Simulink, créez un objet Simulink.Bus définissant le type de données du bus.

  2. Dans le volet Symbols, sélectionnez l’entrée ou la sortie de la fonction.

  3. Dans le Property Inspector, définissez la propriété Type à Bus: <object name>. Remplacez <object name> par le nom de l’objet Simulink.Bus qui définit le bus Stateflow.

Par exemple, dans la fonction sb2abc :

  • La propriété Type de l’entrée u est indiquée comme Bus: SubBus.

  • La propriété Type de la sortie y est indiquée comme Bus: BusObject.

Pour plus d’informations, veuillez consulter Define Stateflow Buses.

Définir les variables de structure locales et persistantes

Afin de stocker des données associées dans une variable unique dans une fonction MATLAB, vous pouvez créer une struct MATLAB en tant que variable locale ou persistante. Par exemple, la fonction sb2abc définit deux structures MATLAB locales pour stocker temporairement les données extraites du bus d’entrée u avant d’écrire au bus de sortie y :

Pour plus d’informations, veuillez consulter Define Scalar Structures for Code Generation (Simulink).

Voir aussi

| (Simulink)

Rubriques