Matlabの使用・Simulink—【S関数の作成と応用】

(〇)はじめに

関数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つのファイルを保存したディレクトリに変更する必要があることに注意してください
ここに画像の説明を挿入
。その他の問題がある場合は、クエリまたはコメントしてください

元の記事を7件公開 21 件を獲得 195件を表示

おすすめ

転載: blog.csdn.net/Nirvana_Tai/article/details/105439610