В этом примере показано, как отправлять, получать и обрабатывать сообщения с помощью блока MATLAB System. Используйте системные объекты для создания блоков для моделирования пользовательского поведения, чтобы отправлять и получать сообщения и управлять полезной нагрузкой сообщения.
Откройте модель системы отправки и получения сообщений. Эта модель содержит генератор случайных чисел в качестве источника данных. На основе этих данных отправитель сообщения отправляет сообщение с полезной нагрузкой синусоиды в блок очереди. Блок очереди хранит сообщения, и приемник сообщений преобразует сообщение обратно в данные.
open_system('slexMessageArrivalExample');
getInterfaceImpl
Системный объект API для задания портов сообщенийgetInterfaceImpl
используется в этом примере для определения входного и выходного портов сообщений в блоке MATLAB System как для отправителя сообщений, так и для приемника сообщений. Для отправителя сообщений, getInterfaceImpl
используется для определения выхода системного блока MATLAB как сообщения. Это действие предлагает системному объекту создать выход сообщения. Для приемника сообщений, getInterfaceImpl
используется для определения входов системного объекта как сообщения, а выходов.
%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
В Message Sender необходимо установить следующие четыре распространителя: getOutputSizeImpl
, getOutputDataTypeImpl
, isOutputComplexImpl
, isOutputFixedSizeImpl
.
В этом примере очередь сообщений имеет максимальную емкость 16 сообщений. Генератор случайных чисел имеет шаг расчета 0,1. Приемник имеет шаг расчета 1. Приемник шага расчета сообщений устанавливается в системном блоке MATLAB с помощью getSampleTimeImpl
API.
function sts = getSampleTimeImpl(obj) sts = createSampleTime(obj,'Type','Discrete', ... 'SampleTime',obj.SampleTime); end
В блоке Scope отображаются результаты. Эти результаты показывают, что, когда вы запускаете больше симуляций, генератор случайных чисел выдает число, больше нуля 50% времени, как ожидалось.