Main Content

MATLAB System 블록을 사용하여 메시지 페이로드 처리하기

이 예제에서는 MATLAB System 블록을 사용하여 메시지를 전송하고 수신하고 처리하는 방법을 보여줍니다. System object를 사용하여 메시지를 전송하고 수신하며 메시지 페이로드를 조작하는 사용자 지정 동작을 모델링하는 블록을 작성합니다.

모델 불러오기 및 열기

slexMessageArrivalExample 모델을 엽니다.

open_system('slexMessageArrivalExample');

이 모델에는 난수 생성기가 데이터 소스로 포함되어 있습니다. 해당 데이터를 기반으로 하여 Message Sender는 사인파 페이로드가 포함된 메시지를 Queue 블록으로 전송합니다. Queue 블록은 메시지를 저장하고 Message Receiver는 메시지를 다시 데이터로 변환합니다.

getInterfaceImpl API를 사용하여 메시지 포트 지정하기

이 메시지에서는 getInterfaceImpl 항목을 사용하여 Message Sender와 Message Receiver에 대해 MATLAB System 블록의 입력 및 출력 메시지 포트를 지정합니다. Message Sender에 대해 getInterfaceImpl은 MATLAB System 블록의 출력을 메시지로 정의합니다. 이 동작은 System object에 메시지 출력을 생성하도록 요청합니다. Message Receiver에 대해 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

전파자 및 샘플 시간 설정하기

Message Sender에서 4개 전파자 getOutputSizeImpl, getOutputDataTypeImpl, isOutputComplexImpl, isOutputFixedSizeImpl을 설정해야 합니다.

이 예제에서 메시지 대기열의 최대 용량은 16개 메시지입니다. 난수 생성기의 샘플 시간은 0.1입니다. 수신자의 샘플 시간은 1입니다. Message Receiver 샘플 시간은 getSampleTimeImpl API를 사용하여 MATLAB System 블록에 설정합니다.

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

모델 시뮬레이션하기 및 결과 검토하기

Scope 블록은 결과를 표시합니다. 결과를 보면 예상했던 대로 시뮬레이션을 더 많이 실행할수록 난수 생성기가 시간의 50%에서 0보다 큰 수를 생성합니다.