使用 MATLAB System 模块处理消息有效负载
此示例说明如何使用 MATLAB System 模块发送、接收和处理消息。使用 System object 创建模块以对发送和接收消息以及操作消息有效负载的自定义行为建模。
加载并打开模型
打开消息发送和接收系统的模型。此模型包含一个随机数生成器作为数据源。基于该数据,消息发送方向一个队列模块发送一个具有正弦波有效负载的消息。该队列模块存储该消息,消息接收方将该消息转换回数据。
open_system('slexMessageArrivalExample');
使用 getInterfaceImpl
System object 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
设置传播器和采样时间
需要在消息发送方中设置以下四个传播器:getOutputSizeImpl
、getOutputDataTypeImpl
、isOutputComplexImpl
、isOutputFixedSizeImpl
。
在此示例中,消息队列的最大容量为 16 条消息。随机数生成器的采样时间为 0.1。接收方的采样时间为 1。使用 getSampleTimeImpl
API 在 MATLAB System 模块中设置消息接收方采样时间。
function sts = getSampleTimeImpl(obj) sts = createSampleTime(obj,'Type','Discrete', ... 'SampleTime',obj.SampleTime); end
仿真模型并查看结果
Scope 模块显示结果。这些结果表明,随着您运行更多仿真,随机数生成器有 50% 的时间生成的是大于零的数值,这符合预期。