1. 검색창에 M2I를 쳐서 다운로드 -> 소프트웨어 -> XDesignerPlus V4.8.31 를 다운로드 받습니다.

회원가입을 하셔야 받을 수 있습니다.

 

https://www.m2i.co.kr/down/soft/soft1_idx.jsp 사이트 주소입니다.

 

초기설정그림 1

초기설정

파일 -> 새로만들기 -> 새 프로젝트 을 하시면 그림 1과 같이 나옵니다.

여기에선 XTOP Series -> XTOP10TW-UD(-E) 으로 설정하였습니다. 

XTOP10TW-UD(-E) 이것은 HMI를 잘 보시면 모델명이 있습니다. 거기에 맞추시면 됩니다. 

 

그림 2

그림1 설정이 끝나면 그림2가 나옵니다.

여기에선 MISUBISHI(미쯔비시) -> MELSEC-Q Series CPU ETHERNET 모델로 진행을 합니다.

그림3

그림 2 설정이 끝나면 그림3이 나옵니다.

설정 매뉴얼을 누르면 친절히 매뉴얼이 다운로드 됩니다. 그거 보고 하셔도됩니다.

여기에선 매뉴얼대로 IP주소를 부여합니다. 192.168.000 3개는 통신하는 PLC, PC랑 맞춰 줘야됩니다.

매뉴얼대로 포트는 5006 , 프로토콜은 MELSOFT로 합니다.

 

그림 4

그림3으로 설정이 끝났다면 다음 설정을 합니다.

프로젝트 -> 프로젝트 설정 -> TOP 설정에 모델(XTOPTW-UD(-E)) 클릭 -> HMI 설정 사용 체크 -> PLC 설정 -> 프로토콜 UDP로 변경

매뉴얼에 보시면 PLC기종마다 프로토콜 방식 있습니다 그거 쓰시면 됩니다. 여기에선 UDP사용

 

그림 5

빌드 및 전송

설정이 끝나면 빌드 및 전송을 해보시기 바랍니다.

 

전송 -> 빌드 및 전송 -> PC IP 찾기 -> 전송

 

지금 작업하는 곳에선 HMI와 PC가 허브로 연결이 되어있지 않아 연결안됨으로 뜹니다. 제대로 하셨으면 연결 되셨을 테고 PC IP를 찾으신 다음 전송을 하시면 되겠습니다.

 

아래의 내용은 "GXworks2"로 작업하였습니다.

 

그림 1

▶ F2 또는 Edit -> List Operands 를 클릭하여 라벨을 만듭니다.

    1. 라벨이름

    2. 라벨이 위치하는 곳

    3. 라벨의 Class

    4. DataType

    5. 라벨을 만들었으면 표시되는 곳

 

※ 대입연산자이란?

말 그대로 대입하여 연산하는 녀석이라는 거다. 

 

그림 2

▶ 빨간 네모안에 처럼 작성을 한다.

▶ bStart := TRUE; , 설명 : bStart 에 TRUE을 넣는다.  := 이것이 대입연산자이다. 끝에는 ;(세미콜론)을 붙여야 한다. bStart의 Data Type이 Bit였으므로 0,1밖에 들어가질 못한다. 언어적인 측면에서는 0 -> FALSE가 되고 1 -> TRUE가 된다. ( bStart := 0 또는 1도 가능하다. )

 

※ 조건문이란?

어떠한 조건을 주어서 거기에 충족을 하면 조건 안에 있는 문장이 실행된다는 것이다.

그림 3

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문

그림 3

▶ FOR문은 정해진 목표값 동안 반복하는 문장입니다.

▶ FOR <초기값> TO <목표값> BY <증가> DO <실행할 문장> END_FOR : iRoutine := 0 에서부터 TO 5까지 BY 1씩 증가하면서 DO 아래의 조건문을 실행한다는 뜻입니다. iResult 의 값은 6이 됩니다.

 

WHILE문

그림 4

▶ WHILE문은 조건문이 참이면 문장을 계속 실행합니다.

▶ WHILE <조건> DO <실행할 문장> END_WHILE : iRoutine < 5가 참인 조건이면 while문은 계속 돌아갑니다. iRoutine의 값이 5가 되면 while문은 종료가 됩니다.

 

REPEAT문

그림 5

▶ REPEAT문은 결과가 한 번 나오고 UNTIL의 조건이 참이 될 때까지 문장을 반복합니다.

