신군의 역학사전

[Simulink] 논리 시스템(Logical System) 모델링 본문

Mechanical Engineering/Matlab & Simulink

[Simulink] 논리 시스템(Logical System) 모델링

긔눈 2025. 1. 20. 12:00
반응형

이번 포스팅을 통해 아래의 내용들을 정리해보도록 하겠습니다.

 

1. 논리시스템의 정의

2. 논리 연산자, 관계 연산자, Decision Statement (Switch Block)

3. 영점교차제어(Zero Cross Detection)

4. Matlab Function

논리 시스템(Logical System)

논리 시스템이란, 시스템이 가지고 있는 지배방정식이 관계(Relational), 논리(Logical), Dicision Statement로 구성된 시스템을 말합니다.

논리 & 관계 연산자와 관련된 블록들은

[라이브러리 브라우저]-[Simulink]-[Logic and Bit Operations]에서 확인이 가능합니다.

그중 관계연산자는 [Relational Operator]를

논리연산자는 [Logical Operator] 블록을 주로 활용합니다. 

해당 블록도 마찬가지로 블록 더블클릭 후, 연산자 변경이 가능합니다.

AND, OR, NOR 등 다양한 연산자를 지원하고 있습니다.

이를 활용한 간단한 예제를 한번 구성해보도록 하겠습니다.

 

Example : y=((a>0)  &(b>0))  or (c>0)

우선 Pulse Generator로 3가지 형태의 펄스 신호를 인풋으로 만들어줍니다.

각각에 해당되는 연산자 블록들을 연결해준 후

입력 3개 & 출력신호 1개에 대한 하나의 Scope를 생성해줍니다.

하나의 뷰어에 모아서 가시화하기 위해서는

이처럼 신호 라인에 뷰어연결을 통해 Scope를 생성해줍니다.

따라서 논리 & 관계 연산에 따른 최종결과의 가시화가 가능합니다.

위 3개 블록이 인풋, 가장 아래쪽이 출력결과가 되겠네요.

 

Decision Statement

논리 시스템의 구성 요소에는 논리, 관계 연산자 외에 Decision Statement 연산 역시 포함이 되어있는데, 이는 Python의 Switch문에 해당되는 부분입니다. 조건문으로 볼 수도 있겠네요.

관련 블록으로는 [Switch]블록이 있습니다.

[라이브러리 브라우저]-[Simulink]-[Signal Routing]-[Switch]블록을 활용하시면 됩니다.

해당 블록의 임계값 조건을 활용하여 Python으 조건문과 유사하게 활용이 가능합니다.

그리고 그 외 [Multiport Switch]블록을 활용하여, Switch문의 구현 역시 가능합니다.

여기서 추가 데이터 포트 할당을 통해, Else에 해당하는 포트를 따로 분리할 수 있습니다.

또한 [데이터 포트 순서] - [인덱스 지정]을 통해 출력 포트 인덱스를 사용자화 할 수 있습니다.

예를 들어 1,2,3으로 지정되어있는 인덱스를

다음과 같이 3,6,9로 변경할 수 있으며

포트 별로 인덱스가 여러 값이 들어가도 됩니다.

이 경우 배열로 지정을 해주어야 하죠.

 

Example: Step Function(y=1 or -1 (x0 or x≤0))

Switch 블록을 활용하여, 스텝 함수를 모델링하는 예제를 구성해보도록 하겠습니다. 

Switch 블록의 임계값을 0으로 설정해준 후

1과 -1의 Constant블록과 연결해주면, 간단하게 스텝 함수를 모델링할 수 있습니다.

최종적으로 다음과 같은 형태로 구성할 수 있습니다.

워크스페이스 상에 입력 데이터 저장 후

[모델 설정]-[데이터 가져오기/내보내기]로 호출해주면

최종적으로 스텝함수를 구현할 수 있습니다.

 

영점 교차 제어(Zero Cross Detection)

하지만 워크스페이스 상에서 출력결과를 보면 의아한점 한가지를 발견할 수 있는데요

현재 시뮬레이션 시간은 20초로, 스텝 사이즈는 0.4초가 되므로 출력 배열의 크기는 51X1이 되어야합니다.

하지만 출력결과를 보면 52X1의 Shape을 가지는 것을 확인할 수 있습니다.

이는 영점 교차 제어(Zero Cross Detection) 기능이 활성화되어있기 때문인데

시스템이 가지고 있는 불연속점을 체크해주는 역할을 수행합니다.

영점교차제어에 대한 설정은 [모델 설정]-[솔버]-[영점교차 옵션]에서 조정 가능합니다.

여기서 사용 여부 결정을 지정해줄 수 있습니다.

영점교차제어 사용을 해제한 후 시뮬레이션 돌려보면

다음과 같이 보간된 형태의 결과가 출력되며

출력 데이터의 크기도 스텝 사이즈에 맞게 조정됩니다.

 

Matlab Function Block

그 외 살펴보면 좋은 블록으로는, Matlab Function Block이 있는데요, 이는 원하는 블록이 Simulink에서 지원되지 않는 경우, 사용자가 직접 설계하여 활용가능한 블록입니다.

라이브러리 브라우저에서 [Matlab Function]을 검색해주고, 팔레트로 불러와줍니다.

앞선 예제와 같이 스텝함수를 간단하게 Matlab 코드로 구현해준 후 시뮬레이션 실행 시

Switch 블록을 활용했을 때와 같은 결과가 출력됩니다.

반응형