레이블이 POU인 게시물을 표시합니다. 모든 게시물 표시
레이블이 POU인 게시물을 표시합니다. 모든 게시물 표시

SoMachine Basic: Grafcet POU

SoMachine Basic의 POU 알아보기 제 2탄!!
1탄은 General POU에 대해 알아보았고, 2탄은 Grafcet POU를 알아보려고 한다.
역시나, 그냥 한번 부딪혀보자.  (๑و•̀Δ•́)و

2. Grafcet POU


이름이 Grafcet POU란다.
문득, Grafcet이라는 단어가 무슨 뜻인지 궁금하여 구글신에게 물어봤다.
몇 군데의 웹사이트를 돌아다니다보니, Grafcet이 무슨 말인지 알 수 있었다.

Grafcet은 "GRAphe Fonctionnel de Commande Etapes / Transitions"의 약자이고,
(귀차니즘이 발동하여, 어느 나라 말인지까지는 찾아보지 않았다. ㅎㅎ)
영어로 번역하자면, "Step Transition Function Chart"란다.
결국 SFC (Sequential Function Chart)와 유사한 의미로 보인다.

본론으로 들어가서, Grafcet POU를 추가하려면 SoMachine Basic > Programming 탭dml
왼쪽 부분 중 'Master Task'에서 추가할 수 있다.
(왜!! 다른 Task에서는 추가할 수 없을까??)

Grafcet POU를 추가하니 POU 밑에 'Transitions'도 함께 생성된다.

그런데, SFC 격인 Grafcet POU가 추가되었는데, POU만 달랑 추가될 뿐 프로그래밍을 위한 다른 어떤 항목들이 보이지 않는다.
(살짝 당황... (⊙_⊙))
그냥 부딪혀보기로 했으니 일단 POU 내부에 마우스 우클릭을 해보자.

역시나, 스텝을 추가하는 메뉴가 나타났다. ٩(ˊᗜˋ )و
곧바로 스텝들을 추가해보자.


눈에 띄는 것은 가장 먼저 추가한 스텝은 두 줄짜리이고 나머지는 한 줄짜리 스텝이라는 점이다.
토큰을 이용하여 동작할 스텝을 결정하는 SFC 언어의 특성 상 처음 토큰을 가지고 시작하는 스텝 (Initial Step)을
구별하기 위함일 것이다.
당연히 이니셜 스텝은 사용자에 의해 변경이 가능하다.

이니셜 스텝이 2개 생겼다. (o_O) !
토큰을 여러개 핸들링 할 수 있다는 의미 같다.
어차피 난 하나의 POU 안에서 여러개의 토큰을 핸들링 할 생각도 없으니, 일단 넘어가자.
(그리고, 토큰을 여러개 둔다는 것은 별로 좋은 프로그래밍 습관도 아니다.)

다시 3번 스텝을 원상 복귀 시키고나서 가만 보니 뭔가 빠진게 있다.
바로 토큰을 전달하는 브랜치들과 토큰의 전이를 제어할 트렌지션들이다.
Grafcet POU를 좀 가지고 놀다보니 눈에 띄는 것 중 하나가,
스텝의 상단과 하단에 마우스 포인터가 지나갈 때 그 부분에 굵은 녹색 네모가 생긴다는 것이다.
아마도, 거기가 브랜치를 연결하는 곳이 아닐까 싶은데...

역시!! 연결하고자 하는 한쪽 스텝의 끝 부분을 마우스로 드래그 해주면 브랜치가 연결되고,
브랜치 사이에 트랜지션도 함께 추가된다.
(자연스레 만들어진 Alternative Branch ㅎㅎ)

이번에는 Parallel Branch를 만들어보자.
먼저, 'Tr2'가 있는 브랜치를 먼저 삭제하고, 'Tr1'과 스텝3을 연결해보자.
('Delete' 키로 삭제할 수 있다.)

< 쉽네!! ㅎㅎ ٩(^ᴗ^)۶ >

Grafcet POU에 스텝과 트랜지션들을 만들고 나면 왼쪽의 Task 부분에 추가된 스텝들과 트랜지션들이 생겨난다.
어차피, SFC의 역할은 그려진 차트 안에서 토큰들을 이리 저리 굴리는 것 뿐,
토큰을 받은 스텝이 해야할 일은 분명 스텝 안에다가 만들어줘야 할 것이다.
Grafcet POU에 대해 이해한 것이 맞는 지 확인하기 위해 간단한 프로그램을 하나 만들어보자.

