▶ bStart := TRUE; , 설명 : bStart 에 TRUE을 넣는다. := 이것이 대입연산자이다. 끝에는 ;(세미콜론)을 붙여야 한다. bStart의 Data Type이 Bit였으므로 0,1밖에 들어가질 못한다. 언어적인 측면에서는 0 -> FALSE가 되고 1 -> TRUE가 된다. ( bStart := 0 또는 1도 가능하다. )
※ 조건문이란?
어떠한 조건을 주어서 거기에 충족을 하면 조건 안에 있는 문장이 실행된다는 것이다.
IF문
▶ IF <조건> THEN <실행할 문장> END_IF : ST언어의 IF문 입니다. C언어의 조건문과 비슷합니다.
▶ IF <조건> THEN <실행할 문장> ELSE <실행할 문장> END_IF 도 있습니다. (Gxworks2에선 ELSE IF 문을 써봣는데 에러가 떠서 안쓰는걸로 했습니다.)
▶ 설명 : IF을 적고 PB1이 TRUE면 iRoutine(Data type : Word)를 실행 시키고 END_IF로 조건을 닫습니다.
CASE문
▶ CASE <조건> OF <실행할 문장> ELSE <실행할 문장> END_CASE : ST언어의 CASE문입니다. C언어의 조건문과 동일합니다.
▶ 설명 : PB1을 누를 때 마다 iRountine이 1식 증가하는데 , 한번 누르면 iRountine의 값이 1이 되어서 1: 조건으로 들어갑니다. PB1을 한번 더 누르면 2: 조건으로 들어 갑니다. PB1을 마지막으로 누르면 ELSE 이하 문으로 들어가서 문장을 실행합니다. 0: 은 안들어 가겠죠?
※ 반복문이란?
어떠한 조건들이나 숫자들을 반복적 되는것을 제어 하기 위하여 쓰입니다.
For문
▶ FOR문은 정해진 목표값 동안 반복하는 문장입니다.
▶ FOR <초기값> TO <목표값> BY <증가> DO <실행할 문장> END_FOR : iRoutine := 0 에서부터 TO 5까지 BY 1씩 증가하면서 DO 아래의 조건문을 실행한다는 뜻입니다. iResult 의 값은 6이 됩니다.
WHILE문
▶ WHILE문은 조건문이 참이면 문장을 계속 실행합니다.
▶ WHILE <조건> DO <실행할 문장> END_WHILE : iRoutine < 5가 참인 조건이면 while문은 계속 돌아갑니다. iRoutine의 값이 5가 되면 while문은 종료가 됩니다.
REPEAT문
▶ REPEAT문은 결과가 한 번 나오고 UNTIL의 조건이 참이 될 때까지 문장을 반복합니다.
▶ 설명 : T0란 코일을 만들고 K50(5초동안) 동작 시킨다. PB1을 누르면 자기 유지가 되어 타이머는 동작하게 된다. ( T는 타이머의 약자이다. T의 0번을 만든다는 것이다.M0가 계속 켜져 있지 않으면 타이머는 꺼지는 상태가 된다.)
※ 카운터란?
목표 갯수를 적어놓고, 어떠한 동작이 실행되면 그 동작이 목표 갯수에 도달하면 다음 동작을 하게 만드는 것이다.
▶ F7번을 누르거나 코일을 만들어 2번에 다음과 같이 입력한다.
▶ C0 K10 을 누르고 OK를 누른다. (C0 한칸 띄우고 K10을 적는다.)
▶ 설명 : C0란 코일을 만들고 K10(10번 목표갯수)가 완료되면 다음 동작을 하게 만드는 것이다. PB1이 켜지면 자기유지가 되어 카운터는 1식 올라간다. 하지만 전기가 한번 들어왔을 때만 올라가기 때문에 PB2로 전기를 한번 끊고 PB1을 눌러서 다시 카운터가 되게끔 하는 방식이다. (C는 카운터의 약자이다. C의 0번을 만든다는 것이다. )
※ 여기서 문제점이 있다. 카운터는 동작이 다되었을 때 0으로 초기화가 자동을 되지 않는다. 그래서 따로 0으로 만들어주는 것을 해줘야 된다. 아래를 보도록 하자.
▶ C0의 카운터가 다되었다면 C0는 B접점(또는 1 또는 ON상태)이 되는 상태일 것이다. 이때 C0가 켜지면 C0가 초기화가 되는 아주 효율적인 프로그래밍이다. 이때 F8번 또는 Application Instruction 을 만들어서 RST C0로 설정을 해주면 된다
▶ 설명 : RST는 GXworks에서 만들어둔 Function(함수)이다. C언어를 배우지 않았다면 "리셋 하는 기능을 만들었으니 편하게 써라. 예약어는 RST다."라고 인식하면 되겠다.
▶ Application Instruction은 Gxworks에서 미리 만들어둔 기능들을 쓰려면 이걸 쓰고 써라. 정도로 인식하면 되겠다.
※ 다른 초기화 방법은 없을까? 아래를 보도록 하자.
▶ PB1을 누르면 C0의 카운터가 올라간다. 2번이 올라가면 초기화를 해야된다.
▶ PB2를 누르면 MOVE 기능이 작동한다. Move란 K0 를 C0에 넣겠다는 뜻이다. 여러번 들어오는 경우를 막기 위해서 P를 붙여서 사용한다.
MOVP K0 C0 , 설명 : "0의 숫자를 C0"으로 이동 시킨다 라는 뜻이다.
※ P에 대해서 알아보자.
P는 Pulse의 약자이다. Pulse는 매우 짧은 시간에 흐르는 전류라는 정의가 있다. CPU는 클럭으로 동작된다. 클럭이란 전류가 흘렀다 멈췄다 요런 개념으로 보면 되겠다.클럭이 올라갔다가 내려갔다가 반복(교류의 파장을 보면 이해가 쉬울것이다.)을 하는데 클럭이 오를때 감지는 것이 P(양변환)라고 보면 되고 클럭이 내려갈때 N(음변환)이라고 보면 되겠다. 고로 올라가는 그 짧은 한순간만 감지 하기 때문에 한번만 동작 하게끔 할 수 있다.
※ 연산자란?
말 그대로 연산을 해주는 녀석이다. 사칙연산, 비교연산 두개가 있다.
사칙연산을 해보자.
(+ 한칸 띄우고 K30 한칸 띄우고 K50 한칸 띄우고 D1를 입력해야 된다.)
1. + K30 K50 D1 80 -> 설명 : 30+50의 값을 D1(80)에 넣는 것이다.
2. - K50 K30 D2 20 -> 설명 : 50-30의 값을 D2(20)에 넣는 것이다.
3. * K20 K30 D3 600 -> 설명 : 20*30의 값을 D3(600)에 넣는 것이다.
4. / K60 K20 D5 3 -> 설명 : 60/20의 값을 D5(3)에 넣는 것이다.
※ 이것도 문제점이 있다. 프로그램이 돌아가다보면 한번만 계산을 해야되는데 두번 세번 계산 되는 경우도 있을 것이다. 그래서 한번만 들어왔을 때만 계산이 되게끔 해줘야 된다. 아래와 같이 바꿔보자.
프로그램을 시작을 하면 위에서 아래쪽으로 진행하는 시간이라고 보면 되겠다. 그림을 보도록 하자.
▶ 프로그램을 시작하고 PB1을 누르면 빨간 화살표에 숫자순서로 진행된다.
▶ 3 -> 4번은 1번라인에 병렬로 연결 했기 때문에 순서가 그림1과 같이 이동하고 나머진 직렬로 연결되어있어서 차례대로 동작이된다.
▶ 시작 -> END 로 진행이 완료가 되면 한 번 스캔타임이 끝난 상태가 된다.
※ 자기유지란?
버튼을 눌렀다 떼었을 때 동작이 지속적으로 일어나게 하고 싶을 때 쓴다. 말 그대로 받아들이면 자기 자신을 이용해서 유지를 계속 하겠다는 말이다. 그림을 보도록 하자.
▶ 1번의 빨간색 화살표는 전기가 들어온다고 생각하면 된다. 하지만 PB1 이랑 M0는 A접점이라 전기가 통하지 않는 상태가 된다.
▶ PB1을 눌렀을 때 전기는 파란색 화살표로 이동을 하게 된다. 그리고 난 뒤 M0를 키면 앞의 M0의 A접점이 접지가 되고 M0의 쪽으로 전기가 통하게 된다. 이때 PB1을 때도 전기가 계속 통하게 되므로 자기 유지가 된다.
※ 스텝퍼 방식이란?
보통 래더 구조를 생각하면서 짜다보면 프로그램 작성 수 가 늘어가면 이곳 저것 논리적으로도 안맞고 버그처럼 동작 하는 경우도 있을거다. 그걸 방지하기 위해서 스텝퍼 방식이라는 방법으로 래더 프로그램을 짜면 더 쉽게 짜고 나중에 문제가 일어났을 시 빨리 찾을 수 있다. 아래 그림을 보도록 하자
▶ 빨간색 네모로 된 구조 형식이 스텝퍼 방식이다.
▶ Cy_forward_S(실린더 전진 센서)가 하나 있다고 가정하자. 실린더가 전진하여 센서에 감지가 되었다. 하지만 M0가 켜지지 않으면 다음이 진행이 안된다. 그래서 선행 조건이 PB1을 켜서 M0를 활성화 시키는 것이다. 이처럼 스텝퍼는 전 동작이 진행이 되면 다음 동작이 일어나게 하게끔 만드는 것이다.
보통 구조는 아래와 같이 짠다.
※ Y0 는 실린더다. Y0에 Cy_forward_S(실린더 전진 센서)가 부착 되어있다.
▶ 제어부 , 동작부로 나눈다.
▶ PB1이 켜지면 M0가 켜지고, 동작부에 M0가 켜지므로 Y0는 작동을 한다.
▶ Y0가 작동하여 Cy_forward_S가 감지가 되면 M1이 켜지고 Y0는 동작을 멈추게 된다.