Wolfram Regelkreise | Zum Ausprobieren
Wolfram Regelkreise | Zum Ausprobieren
Nehmen Sie Änderungen vor und führen Sie jeden Code aus, indem Sie in den Code klicken und die Tastenkombination drücken.
+
Modellieren, entwerfen, bereitstellen. Modellieren Sie Ihre Umgebung. Entwerfen Sie einen Regler. Stellen Sie Ihre Entwürfe zur Anwendung bereit. Alles in einem eng integrierten Workflow, der sowohl Lernenden als auch Profis entgegen kommt.
Modelle spezifizieren und umwandeln
Modelle spezifizieren und umwandeln
Definieren Sie ein nichtlineares Zustandsraummodell aus nichtlinearen Differentialgleichungen: |
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
Linearisieren Sie das Modell: |
In[]:=
linearModel=StateSpaceModel[nonlinearModel]
Spezifieren Sie das Zustandsraummodell direkt aus Zustandsraummatrizen: |
In[]:=
StateSpaceModel
,
,(
)
0 | 3 |
3 | -1 |
-1 |
0 |
1 | 0 |
Wandeln Sie es in ein Übertragungsfunktionsmodell um: |
In[]:=
TransferFunctionModel[linearModel,s]
Diskretisieren Sie ein zeitkontinuierliches Modell: |
In[]:=
ToDiscreteTimeModel[linearModel,0.5,Method->"ZeroOrderHold"]
Entwerfen Sie einen Proportional-Integral-Differential-Regler (PID-Regler)
Entwerfen Sie einen Proportional-Integral-Differential-Regler (PID-Regler)
Definieren Sie ein Übertragungsfunktionsmodell: |
In[]:=
dcMotor=TransferFunctionModel[{{{.01}},.0001+(.1+.01s)(1+.5s)},s]
Erstellen Sie ein Nyquist-Diagramm für das System: |
In[]:=
NyquistPlot[dcMotor]
Berechnen Sie einen PID-Regler für das Modell: |
In[]:=
pid=PIDTune[dcMotor,"PID","Data"]
Berechnen Sie die Reaktion auf eine Sprungeingabe: |
In[]:=
motorResponse=OutputResponse[pid["ReferenceOutput"],UnitStep[t],{t,0,5}]
Plotten Sie die Reaktion: |
In[]:=
Plot[motorResponse,{t,0,5},PlotRange->All]
Systeme modellieren mit Zeitverzögerung
Systeme modellieren mit Zeitverzögerung
Definieren Sie ein System mit einer Zeitverzögerung: |
In[]:=
delayEqn=mx''[t]+cx'[t]+kx[t]-α(f[t]+x[t]-x[t-τ])/.τ->
2π
ω
Erstellen Sie ein symbolisches Zustandsraummodell: |
In[]:=
latheModel=StateSpaceModel[delayEqn,{x[t],x'[t]},f[t],x[t],t,SystemsModelLabels{"f","x",{"x","x'"}}]
Definieren Sie numerische Parameter und ein numerisches Modell: |
In[]:=
latheParams={m0.75,ω3,α->10,k0.1,c5,τ3};numericModel=latheModel/.latheParams
Erstellen Sie ein Näherungsmodell ohne Verzögerung: |
In[]:=
approximateModel=SystemsModelDelayApproximate[numericModel,0]
Visualisieren Sie den Frequenzgang der Systeme: |
In[]:=
BodePlot[{numericModel,approximateModel},PlotLegends->{"Delay","Delay-Free"}]
Vergleichen Sie die Ausgangsantwort der beiden Modelle auf denselben Eingang: |
In[]:=
responses=Table[OutputResponse[system,UnitStep[t],{t,0,30}],{system,{numericModel,approximateModel}}];Plot[responses,{t,0,30},PlotRangeAll,PlotLegends{"Delay","Delay-Free"}]
Eine Reglersteuerung entwerfen
Eine Reglersteuerung entwerfen
Definieren Sie ein affines Zustandsraummodell und den gewünschten Gleichgewichtspunkt 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
Definieren Sie die Rückkopplungseingabe: |
In[]:=
feedbackModel="InputModel"->AffineStateSpaceModel[electromagnetModel,Automatic,Automatic,Automatic,None],"FeedbackInputs"->1
Berechnen Sie eine Reglersteuerung: |
In[]:=
controllerData=LQRegulatorGains[feedbackModel,{DiagonalMatrix[{.1,.1,.1}],{{5}}},"Data"]
Ermitteln Sie das geschlossene System: |
In[]:=
closedSystem=controllerData["ClosedLoopSystem"]//Simplify
Berechnen Sie die Zustandsantwort des geschlossenen Systems: |
In[]:=
emResponses=StateResponse[{closedSystem,{0.8,0,0}},0,{t,0,2}]
Visualisieren Sie die Annäherung der Antwort an das gewünschte Gleichgewicht: |
In[]:=
Plot{emResponses[[1]],/.pars},{t,0,2},
x
0
Ermitteln Sie das Reglermodell: |
In[]:=
emController=controllerData["ControllerModel"]
Plotten Sie die Reglerkraft: |
In[]:=
effort=OutputResponse[emController,Join[{0},emResponses],{t,0,2}];Plot[effort,{t,0,2},PlotRange->All]
Einen modellprädiktiven Regler entwerfen
Einen modellprädiktiven Regler entwerfen
Berechnen Sie einen modellprädiktiven Regler aus einer vorgegebenen Kostenfunktion und Gewichten: |
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
Berechnen Sie das geschlossene System: |
In[]:=
csys=ModelPredictiveController
,cost,constraints,"ClosedLoopSystem"
0.1 | 0 | 0 |
1 | -0.1 | 1 |
1 | 0 | 0 |
1
Plotten Sie die Reaktion auf eine Reihe von Anfangsbedingungen ungleich Null: |
In[]:=
ListStepPlot[OutputResponse[{csys,<|1->{1,-1}|>},PadRight[{0,0.8},10]],PlotRange->All]
Biochemische Systeme und mehr modellieren
Biochemische Systeme und mehr modellieren
Laden Sie die Bio Chem-Bibliothek aus dem System Modeler Modelica Library Store. Machen Sie dann eines der folgenden Beispiele: