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 qui possède les mêmes champs que l’objet structBusObject Simulink.Bus. La fonction attribue alors la valeur de la struct MATLAB au bus de sortie y.
Xest unestructscalaire avec un seul champ appeléele. Ce champ contient une matrice 3 par 3 de typeint8, qui correspond à la disposition de l’objetSubBusSimulink.Bus.Yest unestructscalaire avec quatre champs :sbest une sous-structure de typeSubBus,aest un vecteur bidimensionnel de typedouble,best une matrice 3 par 2 de typeuint8etcest un produit scalaire de typedouble. Ces champs correspondent à la disposition de l’objetBusObjectSimulink.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 :
Dans l’espace de travail de base Simulink, créez un objet
Simulink.Busdéfinissant le type de données du bus.Dans le volet Symbols, sélectionnez l’entrée ou la sortie de la fonction.
Dans le Property Inspector, définissez la propriété Type à
Bus: <object name>. Remplacez <object name> par le nom de l’objetSimulink.Busqui définit le bus Stateflow.
Par exemple, dans la fonction sb2abc :
La propriété Type de l’entrée
uest indiquée commeBus: SubBus.La propriété Type de la sortie
yest indiquée commeBus: 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
struct | Simulink.Bus (Simulink)