離散狀態的S函數


 

 該函數實現的功能是將輸入的波形延遲后輸出在示波器中。

完整代碼如下:

function [sys,x0,str,ts]=sfun_und(t,x,u,flag)
switch flag
    case 0,
        [sys,x0,str,ts]=mdlInitializeSizes;
    case 2,
        sys=mdlUpdate(t,x,u);
    case 3,
        sys=mdlOutputs(t,x,u);
    case 9,
        sys=[];
    otherwise 
        error(['Unhandled flag=',num2str(flag)]);    
end

function [sys,x0,str,ts]=mdlInitializeSizes(len)
sizes=simsizes;%返回一個變量,
sizes.NumContStates=0;%連續變量個數
sizes.NumDiscStates=1;%離散變量個數
sizes.NumOutputs=1;%輸出個數
sizes.NumInputs=1;%輸入個數
sizes.DirFeedthrough=0;%直接貫通,0或1,當時輸出值直接依賴於同一時刻的輸入時為1
sizes.NumSampleTimes=1;%采樣時間
sys=simsizes(sizes);%返回值
x0=0;
str=[];
ts=[0.1 0];


function sys=mdlUpdate(t,x,u)
sys=u;


function sys=mdlOutputs(t,x,u)
sys=x;

 分析上述代碼:

首先,主函數部分如下,程序在執行時會從這里開始:

function [sys,x0,str,ts]=sfun_und(t,x,u,flag)
switch flag
    case 0,
        [sys,x0,str,ts]=mdlInitializeSizes;
    case 2,
        sys=mdlUpdate(t,x,u);
    case 3,
        sys=mdlOutputs(t,x,u);
    case 9,
        sys=[];
    otherwise 
        error(['Unhandled flag=',num2str(flag)]);    
end

 

第一句,函數的輸出部分為 [sys,x0,str,ts],其中sys是變量的返回值,當flag=3時表示輸出結果值;x0是初始狀態值,當flag=0時才有值;str是用來備用的,通常設置為空矩陣[];ts是包含模塊的采樣時間和偏差值得兩列矩陣。
ts=[0,0]時,表示連續采樣;
ts=[-1,0]時,以驅動模塊相同的速率運行;
ts=[0.2 0.1]時,系統仿真從0.1s開始,每隔0.2s運行一次。
接下來就是調用了

 
        

 

 

 接下來是初始化函數

function [sys,x0,str,ts]=mdlInitializeSizes(len)
sizes=simsizes;%開始調用simsizes函數
sizes.NumContStates=0;%連續變量個數
sizes.NumDiscStates=1;%離散變量個數
sizes.NumOutputs=1;%輸出個數
sizes.NumInputs=1;%輸入個數
sizes.DirFeedthrough=0;%直接貫通,0或1,當時輸出值直接依賴於同一時刻的輸入時為1
sizes.NumSampleTimes=1;%采樣時間
sys=simsizes(sizes);%返回值
x0=0;
str=[];
ts=[0.1 0];

 

其中,sizes=simsizes;返回未初始化的sizes結構,然后下面開始定義sizes的結構屬性

 

 初始化結束后,再將sizes結構中的信息傳遞給sys,即:sys=simsizes(sizes);

ts=[0.1 0]是指從0時刻起,每隔0.1s執行一次(10Hz)


 


免責聲明!

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



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