매트랩 구조체형 배열(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 으로 이름을 바꾸고,
다시 실행하면 오류없이 잘 작동한다.
'프로그래밍 > Matlab' 카테고리의 다른 글
넘파이 데이터를 매트랩에서 시각화하기 (0) | 2024.04.07 |
---|---|
Matlab ODE에 추가 파라미터 전달 및 이벤트 설정하기 (0) | 2023.07.09 |
댓글