Appia의 IT세상

[Stateflow] Chart의 Level에 따른 데이터 관리, Histroy Junction, Parallel state 본문

Programming/Stateflow

[Stateflow] Chart의 Level에 따른 데이터 관리, Histroy Junction, Parallel state

Appia 2019. 12. 26. 19:22
반응형

 오늘은 먼저 Data에 대해서 간단히 이야기 하면서 관련해서 이야기를 시작할려고 합니다. 그리고 추가적으로 Historty Junction, Parallel state에 대해서 이야기를 나누고자 합니다. 

 

State Level vs Chart Level 

 

먼저 Stateflow의 데이터는 크게 2가지로 구별해서 볼수 있습니다. 즉 State Level vs Chart Level의 데이터로 구별할 수 있습니다. 

 

Chart Level의 데이터 - 전체 Chart에서의 전역 변수 ( Only in Chart) 

State Level의 데이터 - 각 State안에서만 사용할 수 있는 지역 변수 

 

다음과 같은 예를 살펴보도록 하겠습니다. 

 

현재 변수 y는 Chart level로 생성되어 있습니다. 이 부분에 대해서 한번 State-Level로 선언해보도록 하겠습니다. 먼저 Ctrl + H를 단축키를 이용하여 Model - Explorer를 실행시키도록 합니다. 그런 후에 생성하고자 하는 하는 State로 이동합니다. 저의 경우 Run의 substate인 High로 이동하여 살펴 보도록 하겠습니다. 그런 후에 [Add Data]를 눌러서 그 State에 해당하는 State Level의 변수를 생성하여 주시면 됩다. 

 

그런 후 Chart에서 Symbols탭을 이용하여 확인할 수 있습니다. 

Symbol에서 관련된 부분에 대해서 확인 가능합니다. 위의 그림에서도 y라는 변수가 가장 Root 단계에 하나와 High 하부에 하나 있는 것을 보실 수 있습니다. 단, 저의 권장사항은 Chart Level로 사용하시는 것을 권장합니다. 사람들 마다 스타일이 다 다르지만, Name 규칙에 의해서 충분히 관련되어 많은 상태들에 대해서 명시할 수 있다고 생각합니다. 임시 변수 등의 제외하고는 State-Level 변수는 조금 위험하다고 생각합니다. 

 

History junction 

State에서 Exit할 때, 동작하던 Substate을 기억했다가, 다시 해당 State에 Entry할 경우, 저장된 State에서 시작하는 기능입니다. 

 

이 기능을 하더라도 Substate의 entry부터 동작함을 인지 하시는 것이 좋습니다. 만약 다음 예를 한번 살펴보겠습니다. 

먼저 위의 로직은 제가 History junction을 설명하기 위해 임의적으로 만든 로직입니다. 일단 Mid라는 State에 들어와서 A가 시작되고, A1으로 상태로 이동한 상태에서, 갑자기 Cooldown으로 상태가 변이하게 됩니다. 그런 후 다시 Mid 상태가 되었을 경우 정상적이라면 A부터 시작해야 합니다. 하지만, 기존에 A1에서 Superstate의 변화가 이루어졌습니다. 여기에 History Junction표시로 인해서 A1부터 시작하게 됩니다. 

 

Parallel State Diagram 

 

Stateflow에서 Simulation 하면 한 스텝에 주어진 Condition에 의해서 하나의 State의 변화가 이루어집니다. 하지만 만약 Parallel State라면 어떨까요? 각 조건들이 병렬적으로 이루어집니다. 즉, 기존에 위의 그림에서 High , Low, Mid라는 조건이 조건에 의해서 하나씩만 이루어진다면, Parallel State Diagram은 동시에 이루어진다고 보시면 됩니다. 단, 이 안에서도 행순서는 존재합니다. 

위의 그림과 같은 상태라고 보시면 좋을 것 같습니다. 그러면 앞서서 보여드린 그림을 로직을 바탕으로 만드는 방법에 대해서 살펴보겠습니다. 

 

 

먼저 Parallel State Diagram를 만드고자 하는 Level에서 마우스 오른쪽 버튼을 누리소그 Decomposition으로 눌려주세요. 

그런후 각 Transition들을 삭제해 주시면 됩니다. 그럼 각 State에 대해서 번호가 붙여 있을 것입니다.여기서 만약 실행 순서를 바꾸시고자 하시면 바꾸시고자 하는 State를 선택하시면 우측 버튼 누르십다. 그런 후에 [Execution Order]를 눌러서 실행 순서에 대해서 바꿔 주시면 됩니다. 

그럼 원하는 순서로 번호가 바뀔 것입니다. 

 

오늘은 총 3가지 주제에 대해서 살펴보았습니다. 비록 관련해서 최대한 이해 중심으로 글을 작성하다 보니, 일정 부분 부족한 부분도 있었을 수 있습니다. 그런 부분들에 대해서는 언제든지 문의 및 방명록, 댓글 부탁드립니다. 

반응형
Comments