지난 visualSTATE 의 구조와 구성에 이어 IAR visualSTATE 을 이용한 State Machine 에 대하여 설명하도록 한다.

글 김철원(Chul-Won.Kim@iar.com) IAR Systems 코리아 지사장

 

연재 차례
1. IAR visualSTATE 기본편 : 구조 및 구성
2. IAR visualSTATE 기본편 : IAR visualSTATE 을 이용한 State Machine
3. IAR visualSTATE 고급편 : Code 생성과 계층적(Hierarchical) State Machine
 


State(기기의 상태) 들을 특정 조건에 따라 연결해 놓은 State Machine 은 특정 기기의 행동을 모델링하는 기법으로 널리 사용되고 있으며, 간단한 세탁기의 동작을 통하여 State machine 에 대하여 살펴보도록 하겠다.
오른쪽 페이지에 그림처럼 세탁기는 전원을 켜는 On 스위치가 있고, 스위치를 동작 시킬 경우 기기는 멈추던지 왼쪽이던 오른쪽이던 세탁통은 돌아야 한다. 세탁기의 Controller(MCU) 는 반드시 세탁통이 회전하는 방향에 대하여 인식하고 있어야 하며, 더 나아가 세탁기의 문이 열려 있을 경우에는 기기를 동작하여서는 안된다. 마지막으로 붉은색 렘프는 기기가 동작 중일때 점등하여야 한다.

이 세탁기는 아래의 4가지의 State을 가지고 있다:


 

-Stand_by 전원이 인가 되지 않았을 경우
-Stopped 전원이 인가 되었을 경우 (기기가 동작을 시작하지 않은 상태 임)
-Left  전원이 On 되었고 기기가 왼쪽으로의 세탁통 회전을 실행하고 있을 경우
-Right 전원이 On 되었고 기기가 오른쪽으로의 세탁통 회전을 실행하고 있을 경우

세탁기는 기기 상태의 변경에 따라 State 을 바꾼다. 예로 세탁기의 문이 열려 있을 경우 Left state 에서 Stand_by state 로 바꾸며, 전원이 인가(On) 되었을 경우 Stand_by state 에서 Stopped state 으로 상태를 변경한다.




앞에 4가지의 State (Stand_by, Stopped, Left, 및 Right)은 세탁기를 사용하는 사용자에게 button/switch를 통하여 외부적으로 보여지는 상태이다. 하지만 대다수의 임베디드 어플리케이션은 외부적으로 보여지지 않는 내부 컨트롤(Internal control)에 의하여 동작된다.

세탁기의 예로, 세탁통의 회전 방향은 하나 하나의 회전 방향이 모여서 정해진다. 이 의미는 최초 회전시 세탁기는 두바퀴를 한 방향으로 회전시키고, 두바퀴 회전 후 반대 방향으로 통을 회전시킨다. 이러한 회전 방향의 조정은 하나의 State에서 다른 State으로의 변경을 의미하며, State 변경은 적어도 두가지 이상의 변경을 Controller에서 처리함을 보여준다:

-Left_1   최초 한번의 왼쪽 회전을 완료한 경우
-Right_1  최초 한번의 오른쪽 회전을 완료한 경우



각각의 State 은 Node (Box로 표기) 이며, Transition (State 변경)은 화살표가 있는 직선이나 곡선으로 표기 되어 있고, Transition(State 변경)에 붙인 Label은 Transition을 일으키기 위하여 만족하여야 할 상태(condition)의 정의이다.
Stand_by State에서 Stopped state 으로 Transition (State 변경)될 유일한 사항은 세탁기의 전원이 On (세탁기의 On 상태를 만족 시킬 경우) 되었을 경우이다.

Stopped state 에서 기기는 Left 혹은 Stand_by State 로 Transition (State 변경) 될 수 있으며, Left 로 전이되는 경우는 condition WASH()/ 를 만족하였을 경우 세탁을 시작한다. 만일 세탁기의 문이 열려 있을 경우는 Stand_by로 전이 된다.

컨트롤러가 매 회전에 대한 정보를 event ROTATION으로 부터 전달 받는다고 가정 하였을 경우, 첫번째 회전 후, State machine 은 Left_1으로 State을 변경한다. 한번 이상의 회전 후, 기기는 Right state으로 바뀌며, Left State으로 바뀌기전에 Right_1 State을 을 경유하게 된다.

이러한 방향 전환을 위하여 두번의 변환을 지속적으로 필요로 하며, 위의 세탁기 Controller 예제는 event STOP 이 발생하였을 경우 Right_2 State에서 Stopped State으로 Transition (State 변경)될 수 있으며, 세탁기의 문이 열렸을 경우 어떤 State에 있어도 기기가 Stand_by State으로 Transition (State 변경) 되도록 되어 있다.
초기 State 혹은 기본 State은 Stand_by State이며, 예제에서 표기된데로 초기 State 혹은 기본 State은 검은색 원으로 visualSTATE에서는 표기된다.

State machine 의 State의 연속성은 아래와 같이 표기된다:

s0, s1, .., si, sj, …,

s0 은 초기 State이며, si, sj 와 같은 Pair는 state si 에서 state sj 로의 Transition (State 변경)를 나타낸다.
State machine 은 언제나 Environment(주변환경)과 상호 작용을 하며 특히, 특정 기능을 지원하는 Sensor, 동력기, 버튼, 특정 Display를 가지고 있는 Embedded system의 경우 Environment(주변환경)에 대하여 어떻게 반응하는지 어떻게 반응을 하여야 하는지 상호 작용이 결정 된다.