▶ REPEAT <실행할 문장> UNTIL <조건> END_REPEAT

아래의 내용은 "GXworks2"로 작업하였습니다.

그림 1

1. 새 파일을 만들어 준다.

2. Project Type : Structured Projects

3. PLC Series : QCPU(여기에선 QCPU로 씁니다.)

4. PLC Type : 제품에 맞게 설정.

5. Language : Structured Ladder/FBD로 설정.

 

※ 일반 Ladder로 설정하고 Function block의 ST언어로 프로그래밍을 할 때 use macromode 때문에 Function block의 기능들을 쓰지 못합니다.

ladder에서 ST언어로 Function을 써서 짜는건 가능합니다만, 일일히 기능들을 다 만들어야 되므로 Structured Ladder로 짜는걸 추천드립니다.

 

또한 프로그램상 ST언어로만 단독으로 짜는 방법이 없었읍니다. (아시는분은 댓글에 남겨주세요.)

그래서 Structed Ladder안에서 ST언어로 프로그래밍된 Function Block을 불러와서 쓰는걸로 했습니다.

 

 

그림 2

▶ 빨간색으로 표시된 아이콘을 누르면 오른쪽 편에 Function(함수) , Function block(함수 블록), Operator(연산자) 들이 나옵니다.

그림 3

1. FB/FUN

우클릭 한 후 Add New Data를 클릭하면 New Data창이 하나 뜹니다. 

2. Data Type

여러가지가 있습니다만 Function Block을 사용합니다.

3. Data Name

이름을 설정하면 됩니다.

4. Program Language

ST언어로 프로그램 할꺼니까 ST로 선택합니다.

 

 

※ Function Block의 로컬 라벨을 설정합니다.

그림 4

▶ Function Block을 Ladder에서 쓰러면 VAR_INPUT , VAR_OUTPUT 두개의 변수가 있어야 됩니다.

 

그림 5

▶오른쪽에 Function Block에 그림 3에서 만든 MainFunc이 있습니다. 드래그 앤 드롭으로 빨간색 네모 칸으로 끌고 오시면 펑션 블록을 만들고 ladder 로컬 라벨에 등록이 됩니다.

▶1번 쪽 네모 아이콘을 누르시면 input label이라고 뜹니다. 클릭하시고 MainFucn1의 Input옆에 클릭하시고 라벨을 하나 만드시면 됩니다. 여기에선 특수 릴레이 sm400을 넣었습니다.

▶2번 쪽 네모 아이콘을 누르시면 output label이라고 뜹니다. 클릭하시고 MainFunc1의 output 옆에 클릭하시고 라벨을 하나 만드시면 됩니다. 여기에선 내부 릴레이 M0를 썼습니다.

 

 

1. Edit -> Ladder Edit Mode(z) -> Write mode(F2)

 F2 또는 위에 나온대로 들어가면 프로그램을 작성할 수 있는 상태가 된다. 

 

2. Online -> Monitor -> Monitor mode(F3)

F3또는 위에 나온대로 들어가면 모니터 모드로 가능하다. 시뮬레이션을 돌렸을 경우나 PLC에서 기구들이 동작을 할때 어떻게 움직이는지 볼 수 있다.

 

3. Start/Stop Silmulation

시뮬레이션을 켜고 끌수 있다.

※ 반드시 시뮬레이터를 돌릴려고 할 때 Build(F4)는 꼭 해주고 해야 돌아간다.

'PLC > GXWorks2' 카테고리의 다른 글

GXworks2 메뉴얼 다운로드  (0) 2021.11.27
GXworks2 설치  (0) 2021.11.27
MELSEL QCPU PLC 구조  (0) 2021.11.24
GXworks 2 기초명령어 및 단축키  (0) 2021.11.24

아래의 내용은 "GXworks2"로 작업하였습니다.

※ 타이머란?

어떠한 시간을 주어 그 시간을 이용하여 다음 동작을 하게 만드는 것이다.

그림 1

▶ F7번을 누르거나 코일을 만들어 2번에 다음과 같이 입력한다.

▶ T0 K50 을 누르고 OK를 누른다. (T0 한칸 띄우고 K50을 적는다.)