정말정말 간단한 프로그램이다.
각 스텝마다 하는 역할은 현재 토큰이 위치한 스텝의 번호를 알 수 있도록 %MW0에 상수를 할당하도록 되어 있고,
자기 자신에게 토큰이 전이되도록 만든 트랜지션을 리셋하도록 되어 있다.
그리고, 각 트랜지션은 %Mn (n은 타켓 스텝 번호)이 True가 되었을 때 토큰을 전이하도록 프로그래밍하였다.

동작하는지 확인하기 위해 애니메이션 테이블을 하나 만들자.

시뮬레이션으로 동작을 확인한다.

예상대로 잘 동작하는 것을 확인할 수 있다. ㅎㅎ



요약
- Grafcet POU는 SFC와 유사한 개념
- Grafcet POU에는 토큰을 핸들링하기 위한 스텝과 트랜지션만 추가하고 각 스텝별 액션은 스텝에 지정


spacer

SoMachine Basic: General POU

SoMachine Basic에서 사용자가 작성하는 프로그램을 POU라고 부른다.
POU가 무슨 뜻인지 SoMachine Basic의 Help에게 물어봤더니 Program Organization Unit 이란다.
좀 더 정확한 정의를 알아보려고 구글에게 물어봐도 정보를 얻는데 한계가 있다.  (`ヘ´)
그래서, 그냥 한번 부딪혀보기로 했다.  (๑و•̀Δ•́)و

1. General POU

SoMachine Basic으로 새로운 프로젝트를 생성하면 'Programming' 탭에 기본적으로 POU가 하나 추가되어 있다.
이것이 일반 POU이다.

지금까지 얻은 정보들로는 SoMachine Basic은 IEC61131-3 언어 중 LD IL, 그리고 SFC를 사용할 수 있다고 한다.
거기서 추측컨데, 일반 POU는 프로그래밍 언어로 LD와 IL을 사용하는 POU로 보인다.

왼쪽의 트리 구조에서 봤을 때, POU는 프로그램의 덩어리이고, 아래의 Rung이라는 녀석이 LD 기준 프로그램 단위가 아닐까 하는 생각이 든다.
렁의 추가는 왼쪽 트리에서 마우스 우클릭을 통해 할 수도 있고, 프로그램 화면 위쪽의 아이콘을 통해 할 수도 있다.

렁 안에서는 래더 심볼들을 이용하여 프로그램을 작성할 수 있다.


< LD에서 'Hello World'와 비슷한 수준의 예제인 자기 유지 회로를 만들어보았다. ㅎㅎ>

내친 김에 SoMachine Basic에서 지원하는 프로그램 요소들도 살펴보자.

가장 왼쪽부터 렁을 추가, 삽입, 삭제 아이콘들, 선들을 그리거나 지우는 아이콘들을 지나 래더 심볼들이 보인다.
A접과 B접 다음에는 Edge Detection, 그리고 그 뒤로 비교 연산자가 위치한다.

< 비교 연산자를 추가했을 때 화면 >

그 뒤로, XOR 심볼을 지나 Function Block이 보인다.

< SoMachine Basic에서 제공하는 기본 펑션 블록들 >

다음으로 코일과 관련된 심볼들이 보이고, Operation Block이 나온다.

마지막으로, 래더 프로그램 작성에 필요한 기타 항목들까지...

눈에 띄는 것은 래더 프로그램인데, 조건문과 반복문처럼 보이는 항목이 있다는 것이다.
(이 부분은 나중에 여유가 생길 때 살펴보자. ㅎ)


SoMachine Basic의 General POU 항목을 살펴보면서 '읭??  (๑°ㅁ°๑)‼✧' 했던 부분은 별도의 '컴파일'이 실시간으로 이루어진다는 것!!
작성 중인 프로그램에 문법적인 문제가 있으면 'Programming' 탭에 X 표시가 나타난다.

그리고, SoMachine Basic의 왼쪽 부분에서 'Tools' 탭을 누르면 'Messages' 메뉴가 나오는데,
이 메뉴를 클릭하면 아래 부분에 SoMachine Basic이 사용자에게 전달하는 메세지가 나온다.

< 에러가 2개 있다고 한다.  (ㅇ︿ㅇ) >

SoMachine Basic의 또 다른 POU인 Grafcet POU는 다음 시간에... ㅎㅎㅎ




요약
- POU는 사용자가 작성하는 프로그램의 큰 덩어리, 렁은 프로그램의 작은 단위가 아닐까?



spacer