Wolfram 제어 시스템 | 시도해 볼 것들
Wolfram 제어 시스템 | 시도해 볼 것들
모든 코드는 클릭 한 다음 를 눌러 편집하거나 실행할 수 있습니다.
+
모델, 디자인, 배포 환경을 모델링합니다. 컨트롤러를 설계합니다. 실세계에 배포합니다. 고도로 통합된 작업 흐름으로 학생과 전문가 모두를 위해 개발되었습니다.
모델 지정 및 변환
모델 지정 및 변환
비선형 미분 방정식으로부터 비선형 상태 공간 모델을 정의합니다: |
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
모델을 선형화합니다: |
In[]:=
linearModel=StateSpaceModel[nonlinearModel]
상태 공간 행렬에서 상태 공간 모델을 직접 지정합니다: |
In[]:=
StateSpaceModel
,
,(
)
0 | 3 |
3 | -1 |
-1 |
0 |
1 | 0 |
전달 함수 모델로 변환합니다: |
In[]:=
TransferFunctionModel[linearModel,s]
연속시간 모델을 이산화합니다: |
In[]:=
ToDiscreteTimeModel[linearModel,0.5,Method->"ZeroOrderHold"]
PID 컨트롤러 설계
PID 컨트롤러 설계
전달 함수 모델을 정의합니다: |
In[]:=
dcMotor=TransferFunctionModel[{{{.01}},.0001+(.1+.01s)(1+.5s)},s]
시스템에 대한 나이퀴스트 플롯을 생성합니다: |
In[]:=
NyquistPlot[dcMotor]
모델에 대한 PID 컨트롤러를 계산합니다: |
In[]:=
pid=PIDTune[dcMotor,"PID","Data"]
단위 단계 입력에 대한 응답을 계산합니다: |
In[]:=
motorResponse=OutputResponse[pid["ReferenceOutput"],UnitStep[t],{t,0,5}]
응답을 구성합니다: |
In[]:=
Plot[motorResponse,{t,0,5},PlotRange->All]
시간 지연이 있는 모델 시스템
시간 지연이 있는 모델 시스템
시간 지연이 있는 시스템을 지정합니다: |
In[]:=
delayEqn=mx''[t]+cx'[t]+kx[t]-α(f[t]+x[t]-x[t-τ])/.τ->
2π
ω
상징적 상태 공간 모델을 구축합니다: |
In[]:=
latheModel=StateSpaceModel[delayEqn,{x[t],x'[t]},f[t],x[t],t,SystemsModelLabels{"f","x",{"x","x'"}}]
수치 매개변수와 수치 모델을 지정합니다: |
In[]:=
latheParams={m0.75,ω3,α->10,k0.1,c5,τ3};numericModel=latheModel/.latheParams
지연 없이 대략적인 모델을 생성합니다: |
In[]:=
approximateModel=SystemsModelDelayApproximate[numericModel,0]
시스템의 주파수 응답을 시각화합니다: |
In[]:=
BodePlot[{numericModel,approximateModel},PlotLegends->{"Delay","Delay-Free"}]
동일한 입력에 대한 두 모델의 출력 응답을 비교합니다: |
In[]:=
responses=Table[OutputResponse[system,UnitStep[t],{t,0,30}],{system,{numericModel,approximateModel}}];Plot[responses,{t,0,30},PlotRangeAll,PlotLegends{"Delay","Delay-Free"}]
레귤레이터 컨트롤러 설계
레귤레이터 컨트롤러 설계
아핀 상태 공간 모델과 원하는 평형점 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
피드백 입력을 지정합니다: |
In[]:=
feedbackModel="InputModel"->AffineStateSpaceModel[electromagnetModel,Automatic,Automatic,Automatic,None],"FeedbackInputs"->1
레귤레이터 컨트롤러를 계산합니다: |
In[]:=
controllerData=LQRegulatorGains[feedbackModel,{DiagonalMatrix[{.1,.1,.1}],{{5}}},"Data"]
폐쇄 루프 시스템을 얻습니다: |
In[]:=
closedSystem=controllerData["ClosedLoopSystem"]//Simplify
폐쇄 루프 시스템의 상태 응답을 계산합니다: |
In[]:=
emResponses=StateResponse[{closedSystem,{0.8,0,0}},0,{t,0,2}]
원하는 평형에 접근하는 반응을 시각화합니다: |
In[]:=
Plot{emResponses[[1]],/.pars},{t,0,2},
x
0
컨트롤러 모델을 얻습니다: |
In[]:=
emController=controllerData["ControllerModel"]
effort 컨트롤러를 플롯합니다: |
In[]:=
effort=OutputResponse[emController,Join[{0},emResponses],{t,0,2}];Plot[effort,{t,0,2},PlotRange->All]
모델 예측 컨트롤러 설계
모델 예측 컨트롤러 설계
지정된 비용 함수와 가중치로부터 모델 예측 컨트롤러를 계산합니다: |
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
폐쇄 루프 시스템을 계산합니다: |
In[]:=
csys=ModelPredictiveController
,cost,constraints,"ClosedLoopSystem"
0.1 | 0 | 0 |
1 | -0.1 | 1 |
1 | 0 | 0 |
1
0이 아닌 초기 조건 집합에 대한 응답을 플로팅합니다: |
In[]:=
ListStepPlot[OutputResponse[{csys,<|1->{1,-1}|>},PadRight[{0,0.8},10]],PlotRange->All]
모델 생화학 시스템 및 기타
모델 생화학 시스템 및 기타
System Modeler Modelica Library Store에서 생화학 라이브러리를 다운로드합니다. 그리고 다음 중 하나를 따릅니다: