본문 바로가기
프로그래밍/Matlab

Simulink Constant 블록에서 Matlab 구조체를 사용하는 방법

by 깊은대학 2023. 4. 29.

매트랩 구조체형 배열(struc)을 사용하면 관련 데이터를 그룹화하여 동일한 변수 이름으로 관리할 수 있어서 편리하다.

 

 

예를 들면 항공기 날개에 관련된 데이터를 다음과 같이 wing이라는 이름으로 관리할 수 있다.

 

wing.b=30;      % wing span (ft)
wing.S=300;     % wing area (ft^2)
wing.cbar=11.32;% mean aerodynamic chord (ft)

 

하지만 시뮬링크에서 Constant 블록의 상수값을 구조체 wing으로 설정하고 사용하면 오류가 생긴다. 예를 들면 wing을 입력으로 받아서 이중 wing.S 만을 출력시키는 간단한 시뮬링크 모델을 만들고,

 

function a = test(wing)
a = wing.S;

 

실행하면 다음과 같은 오류 메시지가 뜬다.

 

블록 'test/Constant'에 대해 지정된 데이터형은 'Inherit: Inherit from 'Constant value''이고 이 블록의 파라미터 'Value'에 대해 지정된 값은 MATLAB 구조체입니다. MATLAB 구조체는 버스 유형이 명시적으로 지정된 경우에만 지원됩니다. Bus 객체와 일치하는 데이터형으로 명시적으로 설정하거나, Bus 객체로 연결이 맺어지는 표현식을 지정하십시오. 구성요소:Simulink | 범주:Block

 

오류 해결 방법은 다음과 같다. 우선 작업창에서 버스 객체를 생성한다.

 

wingBus = Simulink.Bus.createObject(wing);

 

그런 후 버스 이름을 보면,

 

wingBus.busName

 

‘slBus1’ 라고 나온다. 이제 시뮬링크의 Constant 블록의 신호특성에서

 

 

출력 데이터형으로 Bus: object name을 선택한 후,

 

 

Bus:slBus1 으로 이름을 바꾸고,

 

 

다시 실행하면 오류없이 잘 작동한다.

 

 

댓글