-
大小: 7KB文件類型: .rar金幣: 2下載: 0 次發布日期: 2021-05-14
- 語言: Matlab
- 標簽: S-Function??PID控制器??
資源簡介
使用S-Function函數實現離散PID控制器,并建立simulink仿真模型。

代碼片段和文件信息
function?[sysx0strts]?=?dPID(txuflagkpkikd)
%SFUNTMPL?General?M-file?S-function?template
switch?flag
??%%%%%%%%%%%%%%%%%%
??%?Initialization?%
??%%%%%%%%%%%%%%%%%%
??case?0
????[sysx0strts]=mdlInitializeSizes;
??%%%%%%%%%%%%%%%
??%?Derivatives?%
??%%%%%%%%%%%%%%%
??case?1
????sys=mdlDerivatives(txu);
??%%%%%%%%%%
??%?Update?%
??%%%%%%%%%%
??case?2
????sys=mdlUpdate(txu);
??%%%%%%%%%%%
??%?Outputs?%
??%%%%%%%%%%%
??case?3
????sys=mdlOutputs(txukpkikd);
??%%%%%%%%%%%%%%%%%%%%%%%
??%?GetTimeOfNextVarHit?%
??%%%%%%%%%%%%%%%%%%%%%%%
??case?4
????sys=mdlGetTimeOfNextVarHit(txu);
??%%%%%%%%%%%%%
??%?Terminate?%
??%%%%%%%%%%%%%
??case?9
????sys=mdlTerminate(txu);
??%%%%%%%%%%%%%%%%%%%%
??%?Unexpected?flags?%
??%%%%%%%%%%%%%%%%%%%%
??otherwise
????DAStudio.error(‘Simulink:blocks:unhandledFlag‘?num2str(flag));
end
%?end?sfuntmpl
%
%=============================================================================
%?mdlInitializeSizes
%?Return?the?sizes?initial?conditions?and?sample?times?for?the?S-function.
%=============================================================================
%
function?[sysx0strts]=mdlInitializeSizes
sizes?=?simsizes;
sizes.NumContStates??=?0;
sizes.NumDiscStates??=?4;
sizes.NumOutputs?????=?1;
sizes.NumInputs??????=?1;
sizes.DirFeedthrough?=?0;
sizes.NumSampleTimes?=?1;???%?at?least?one?sample?time?is?needed
sys?=?simsizes(sizes);
%
%?initialize?the?initial?conditions
%
x0??=?[0;0;0;0];
str?=?[];
ts??=?[-2?0];
%?end?mdlInitializeSizes
function?sys=mdlDerivatives(txu)
sys?=?[];
%?end?mdlDerivatives
%=============================================================================
%?mdlUpdate
%?Handle?discrete?state?updates?sample?time?hits?and?major?time?step
%?requirements.
%=============================================================================
%
function?sys=mdlUpdate(txu)
x(3)=x(2);
x(2)=x(1);
x(1)=u;
x(4)=u+x(4);
sys?=x;
%?end?mdlUpdate
%=============================================================================
%?mdlOutputs
%?Return?the?block?outputs.
%=============================================================================
%
function?sys=mdlOutputs(txukpkikd)
sys=kp*x(1)+ki*0.01*x(4)+kd*(x(2)-x(3))/0.01;
%?end?mdlOutputs
%
%=============================================================================
%?mdlGetTimeOfNextVarHit
%?Return?the?time?of?the?next?hit?for?this?block.??Note?that?the?result?is
%?absolute?time.??Note?that?this?function?is?only?used?when?you?specify?a
%?variable?discrete-time?sample?time?[-2?0]?in?the?sample?time?array?in
%?mdlInitializeSizes.
%=============================================================================
%
function?sys=mdlGetTimeOfNextVarHit(txu)
sampleTime?=?0.01;%??Example?set?the?next?hit?to?be?one?second?later.
sys?=?t?+?sampleTime;
%?end?mdlGetTimeOfNextVarHit
%=============================================================================
%?mdlTerminate
%?Perform?any?end?of?simulation?tasks.
%============
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????20563??2012-11-05?16:52??unti
?????文件???????3132??2012-11-05?16:49??dPID.m
-----------?---------??----------?-----??----
????????????????23695????????????????????2
評論
共有 條評論