Bonjour,

j'ai un problème avec mes variables locales et globales. Mon programme est le suivant:


function [sys,x0, str, ts]=struc(t,x,u,flag)
%paramètres d'entrée
initialiser;
massT=5175;
massS=361/0.45;
NetaS = 0.05;
frequenceS = 30; % en Hz
OmegaS = frequenceS*2*pi; %rad/s
OmegaT =OmegaS*sqrt(1+massS/massT);
NetaT = NetaS*sqrt(1+massS/massT);
% u est le vecteur d'entrée, donc correspond à la force
T=2.5e-4;
num=[2*NetaS*OmegaS*T^2+OmegaS^2*T^2+4 4*NetaS*OmegaS*T^2+2*OmegaS^2*T^2-8 2*NetaS*OmegaS*T^2+OmegaS^2*T^2+4];
den=[2*NetaT*OmegaT*T^2+OmegaT^2*T^2+4 4*NetaT*OmegaT*T^2+2*OmegaT^2*T^2-8 2*NetaT*OmegaT*T^2+OmegaT^2*T^2+4];
[A1,B1,C1,D1]=tf2ss(num,den);
inertieSenG= inerti([IxxT IyyT IzzT], massT, cgT-cg);
inertieTenG=inerti([IxxS IyyS IzzS], massS, cgS-cg);


switch flag,


case 2
sys = A1*x + B1*u;

case 3

sys = C1*x + D1*u;


case 0

% Call simsizes for a sizes structure, fill it in, and convert it
% to a sizes array.

sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 2;
sizes.NumOutputs = 1;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 1; % Matrix D is non-empty.
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = zeros(sizes.NumDiscStates,1); % Initialize the discrete states.
str = []; % Set str to an empty matrix.
ts = [-1 0]; % sample time: [period, offset]
% End of mdlInitializeSizes.

case {1, 4, 9} % Unused flags
sys = [];
otherwise
error(['unhandled flag = ',num2str(flag)]); % Error handling
end
Lorsque j'exécute mon programme, le message d'erreur qui s'affiche est le suivant:
??? Reference to a cleared variable flag.
Error in ==> struc at 20
switch flag,
Je souhaiterai utiliser les variables , Ixxt, IyyT, IzzT, cgT, cgS,etc... pour exécuter ce programme.
Ces variables sont calculées dans le fichier initialiser.m que j'ai chargé.
Seulement dans le fichier initialiser.m, toutes les variables locales sont supprimées par la fonction ' clear all '. Par conséquent, dans ma fonction struc. m qui est écrite ci dessus, je n'arrive plus à utiliser la fonction 'flag', pour exécuter mon programme pour différent cas.
Pour que mon programme 'struc.m' fonctionne, je dois supprimer la fonction 'clear all' dans le fichier initialiser.m. Ce qui n'est pas conseillé pour mon système.