Event
앞선 Mouse나 프린터 등 일반적인 input/output 기기들에 비하여 Environment(주변 환경) 과의 상호 작용은 일반적인 사항은 아니며, 예를 들어 세탁기에서의 Environment는 On/Off를 위하여 전원 버튼을 눌렀을 경우와 같은 input이 이에 해당한다.

앞선 Environment(주변 환경) Input은 더 나아가 세탁통의 회전을 감지하는 센서의 동작에도 영향을 미치며, 여러가지 State의 변화를 가지고 오지만, 실질적으로 사용자가 볼 수 있는 부분은 세탁기의 붉은색 램프가 On/Off 되는것 만을 보게 된다.

이러한 Sensor에 대한 Input은 Event 라고 명하며, Event로 인한 Output을 Action으로 표기한다. Event 는 State machine의 Environment(주변 환경) 안에서 발생하며, Event 결과는 State의 변경을 가지고 올 수 있다. 각각의 Transition (State 변경) 은 Event를 동반할 수 있으며, 하나의 Event는 여러개의 Transition (State 변경)을 가질 수도 있다.

visualSTATE 안에서의 Event는 내부 혹은 외부에서 발생한 한번 혹은 특정 횟수의 Input으로 간주하며, 특정 Event를 실행한 이후, visualSTATE은 Event를 일반 Loop에서 삭제한다.
Event 는 한개 혹은 여러 개의 매개 변수(Parameter) 를 가질 수 있고 이는 Action으로 이어 질 수 있다. 세탁기의 Controller 는 전원 On, 문열림, 세탁 시작/정지, 등과 같은 Event를 동반하고 있으며 이를 ON, DOOR, WASH, STOP 및 ROTATION 으로 표기하고 있다.

하나의 Event를 특정 Transition(전이)에 대한 표기는 아래와 같이 한다.



Action
Action은 Transition (State 변경)에 대한 결과이며, Environment(주변 환경) Output에서 확인할 수 있다. 각각의 transition 은 여러가지의 Action을 실행할 수 있으며, Action은 State의 변화로 인하여 사용자가 실질적으로 인지할 수 있는 외부적으로 형태로 보여질 수 있다.

visualSTATE 안에서의 Action은 내부 혹은 외부에서 발생한 한번 혹은 특정 횟수의 Output으로 간주하며, 특정 Action를 실행한 이후 visualSTATE은 이에 대한 결과를 실행하거나 저장하여 이후 실행할 수 있도록 한다.
Action은 한개 혹은 여러 개의 매개 변수(parameter)와 결과치를 가질 수 있고, 세탁기를 예를 들면 Action은 세탁이 진행되면서 붉은색 렘프를 On/Off하는 Action을 예로 들 수 있다.
Action을 표기하기 위하여 "/" 심볼을 사용하며, 예는 아래와 같다.



Event ON이 Stand_by에서 Stopped State를 촉진하면서 Light action을 실행한다.

연속 제어(Sequential Control)
연속 제어(Sequential Control)를 사용하는 state machine은 C++ 이나 Java언어로 표기가 가능하며 아래는 if statement를 포함한 예이다 :

if (state==Stopped && WASH) {state= Left};
if (state==Left && DOOR) {lamp=off; state=Stand_by};

visualSTATE은 이러한 복잡한 연속제어에 대한 사항도 Diagram을 통하여 간단히 표기하고 최적화된 Code를 자동으로 생성하여 준다.

지금까지 간략한 세탁기 기능으로 State machine에 대한 개념을 살펴보았고, 일반적인 기기들은 매우 복잡하고 다양한 변수를 가진 조합의 State machine 이며, visualSTATE은 이런한 복잡하고 다양한 환경과 변수를 쉽고 간편하게 디자인, Test 및 실질적인 C code를 만들어 준다.
예제를 통하여 본 Statechart diagram 은 개발자가 매우 직관적으로 State machine에 대한 기능을 확인할 수 있으며, visualSTATE은 아래와 같은 Matrix 로도 State machine에 대한 기능을 표기하여 준다.




Matrix 의 가로행은 State을 나타내며, 세로행은 Event를 나타낸다. Transition (State 변경)은 가로행과 세로행이 만나는 입력항에 표기 되며, 예로 가로행 state Stopped과 세로행 Event DOOR이 만나는 입력항에는 Stand_by 의 전이로 표기되어 있다. 유사한 사항으로 가로행 state Stand_by 와 세로행 Event ON이 만나는 입력항에는 Stopped의 Transition (State 변경)로 표기되어 있다.

Designer 실행 예시




이전 기고에 설명한 visualSTATE의 'Designer' 프로그램을 이용, 예제로 설명한 세탁기의 Statechart diagram을 작성하고 visualSTATE의 'Coder' 프로그램을 이용하여 Code 생성을 진행하면 자동적으로 최적화되고 Compact한 Code를 생성할 수 있다. 이는 개발자에게 디자인과 동일한 제어 로직 Code를 제공하는 이점과 visualSTATE 을 통하여 생성된 모델과 실제 양산되는 제품은 동일한 기능을 제공함을 의미한다. IAR visualSTATE Coder를 통하여 생성된 Code는 ISO / ANSI C 또는 C + + 소스 코드이며, 특정 대상을 위한 응용 프로그램의 Porting에 폭 넓은 유연성을 제공한다.

 


 


회원가입 후 이용바랍니다.
개의 댓글
0 / 400
댓글 정렬
BEST댓글
BEST 댓글 답글과 추천수를 합산하여 자동으로 노출됩니다.
댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글수정
댓글 수정은 작성 후 1분내에만 가능합니다.
/ 400
내 댓글 모음
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지