
該函數實現的功能是將輸入的波形延遲后輸出在示波器中。
完整代碼如下:
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)