▶ 설명 : T0란 코일을 만들고 K50(5초동안) 동작 시킨다. PB1을 누르면 자기 유지가 되어 타이머는 동작하게 된다. ( T는 타이머의 약자이다. T의 0번을 만든다는 것이다. M0가 계속 켜져 있지 않으면 타이머는 꺼지는 상태가 된다.)

 

※ 카운터란?

목표 갯수를 적어놓고, 어떠한 동작이 실행되면 그 동작이 목표 갯수에 도달하면 다음 동작을 하게 만드는 것이다.

그림 2

▶ F7번을 누르거나 코일을 만들어 2번에 다음과 같이 입력한다.

▶ C0 K10 을 누르고 OK를 누른다. (C0 한칸 띄우고 K10을 적는다.)

▶ 설명 : C0란 코일을 만들고 K10(10번 목표갯수)가 완료되면 다음 동작을 하게 만드는 것이다. PB1이 켜지면 자기유지가 되어 카운터는 1식 올라간다. 하지만 전기가 한번 들어왔을 때만 올라가기 때문에 PB2로 전기를 한번 끊고 PB1을 눌러서 다시 카운터가 되게끔 하는 방식이다. (C는 카운터의 약자이다. C의 0번을 만든다는 것이다. )

 

※ 여기서 문제점이 있다. 카운터는 동작이 다되었을 때 0으로 초기화가 자동을 되지 않는다. 그래서 따로 0으로 만들어주는 것을 해줘야 된다. 아래를 보도록 하자.

그림 3

▶ C0의 카운터가 다되었다면 C0는 B접점(또는 1 또는 ON상태)이 되는 상태일 것이다. 이때 C0가 켜지면 C0가 초기화가 되는 아주 효율적인 프로그래밍이다. 이때 F8번 또는 Application Instruction 을 만들어서 RST C0로 설정을 해주면 된다

▶ 설명 : RST는 GXworks에서 만들어둔 Function(함수)이다. C언어를 배우지 않았다면 "리셋 하는 기능을 만들었으니 편하게 써라. 예약어는 RST다."라고 인식하면 되겠다.

▶ Application Instruction은 Gxworks에서 미리 만들어둔 기능들을 쓰려면 이걸 쓰고 써라. 정도로 인식하면 되겠다.

 

※ 다른 초기화 방법은 없을까? 아래를 보도록 하자.

그림 4

▶ PB1을 누르면 C0의 카운터가 올라간다. 2번이 올라가면 초기화를 해야된다.

▶ PB2를 누르면 MOVE 기능이 작동한다. Move란 K0 를 C0에 넣겠다는 뜻이다. 여러번 들어오는 경우를 막기 위해서 P를 붙여서 사용한다. 

 MOVP K0 C0 , 설명 : "0의 숫자를 C0"으로 이동 시킨다 라는 뜻이다.

 

※ P에 대해서 알아보자.

P는 Pulse의 약자이다. Pulse는 매우 짧은 시간에 흐르는 전류라는 정의가 있다. CPU는 클럭으로 동작된다. 클럭이란 전류가 흘렀다 멈췄다 요런 개념으로 보면 되겠다.클럭이 올라갔다가 내려갔다가 반복(교류의 파장을 보면 이해가 쉬울것이다.)을 하는데 클럭이 오를때 감지는 것이 P(양변환)라고 보면 되고 클럭이 내려갈때 N(음변환)이라고 보면 되겠다. 고로 올라가는 그 짧은 한순간만 감지 하기 때문에 한번만 동작 하게끔 할 수 있다.

 

※ 연산자란?

말 그대로 연산을 해주는 녀석이다. 사칙연산, 비교연산 두개가 있다.

사칙연산을 해보자.

그림 5
예제

(+ 한칸 띄우고 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)에 넣는 것이다.

 

 

※ 이것도 문제점이 있다. 프로그램이 돌아가다보면 한번만 계산을 해야되는데 두번 세번 계산 되는 경우도 있을 것이다. 그래서 한번만 들어왔을 때만 계산이 되게끔 해줘야 된다. 아래와 같이 바꿔보자.

예제

※ +p K30 K50 D1식으로 +뒤에 p를 붙어주면 되겠다. 나머지도 동일하다. 

-p , *p , /p 이런식이다.

 

※ 비교 연산을 해보자.

그림 6

(= 한칸 띄우고 K20 한칸 띄우고 K20을 입력해야 된다.)

예제

