목록
개요
Simulink를 업무에 사용하다 보니 Model을 구성하고 나서 시뮬레이션을 돌릴 때, 많은 에러들을 접할 수 있다.
그 중에서, Stateflow 내부에서 hasChangedTo(agr1, arg2)라는 연산자를 사용할 때 Local parameter를 인수로 사용할 때 발생하는 에러에 대해 정리 하려고 한다.
hasChangedTo
우선, hasChangedTo(agr1, arg2)라는 연사자는
arg1의 변화가 감지되고 arg1이 arg2 값과 동일하게 되면, True를 return하고 아닌 경우에는 False를 return하는 연산자이다.
함수로 사용하는 경우,
tf = hasChangedTo(data, value)
의 형태로 코드를 구성하고 simulink에서는 chart 간 조건문에 삽입이 된다.
예시로는,
이런식으로 해당 조건이 만족하게 되면 A → B로 chart가 이동이 된다.
에러
이제 이러한 방식으로 hasChangedTo(data, value)를 사용해보는데, 해당 연산자를 사용하는데 있어
Local parameter의 변화 감지를 사용하면 Error가 발생하여 시뮬레이션이 중지된다.
=== 시뮬레이션 (경과 시간: 0.885 초) ===
오류:hasChangedTo 연산자의 인수는 입력 데이터 객체여야 합니다.
차트 '../Subsystem1/Chart'의 천이:
hasChangedTo(data, Value)
라는 구문이 Diagnosis Viewer에 나타나는데, 해당 Error에 관하여 하루정도 고민을 했던 것 같다.
여기서는 hasChangedTo에 들어가는 인자가 Input의 형태여야만 한다고 하는데, Local Parameter에 대해서도 변화 감지에 따른 해당 연산자를 쓰고 싶으면 하나만 수정하면 된다.
해결책
먼저, Stateflow에서 ‘마우스 오른쪽 클릭’ → 모델 계층 구조에서 chart를 클릭 → 오른쪽 부분에 있는 동작 언어를 MATLAB에서 C로 변경
동작 언어를 C로 변경하게 되면 Local Parameter에 대해서도 hasChangedTo()나 hasChanged()연산자를 적용할 수 있다.
이 차이는 MATLAB으로 동작하는 것은 스트립트 언어로 동작하는 것이고 C로 동작하는 것은 컴파일 언어로 동작하는 것의 차이에서 오는 것으로 판단된다. 정확한 이유에 대해서는 자세히는 모르지만 MATLAB으로 동작했을 때, Local Parameter에 대한 변화 감시가 Parameter 선언보다 먼저 이루어져서 그렇지 않을까 라는 생각이 있다.
여하튼, 해당 방식으로 하게 되면 Input Parameter에 대한 변화 감지 뿐만 아니라 Local Parameter에 대한 변화 감지에 대한 연산자를 수행할 수 있다.
'IT 톺아보기 > 기술 공부' 카테고리의 다른 글
[Window] 사내망 등의 이유로 yarn 설치가 안되는 경우 (1) | 2023.06.16 |
---|---|
[React][Typescript] Firebase console을 이용한 Login 기능 구현 (0) | 2023.06.16 |
Vue 공부 - 1 (2) | 2023.03.13 |
작심삼일 JavaScript 정리 - 1 (0) | 2023.03.02 |
퀵 정렬(Quick Sort) 정리 (0) | 2023.01.27 |