Main Content

使用 MATLAB System 模块处理消息有效负载

此示例说明如何使用 MATLAB System 模块发送、接收和处理消息。使用 System object 创建模块以对发送和接收消息以及操作消息有效负载的自定义行为建模。

加载并打开模型

打开 slexMessageArrivalExample 模型。

open_system('slexMessageArrivalExample');

此模型包含一个随机数生成器作为数据源。基于该数据,消息发送方向一个队列模块发送一个具有正弦波有效负载的消息。该队列模块存储该消息,消息接收方将该消息转换回数据。

使用 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

设置传播器和采样时间

需要在消息发送方中设置以下四个传播器:getOutputSizeImplgetOutputDataTypeImplisOutputComplexImplisOutputFixedSizeImpl

在此示例中,消息队列的最大容量为 16 条消息。随机数生成器的采样时间为 0.1。接收方的采样时间为 1。使用 getSampleTimeImpl API 在 MATLAB System 模块中设置消息接收方采样时间。

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

仿真模型并查看结果

Scope 模块显示结果。这些结果表明,随着您运行更多仿真,随机数生成器有 50% 的时间生成的是大于零的数值,这符合预期。