Systèmes de contrôle avec Wolfram | Choses à essayer
Systèmes de contrôle avec Wolfram | Choses à essayer
Effectuez des modifications et exécutez n’importe quel morceau de code en cliquant à l’intérieur du code et en appuyant sur .
+
Modélisez, concevez, déployez. Modélisez l’environnement. Concevez un contrôleur. Déployez dans le monde réel. Le tout dans un flux de travail hautement intégré, développé pour les apprenants et les professionnels.
Spécifiez et convertissez les modèles
Spécifiez et convertissez les modèles
Définissez un modèle espace-état non linéaire à partir d’équations différentielles non linéaires : |
In[]:=
nonlinearEqns={[t]-u[t]+3[t]-(2[t])[t],[t]3[t]-[t]};nonlinearModel=NonlinearStateSpaceModel[nonlinearEqns,{[t],[t]},{u[t]},{[t]},t]
′
x
1
x
2
x
1
x
2
′
x
2
x
1
x
2
x
1
x
2
x
1
Linéarisez le modèle : |
In[]:=
linearModel=StateSpaceModel[nonlinearModel]
Spécifiez le modèle espace-état directement à partir des matrices espace-état : |
In[]:=
StateSpaceModel
,
,(
)
0 | 3 |
3 | -1 |
-1 |
0 |
1 | 0 |
Convertissez en un modèle de fonction de transfert : |
In[]:=
TransferFunctionModel[linearModel,s]
Discrétisez un modèle à temps continu : |
In[]:=
ToDiscreteTimeModel[linearModel,0.5,Method->"ZeroOrderHold"]
Concevez un régulateur proportionnel-intégral-différentiel (PID)
Concevez un régulateur proportionnel-intégral-différentiel (PID)
Définissez un modèle de fonction de transfert : |
In[]:=
dcMotor=TransferFunctionModel[{{{.01}},.0001+(.1+.01s)(1+.5s)},s]
Créez un tracé de Nyquist pour le système : |
In[]:=
NyquistPlot[dcMotor]
Calculez un régulateur PID pour le modèle : |
In[]:=
pid=PIDTune[dcMotor,"PID","Data"]
Calculez la réponse à une entrée en étape d’unités : |
In[]:=
motorResponse=OutputResponse[pid["ReferenceOutput"],UnitStep[t],{t,0,5}]
Tracez la réponse : |
In[]:=
Plot[motorResponse,{t,0,5},PlotRange->All]
Modélisez des systèmes avec des délais temporels
Modélisez des systèmes avec des délais temporels
Spécifiez un système avec un délai temporel : |
In[]:=
delayEqn=mx''[t]+cx'[t]+kx[t]-α(f[t]+x[t]-x[t-τ])/.τ->
2π
ω
Construisez un modèle espace-état symbolique : |
In[]:=
latheModel=StateSpaceModel[delayEqn,{x[t],x'[t]},f[t],x[t],t,SystemsModelLabels{"f","x",{"x","x'"}}]
Spécifiez les paramètres numériques et un modèle numérique : |
In[]:=
latheParams={m0.75,ω3,α->10,k0.1,c5,τ3};numericModel=latheModel/.latheParams
Créez un modèle approximatif sans le délai : |
In[]:=
approximateModel=SystemsModelDelayApproximate[numericModel,0]
Visualisez la réponse fréquentielle des systèmes : |
In[]:=
BodePlot[{numericModel,approximateModel},PlotLegends->{"Delay","Delay-Free"}]
Comparez la réponse de sortie des deux modèles à la même entrée : |
In[]:=
responses=Table[OutputResponse[system,UnitStep[t],{t,0,30}],{system,{numericModel,approximateModel}}];Plot[responses,{t,0,30},PlotRangeAll,PlotLegends{"Delay","Delay-Free"}]
Concevez le contrôleur d’un régulateur
Concevez le contrôleur d’un régulateur
Définissez un modèle espace-état affine et le point d’équilibre souhaité x 0 |
In[]:=
eqns=m[t]gm-,v[t]ri[t]+l[t];pars={r->10,m->0.05,k->1,l->0.05,g->9.8,->0.5};=,=r/.pars;electromagnetModel=AffineStateSpaceModel[eqns,{{x[t],},x'[t],{i[t],}},{{v[t],}},x[t],t]/.pars
′′
x
k
2
i[t]
2
x[t]
′
i
x
0
i
0
x
0
mg
k
v
0
x
0
mg
k
x
0
i
0
v
0
In[]:=
AffineStateSpaceModel[eqns,{{x[t],},x'[t],{i[t],}},{{v[t],}},x[t],t]
x
0
i
0
v
0
Spécifiez l’entrée de feedback : |
In[]:=
feedbackModel="InputModel"->AffineStateSpaceModel[electromagnetModel,Automatic,Automatic,Automatic,None],"FeedbackInputs"->1
Calculez le contrôleur du régulateur : |
In[]:=
controllerData=LQRegulatorGains[feedbackModel,{DiagonalMatrix[{.1,.1,.1}],{{5}}},"Data"]
Obtenez le système en boucle fermée : |
In[]:=
closedSystem=controllerData["ClosedLoopSystem"]//Simplify
Calculez la réponse à l’état du système en boucle fermée : |
In[]:=
emResponses=StateResponse[{closedSystem,{0.8,0,0}},0,{t,0,2}]
Visualisez la réponse qui se rapproche de l’équilibre souhaité : |
In[]:=
Plot{emResponses[[1]],/.pars},{t,0,2},
x
0
Obtenez le modèle du contrôleur : |
In[]:=
emController=controllerData["ControllerModel"]
Tracez l’effort du contrôleur : |
In[]:=
effort=OutputResponse[emController,Join[{0},emResponses],{t,0,2}];Plot[effort,{t,0,2},PlotRange->All]
Concevez le contrôleur prédictif d’un modèle
Concevez le contrôleur prédictif d’un modèle
Calculez le modèle d’un contrôleur prédictif à partir d’une fonction de coût et de poids spécifiés : |
In[]:=
cost="Norm"->∞,"Horizon"3,"StateWeight"{{5,0},{0,2}},"InputWeight"{{1}};constraints=-2≤≤2&&-2≤≤2&&-1≤u≤1;mpc=ModelPredictiveController
,cost,constraints
x
1
x
2
0.1 | 0 | 0 |
1 | -0.1 | 1 |
1 | 0 | 0 |
1
Calculez le système en boucle fermée : |
In[]:=
csys=ModelPredictiveController
,cost,constraints,"ClosedLoopSystem"
0.1 | 0 | 0 |
1 | -0.1 | 1 |
1 | 0 | 0 |
1
Tracez la réponse à un ensemble de conditions initiales non nulles : |
In[]:=
ListStepPlot[OutputResponse[{csys,<|1->{1,-1}|>},PadRight[{0,0.8},10]],PlotRange->All]
Modélisez des systèmes biochimiques et plus encore
Modélisez des systèmes biochimiques et plus encore
Téléchargez la bibliothèque Bio Chem à partir du magasin de bibliothèques Modelica de System Modeler. Ensuite, suivez l’un des exemples suivants :