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가 있습니다. 필드 sb는 Simulink.Bus 객체 SubBus에 의해 정의되는 버스 신호이기도 합니다. 이 객체에는 이름이 ele인 필드 한 개가 있습니다.

차트에서 Simulink 버스 신호는 Stateflow 버스 in 및 out과 상호 작용합니다. 함수 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 에 저장합니다. 그런 다음 함수는 MATLAB structstruct의 값을 출력 버스 y에 할당합니다.
X는 이름이ele인 단일 필드가 있는 스칼라struct입니다. 이 필드에는int8형 3×3 행렬이 포함되며, 이는Simulink.Bus객체SubBus의 레이아웃과 일치합니다.Y는 네 개의 필드(sb는 유형이SubBus인 하위 구조체,a는double형 2차원 벡터,b는uint8형 3×2 행렬,c는double형 스칼라)가 있는 스칼라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 버스 신호와 상호 작용하려면 함수에 대한 입력 버스와 출력 버스를 정의하십시오.
Simulink 기본 작업 공간에서 버스 데이터형을 정의하는
Simulink.Bus객체를 만듭니다.기호 창에서 함수 입력 또는 함수 출력을 선택합니다.
속성 인스펙터에서 유형 속성을
Bus: <object name>으로 설정합니다. <object name>을 Stateflow 버스를 정의하는Simulink.Bus객체의 이름으로 바꿉니다.
예를 들어, 함수 sb2abc에서:
입력
u의 유형 속성은Bus: SubBus로 지정되어 있습니다.출력
y의 유형 속성은Bus: BusObject로 지정되어 있습니다.
자세한 내용은 Stateflow 버스 정의하기 항목을 참조하십시오.
지역 구조체 변수와 영속 구조체 변수 정의하기
관련 데이터를 MATLAB 함수 내의 단일 변수에 저장하기 위해 MATLAB struct를 지역 변수 또는 영속 변수로 만들 수 있습니다. 예를 들어 함수 sb2abc는 두 개의 MATLAB 구조체를 정의하여, 입력 버스 u에서 추출한 데이터를 임시 저장한 후 출력 버스 y에 씁니다.
자세한 내용은 코드 생성을 위한 스칼라 구조체 정의하기 (Simulink) 항목을 참조하십시오.
참고 항목
struct | Simulink.Bus (Simulink)