주요 콘텐츠

MATLAB 함수에서 Simulink 버스 신호에 액세스하기

이 예제에서는 MATLAB과 Stateflow® 버스를 사용하여 MATLAB® 함수에서 Simulink® 버스 신호의 데이터를 읽고 쓰는 방법을 보여줍니다. MATLAB 구조체를 사용하면 크기와 유형이 다른 데이터를 단일 변수로 묶을 수 있습니다. MATLAB 구조체를 만들어 다음을 수행할 수 있습니다.

  • 관련 데이터를 MATLAB 함수의 지역 변수 또는 영속 변수에 저장

  • 로컬 Stateflow 버스에서 읽어오기 또는 쓰기

  • 입력 포트 또는 출력 포트에서 Simulink 버스 신호와 상호 작용

MATLAB 함수는 비가상 버스만 지원합니다. 자세한 내용은 Composite Interface Guidelines (Simulink) 항목을 참조하십시오.

MATLAB 함수에서 구조체 정의하기

이 예제에서 Stateflow 차트는 하나의 Simulink 버스 신호에서 오는 데이터를 처리하고 그 결과를 다른 Simulink 버스 신호로 출력합니다. 입력 버스 신호와 출력 버스 신호는 모두 Simulink.Bus (Simulink) 객체 BusObject에 의해 정의됩니다. 이러한 버스에는 네 개의 필드 sb, a, b, c가 있습니다. 필드 sbSimulink.Bus 객체 SubBus에 의해 정의되는 버스 신호이기도 합니다. 이 객체에는 이름이 ele인 필드 한 개가 있습니다.

차트에서 Simulink 버스 신호는 Stateflow 버스 inout과 상호 작용합니다. 함수 sb2abc는 입력 버스에서 정보를 추출하고 이를 로컬 Stateflow 버스 localbus에 저장합니다. 그런 다음, 차트는 로컬 버스의 값들과 구조체 배열 subBusArray의 요소 중 하나를 결합합니다. Stateflow 버스의 내용 또는 Stateflow 버스로 구성된 배열에 액세스하고 수정하는 방법에 대한 자세한 내용은 Index and Assign Values to Stateflow Structures 항목을 참조하십시오.

MATLAB® 함수 sb2abc는 유형이 SubBus인 Stateflow 버스를 받아 유형이 BusObject인 Stateflow 버스를 반환합니다. 이 함수는 입력에서 오는 필드 ele의 값을 세 개의 성분인 벡터, 3×2 행렬, 스칼라로 분해합니다. 함수는 이러한 성분을 Simulink.Bus 객체 BusObject와 동일한 필드를 갖는 로컬 MATLAB struct에 저장합니다. 그런 다음 함수는 MATLAB struct의 값을 출력 버스 y에 할당합니다.

  • X는 이름이 ele인 단일 필드가 있는 스칼라 struct입니다. 이 필드에는 int8형 3×3 행렬이 포함되며, 이는 Simulink.Bus 객체 SubBus의 레이아웃과 일치합니다.

  • Y는 네 개의 필드(sb는 유형이 SubBus인 하위 구조체, adouble형 2차원 벡터, buint8형 3×2 행렬, cdouble형 스칼라)가 있는 스칼라 struct입니다. 이러한 필드는 Simulink.Bus 객체 BusObject의 레이아웃과 일치합니다.

function y = sb2abc(u)
% extract data from input bus
A = double(u.ele(1:2,1));
B = uint8(u.ele(:,2:3));
C = double(u.ele(3,1));
% create local bus
X = struct(ele=int8(zeros(3)));
Y = struct(sb=X,a=A,b=B,c=C);
% assign value to output bus
y = Y;
end

입력 구조체와 출력 구조체 정의하기

로컬 Stateflow 버스에 액세스하거나 MATLAB 함수에서 Simulink 버스 신호와 상호 작용하려면 함수에 대한 입력 버스와 출력 버스를 정의하십시오.

  1. Simulink 기본 작업 공간에서 버스 데이터형을 정의하는 Simulink.Bus 객체를 만듭니다.

  2. 기호 창에서 함수 입력 또는 함수 출력을 선택합니다.

  3. 속성 인스펙터에서 유형 속성을 Bus: <object name>으로 설정합니다. <object name>을 Stateflow 버스를 정의하는 Simulink.Bus 객체의 이름으로 바꿉니다.

예를 들어, 함수 sb2abc에서:

  • 입력 u유형 속성은 Bus: SubBus로 지정되어 있습니다.

  • 출력 y유형 속성은 Bus: BusObject로 지정되어 있습니다.

자세한 내용은 Stateflow 버스 정의하기 항목을 참조하십시오.

지역 구조체 변수와 영속 구조체 변수 정의하기

관련 데이터를 MATLAB 함수 내의 단일 변수에 저장하기 위해 MATLAB struct를 지역 변수 또는 영속 변수로 만들 수 있습니다. 예를 들어 함수 sb2abc는 두 개의 MATLAB 구조체를 정의하여, 입력 버스 u에서 추출한 데이터를 임시 저장한 후 출력 버스 y에 씁니다.

자세한 내용은 코드 생성을 위한 스칼라 구조체 정의하기 (Simulink) 항목을 참조하십시오.

참고 항목

| (Simulink)

도움말 항목