▶ 1. = K20 K20 --> M1 설명 : 20 = 20 , 20이 20이랑 같다면 참이 된다. 그래서 M1이 켜진다.

▶ 2. > K30 K40 --> M2 설명 : 30 > 40 , 30이 40보다 크다면 참이 된다. 하지만 아니기 때문에 M2가 켜지지 않는다.

▶ 3. >= K30 K30 --> M3 설명 : 30 >= 30 , 30이 30보다 크거나 같다면 참이 된다. 그래서 M3가 켜진다.

▶ 4. < K30 K40 --> M4 설명 : 30 < 40 , 30이 40보다 작다면 참이 된다. 그래서 M4가 켜진다.

▶ 5. <= K50 K40 --> M5 설명 : 50 <= 40 , 50이 40보다 작거나 같다면 참이 된다. 하지만 아니기 때문에 M5가 켜지지 않는다.

▶ 6 <> K30 K40 --> M6 설명 : 30 <> 40 , 30이 40이랑 다르면 참이 된다. 그래서 M6가 켜진다. (C언어의 ! 연산자 두개가 같지 않다면 참인 조건이다.)

 

아래의 내용은 "GXworks2"로 작업하였습니다.

※스캔타임이란?

프로그램을 시작을 하면 위에서 아래쪽으로 진행하는 시간이라고 보면 되겠다. 그림을 보도록 하자.

 

그림 1

▶ 프로그램을 시작하고 PB1을 누르면 빨간 화살표에 숫자순서로 진행된다.

▶ 3 -> 4번은 1번라인에 병렬로 연결 했기 때문에 순서가 그림1과 같이 이동하고 나머진 직렬로 연결되어있어서 차례대로 동작이된다. 

▶ 시작 -> END 로 진행이 완료가 되면 한 번 스캔타임이 끝난 상태가 된다. 

 

※ 자기유지란?

버튼을 눌렀다 떼었을 때 동작이 지속적으로 일어나게 하고 싶을 때 쓴다. 말 그대로 받아들이면 자기 자신을 이용해서 유지를 계속 하겠다는 말이다. 그림을 보도록 하자.

그림 2

▶ 1번의 빨간색 화살표는 전기가 들어온다고 생각하면 된다. 하지만 PB1 이랑 M0는 A접점이라 전기가 통하지 않는 상태가 된다.

▶ PB1을 눌렀을 때 전기는 파란색 화살표로 이동을 하게 된다. 그리고 난 뒤 M0를 키면 앞의 M0의 A접점이 접지가 되고 M0의 쪽으로 전기가 통하게 된다. 이때 PB1을 때도 전기가 계속 통하게 되므로 자기 유지가 된다. 

 

※ 스텝퍼 방식이란?

보통 래더 구조를 생각하면서 짜다보면 프로그램 작성 수 가 늘어가면 이곳 저것 논리적으로도 안맞고 버그처럼 동작 하는 경우도 있을거다. 그걸 방지하기 위해서 스텝퍼 방식이라는 방법으로 래더 프로그램을 짜면 더 쉽게 짜고 나중에 문제가 일어났을 시 빨리 찾을 수 있다. 아래 그림을 보도록 하자

그림 3

▶ 빨간색 네모로 된 구조 형식이 스텝퍼 방식이다.

▶ Cy_forward_S(실린더 전진 센서)가 하나 있다고 가정하자.  실린더가 전진하여 센서에 감지가 되었다. 하지만 M0가 켜지지 않으면 다음이 진행이 안된다. 그래서 선행 조건이 PB1을 켜서 M0를 활성화 시키는 것이다. 이처럼 스텝퍼는 전 동작이 진행이 되면 다음 동작이 일어나게 하게끔 만드는 것이다.

 

 

보통 구조는 아래와 같이 짠다.

※ Y0 는 실린더다. Y0에 Cy_forward_S(실린더 전진 센서)가 부착 되어있다.

 

▶ 제어부 , 동작부로 나눈다.

▶ PB1이 켜지면 M0가 켜지고, 동작부에 M0가 켜지므로 Y0는 작동을 한다.

▶ Y0가 작동하여 Cy_forward_S가 감지가 되면 M1이 켜지고 Y0는 동작을 멈추게 된다.

▶ M1이 켜졌으므로 M0의 자기 유지도 끊겨서 동작이 멈추게 된다.

+ Recent posts