S-Function 使用(一)


function [sys,x0,str,ts] = SecondOrderSystem(t,x,u,flag,zeta,wn)

    switch flag
        case 0
            [sys,x0,str,ts] = mdlInitializeSizes;   %   initialize block
        case 1
            sys = mdlDerivatives(t,x,u,zeta,wn);    %   define xdot=f(t,x,u)
        %   case 2 沒有,例程中沒有差分方程
            
        case 3
            sys = mdlOutputs(t,x,u,wn);             %   define xup=h(t,x,u)
        otherwise
            sys=[];
    end
%==========================================================================
function [sys,x0,str,ts] = mdlInitializeSizes
    sizes = simsizes;
    sizes.NumContStates = 2;                         %   連續狀態變量的個數
    sizes.NumDiscStates = 0;
    sizes.NumOutputs   = 1;                         %   輸出變量的個數
    sizes.NumInputs    = 1;                         %   輸入變量的個數
    sizes.DirFeedthrough = 0;                       %   輸入是否前饋到輸出,是=1,否=0
    sizes.NumSampleTimes = 1;                       %   采樣時間
    sys = simsizes(sizes);
    
    x0 = [0; 0];                                    %   狀態初值
    str = [];                                       %   設置一個空矩陣str,功能未知
    ts = [0 0];                                    %   時間初始化 [period; offset], period=0指連續時間,offset=0指系統從0時刻開始
%==========================================================================
function xdot = mdlDerivatives(t,x,u,zeta,wn)
    xdot(1) = -2 * zeta * wn * x(1) - wn^2 * x(2) + u;
    xdot(2) = x(1);
%==========================================================================
function y = mdlOutputs(t,x,u,wn)
    y = wn^2 * x(2);

以上是一個標准的2階系統的S-Function的m.file

對於傳遞函數要先轉化成狀態方程形式,參見《現代控制理論》能控標准型和能觀標准型部分

在Simulink中調用 S-Function,位置在 Simulink / User-Defined Function

 

 Parameters中填入的是自己定義的 Zeta,wn這兩個變量,其他的如 t , x , u ,flag 這些是系統默認調用參數,不用填;

第三行 module 中只有在調用C語言編寫的文件時才填,否則空着。(C語言文件后面補充,目前建模沒用到)

傳遞函數G(s) 位置在 Simulink / Continuous / Transfer Function 

沖擊函數delta 位置在 Simulink / Source / Pulse Generator 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM