Main Content

MATLAB System ブロックを使用したメッセージ ペイロードの処理

この例では、MATLAB System ブロックを使用して、メッセージを送信、受信、および処理する方法を説明します。System object を使用して、メッセージ ペイロードを送受信および操作するカスタム動作をモデル化するブロックを作成します。

モデルを読み込んで開く

slexMessageArrivalExample モデルを開きます。

open_system('slexMessageArrivalExample');

このモデルには乱数発生器がデータ ソースとして含まれます。そのデータに基づいて、メッセージの送信側は正弦波のペイロードをもつメッセージを Queue ブロックに送信します。Queue ブロックにはメッセージが格納され、メッセージの受信側はメッセージをデータに変換し直します。

getInterfaceImpl API を使用したメッセージ端子の指定

このメッセージではgetInterfaceImplを使用して、メッセージの送信側とメッセージの受信側の両方に対する MATLAB System ブロック内の入出力メッセージ端子を指定します。メッセージの送信側では、getInterfaceImpl で MATLAB System ブロックの出力をメッセージとして定義します。このアクションにより、System object でメッセージ出力の作成が促されます。メッセージの受信側では、getInterfaceImpl で System object の入力をメッセージとして、出力をデータとして定義します。

%Function to send messages
function interface = getInterfaceImpl(~)
    import matlab.system.interface.*;
    interface = Output("Out1", Message);
end
%Function to receive messages and output as data
function interface = getInterfaceImpl(obj)
    import matlab.system.interface.*;
    interface = [Input("In1", Message), ...
        Output("Out1", Data), Output("out2", Data)];
end

伝播関数とサンプル時間の設定

4 つの伝播関数 (getOutputSizeImplgetOutputDataTypeImplisOutputComplexImplisOutputFixedSizeImpl) をメッセージの送信側に設定しなければなりません。

この例では、メッセージ キューに最大容量の 16 件のメッセージが含まれます。乱数発生器のサンプル時間は 0.1 です。受信側のサンプル時間は 1 です。メッセージの受信側のサンプル時間は getSampleTimeImpl API を使用して MATLAB System ブロックに設定されます。

function sts = getSampleTimeImpl(obj)
    sts = createSampleTime(obj,'Type','Discrete', ...
    'SampleTime',obj.SampleTime);
end

モデルのシミュレーションと結果の確認

Scope ブロックに結果が表示されます。これらの結果はさらにシミュレーションを実行すると、想定どおり、乱数発生器で 50% の時間ゼロより大きい数値が生成されることを示します。