記事ディレクトリ
(〇)はじめに
関数Sは何である:Sは、
略語機能システム機能であるが、説明した機能モジュールに言語(ないグラフィックモード)を使用する意味
書き込み関数Sにはどのように:
言語MATLABことができ、他のプログラミング言語は、Cを使用してもよいです、C ++など。
私は、一般的に使用されるMATLABのみを紹介します。「言語」とS関数テンプレートを備え、S関数を記述します
(1)S関数を書く
①コマンドラインウィンドウにコマンドを入力します。>> sfuntmpl.m
を編集してテンプレートファイルを開きます
。②テンプレートファイルsfuntmpl.mには、メイン関数と6つのサブ関数が含まれています。
[1] 最初にメイン関数を見てみましょう:メイン関数
の最初の文-最初のステートメントは次のとおりです:
function [sys、x0、str、ts、simStateCompliance] = sfuntmpl(t、x、u、flag)
ここで、fnameはS関数の関数です名前;
入力パラメーターt、x、y、フラグはシミュレーション時間、状態ベクトル、入力ベクトル、呼び出しフラグ
出力パラメーターsysは戻りパラメーターを表します; x0は初期状態値です; strは空の配列に設定されます; tsはa列行列。1つの列は各状態変数のサンプリング周期で、もう1つの列は対応するサンプリング時間のオフセットです。
[これは、MファイルでのS関数の設定方法です]
【2】再看看**子函数**:
サブ関数のプレフィックスはmdlであり、フラグは呼び出し状況を制御し
ます。4つの一般的な状況があります:
フラグ= 0:初期化サブ関数mdlInitializeSizesを呼び出します;
フラグ= 1:連続状態更新サブ関数mdlDerivatives(t、x、u);を呼び出します;
フラグ= 2:離散状態更新サブ関数mdlUpdate(t、x、u);を
呼び出すフラグ= 3:出力サブ関数mdlOutputs(t、x、u);を呼び出す
(2)S関数の適用:
最も単純な栗を取ります:y = kx + b
(1)S関数を定義する
①メイン関数を初期化する
function [sys,x0,str,ts,simStateCompliance] = move(t,x,u,flag)
switch flag,
case 0,
[sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
case 1,
sys=mdlDerivatives(t,x,u);
case 2,
sys=mdlUpdate(t,x,u);
case 3,
sys=mdlOutputs(t,x,u);
case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
case 9,
sys=mdlTerminate(t,x,u);
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
②初期化サブ機能
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 1;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 1;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1; % at least one sample time is needed
sys = simsizes(sizes);
x0 = [0];
str = [];
ts = [0 0];
simStateCompliance = 'UnknownSimState';
function sys=mdlDerivatives(t,x,u)
sys = u;
function sys=mdlUpdate(t,x,u)
sys=[];
function sys=mdlOutputs(t,x,u)
sys=x;
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1; % Example, set the next hit to be one second later.
sys = t + sampleTime;
function sys=mdlTerminate(t,x,u)
sys = [];
(2)SimulinkモデルでS関数を使用する
まず、モジュールを使用してこのモデルを構築する必要があります。
初心者はデバイスを見つけられない可能性があります。ここで簡単に説明します。Simulink標準モジュールライブラリでは、ScopeがSinks、Sine WaveがSources、S-FunctionがLinkで、User-Defined Functionsです。
ここに行き、スコープの入力端子の数を変更する方法について話します。ダブルクリックしてスコープインターフェイスを開き、左上をクリックして設定し、入力パラメーターを変更します。適用を変更することを忘れないでください。
モデルは次のように構築されます。
結果は次のとおりです。
サンプリング時間:Simulinkモデルの場合、ソルバーのステップにより、モデル全体の最小サンプリング時間間隔が決定されます。
(3)特別な注意*-正しい操作を保証する
初めてS機能を使ったときは、色々な問題に遭遇しましたが、よくある問題をいくつかまとめてまとめましたので、気をつけて、みんなで一度に書けるようになってほしいです。
①ここでの注意は、関数名を記述する必要がありますSとの.mファイル、それ以外の場合はエラーになります
ノート、② .slxファイルの.mファイルとモデルは、[編集]をクリックしてください、ディレクトリにSの機能を取る必要があり、あなたが見つけることができます対応するS関数Mファイルを開きます
③ 基本的に動作を保証できるように、MATLABの現在の作業ディレクトリをこれら2つのファイルを保存したディレクトリに変更する必要があることに注意してください
。その他の問題がある場合は、クエリまたはコメントしてください。