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

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

SoMachine Basic: Hardware 설정하기 (Digital In/Output 편)

Hardware 설정하기 (Digital In/Output 편)


SoMachine Basic에서 DI 채널을 설정하려면 우선 왼쪽 리스트 중에서 'Digital Inputs'를 클릭하자.
그러면 SoMachine Basic의 아래 부분으로 표가 나온다.
생각보다 항목이 많다.
이럴때 필요한건?? 참고 자료!!
일단 SoMachine Basic의 Help를 열어본다.

< 참고로, Help는 저기 있다!! >

Help를 열어 원하는 곳을 뒤적뒤적...

< OMG!!! 죄다 영어... OTL >
짧은 영어 실력으로 대충 읽어봤을 때,
Used는 프로그램에서 해당 채널의 사용 여부를 표시하는 곳인 것 같고,
Address는 뭐 당연히 주소이고, 입력이니 %I로 시작하겠지..
Symbol은 다른 개발 환경에서의 변수?? 와 비슷한 느낌 같은데.............
.
.
.
.
.
.
.
프로그램이랑 같이 써보기 전에는 설명만으로 무슨 내용인지 알아먹기 어렵다.
DI 채널에 대한 설정은 여기서 한다는 것과 각 채널에 속성들을 확인 또는 설정하는 곳이라는 정도까지만
확인하고 다음으로 넘어가자.
SoMachine Basic에서 DO 채널을 설정하기 위해 왼쪽 리스트 중에서 'Digital Outputs'를 클릭하자.
이 부분도 Help를 열어서 항목들을 확인해보자.
.
.
.
.
.
.
.
정리하자면, 컨트롤러에 내장되어 있는 DI/DO 채널은 컨트롤러를 선택하는 'Configuration' 탭에서 할 수 있고, 왼쪽의 리스트에서 Digital Input (또는 Digital Output)을 클릭하면 설정할 수 있다.
그리고,
- DI 채널은 '%I'로 시작하는 주소를 갖는다는 것과 DO 채널은 '%Q'로 시작하는 주소를 갖는다는 것을
  확인할 수 있다. 그리고, Symbol이라는 변수?? 같은 것을 지정할 수 있다.
- DI 채널 중 오직 한 채널에 대해서만 런/스탑 스위치 입력 용도로 사용할 수 있다.
- DI 채널 중 %I0.2 ~ %I0.5는 필터 기능을 해제한 상태에서 Edge Detection이나 래치 기능을 쓸 수
  있다.
- DO 채널에서 %Q0.0~%Q0.7 중 한 채널은 컨트롤러의 상태를 전달하는 역할로 사용할 수 있다.
- DO 채널은 모두 컨트롤러가 정지 상태가 되었을 때 현재 값을 유지하거나 특정 값으로 강제 셋팅할 수
  있다.
는 정도로 요약 된다.
이번에는 여기까지.. 나머지는 다음에... ㅎㅎㅎ  


spacer

SoMachine Basic: Controller 선택하기

Controller 선택하기

SoMachine Basic으로 어플리케이션을 만들기 위해 먼저 컨트롤러의 선택이 필요하다.

SoMachine Basic의 오른쪽에 있는 HW 목록 중에서 원하는 컨트롤러를 찾아,
원래 기본적으로 놓여 있는 컨트롤러로 드래그 & 드롭하면 된다.
< 새로운 컨트롤러로의 변경 여부를 확인하는 창 >


드래그 & 드롭하면 새로운 컨트롤러로의 변경 여부를 묻는 창이 표시되고,
'Yes'를 클릭하면 컨트롤러가 변경된다.

적용된 컨트롤러에 따라 SoMachine Basic의 왼쪽 리스트가 변경되는데,
설정과 관련된 자세한 내용은 다음에... ㅎㅎㅎ 


spacer