※ 사용할 밸브 , 액추에이터

Proportional directional control valve : FESTO MPYE-5-1/8-HF-010-B

공기 컨트롤러 밸브

1. Position Transducers : FESTO TLH225 

2. 테이블 실린더

포지션 트랜스듀서 + 테이블 실린더

- 아날로그 입출력 모듈

아날로그 입력 모듈 : Q64AD

아날로그 출력 모듈 : Q62DAN

-Q64AD , Q62DAN 메뉴얼 사이트

https://t1.daumcdn.net/cfile/tistory/9948D64C5C010BE72E

 

※ Q62DAN에 밸브 배선

단자 위치

Q62DAN은 2채널만 사용한다.

여기선 전압으로 출력을 할 것이다.

(채널이란? 각각 독립적으로 입출력이 가능하다. 회로상에 서로서로 분리가 되어있다.)

 

밸브 핀 번호

1번은 24V + 가 인가된다.

2,4번은 24V - 가 인가된다.

3번은 신호를 입력 받는 곳이다. 여기서는 전압으로 사용했기 때문에 전압이 들어가는 부분이다.

 

배선그림

※ Q64AD에 포지션 트랜스듀서 배선

트랜드듀서 PIN 배치도

데이터 시트를 찾아봐도 없어서 뜯은 후 그림으로 그렸음.

10V 전원인가

DC 10V로 전원이 없어 출력모듈의 채널 2번으로 10V전원을 인가 받음.

출력배선

Q64AD 입력모듈에 아날로그 출력 배선을 함.

프로그램 설정은 나중에 적겠음

 

'PLC > PLC 배선해보기' 카테고리의 다른 글

PLC 배선을 해보자  (2) 2022.04.08

※ 전체 배선도

- 배선1 (노이즈 필터)

그림1
그림1-1

- 배선2 (단자대 분배)

그림2
그림2-1

- 배선3(누전차단기)

그림3
그림3-1

- 배선4(CD -> 콘센트)

그림4
그림4-1

초록색 선은 busbar

- 배선5 (CP1 -> 회로보호기)

그림5
그림5-1

- 배선6 (Q61P -> PLC 전원모듈)

그림6
그림6-1

- 배선7 (CP2)

그림7
그림7-1

- 배선8 (SMPS -> 24V DV 파워서플라이) : 220 -> 24V로 공급

그림8
그림8-1

- 배선9(24V ,0V 단자대로 배선)

그림9
그림9-1

※ 실제 배선

- PLC의 입출력 모듈은 단자대로 배선

전원모듈 : Q61P

CPU : Q03UDECPU

입력 모듈 : QX80 (PNP형) -> 입력이 VCC로 들어감

출력 모듈 : QY80 (PNP형) -> 출력이 VCC로 나옴

 

PNP관련자료

https://tngus342.tistory.com/31?category=996770 

 

트랜지스터 사용해보기

※ 트랜지스터란? https://ko.wikipedia.org/wiki/%ED%8A%B8%EB%9E%9C%EC%A7%80%EC%8A%A4%ED%84%B0 트랜지스터 - 위키백과, 우리 모두의 백과사전 여러 종류의 트랜지스터 트랜지스터(영어: transistor)는 저마늄,..

tngus342.tistory.com

 

- QX80배선

배선도

- 배선 위치

배선위치

TB 18은 COM단자, 24V - 가 들어간다.

QX80 data sheet

https://www.koningenhartman.nl/UserFiles/Product/Datasheet/QX80.pdf

 

-QY80 배선

배선도
배선위치

TB17은 COM단자,  24V + 가 들어간다.

QY80 data sheet

https://dl.mitsubishielectric.com/dl/fa/document/manual/plc/sh080042/sh080042af.pdf

 

'PLC > PLC 배선해보기' 카테고리의 다른 글

PLC 아날로그 값 읽고 출력해보기  (0) 2022.04.08

https://nodered.org/docs/getting-started/windows#2-install-node-red

 

Running on Windows : Node-RED

Running on Windows This page gives specific instructions on setting up Node-RED in a Microsoft Windows environment. The instructions are specific to Windows 10 but should also work for Windows 7 and Windows Server from 2008R2. It is not advisable to use ve

nodered.org

위 사이트는 PC에서 Node-Red 설치하는 방법이다

명롱프롬프트(CMD)에서 아래와 같이 치면 설치가 된다.

npm install -g --unsafe-perm node-red

다음은 CMD창에서 node-red를 치면 실행이 된다.

실행을 하고나면 아래와 같이 뜨는데 지워진 곳의 ip와 포트를 복사해서 익스플로러 환경에서 실행하면 된다.

그럼 다음과 같이 열린다.

위에 작성한 것은 하던것의 사진을 찍어서 원래는 없다.

 

※다음은 필요한 기능들을 다운로드 하는 방법이다.

오른쪽 위 버튼을 누르면 팔렛트 관리가 있다.

필요한 기능들을 추가할 때 쓰는 것이니 이용하자.

※ 이제 PLC와 연동을 하기 위한 세팅을 해보자.

(여기에서는 GXWorks2를 사용합니다.)

여기에서는 MC Protocol을 이용하여 PLC를 조작을 할 것이다. 우선 팔렛트 관리로 들어가서 MC protocol을 받도록 하자.

그 다음은 PLC에서 셋팅을 해줘야된다. 아래와 같이 순서대로 들어가서 설정하면 된다.

위의 3번에서 OpenSetting을 들어가면 아래와 같이 설정을 해준다.

UDP -> MC Protocol -> 5010(여기서는 포트 번호인데 아무거나 해도 되지만 혹시 모르니 1023번호보다 높게 설정하자.)

※ 그 다음은 노드레드로 돌아와서 ip랑 포트번호를 맞춰주면 된다.

(이제부터 위에 나와있는 것들을 노드라고 부르겠다.)

1번에서 보면 MCRead나 MCWrite가 생겻을 것이다. 드래그 앤 드롭을 해서 노드를 화면에 가져다 놓고, 가져다 놓은 노드들을 더블클릭을 하면 옆에 창이 뜰 것이다. 2번을 누르자.

1번은 PLC와 연결된 IP와 동일하게 설정하면 된다.

2번은 GxWorks2에서 설정한 포트번호를 설정하면 된다.

3번은 GXworks2에서 설정한 UDP로 설정하면 된다.

4번은 회색으로 나온 기본 값들을 설정하면 된다.

 ● Network No -> 0(숫자)

 ● Pc no -> 0xff

 ● Dest Module No -> 0x3ff

 ● Dest Module stn No -> 0x0

 

이제 노드레드와 PLC간의 통신 설정은 끝났다. 끗

※ 준비물 : C# , mx component , melsec Q

- mx component란 무엇인가?

PLC와 통신을 편하게 해주는 프로그램입니다.

 

※ 설치방법

https://kr.mitsubishielectric.com/fa/ko/board.do?act=modifyDefultBoard&depth=1&board_id=6&pageIndex=1&category_gubun=25&ut=w&num=20322&rurl=&log_id=&category_1=&category_2=&category_3=&searchItem=title&searchString=mx+component 

 

[로그인] | 한국미쓰비시전기오토메이션(주)

 

kr.mitsubishielectric.com

mx component를 다운로드 받습니다.(윈도우10용으로 받았습니다.)

그림1

압축 풀고 폴더를 엽니다.

그림2

1. EnvMEL폴더안에 setup 설치를 합니다.

2. 2번의 setup 설치를 합니다.

그림3

시리얼 넘버는 GX works2를 설치할 때 사용했던 것을 사용하시면 됩니다.

gxworks2 설치했던 곳

http://www.dawooservo.co.kr/

 

(주)다우에프에이

공장자동화 시스템, 제품 소개, 카탈로그, 프로그램, 교육 일정, 마스크및위생용품, 문의 안내

www.dawooservo.co.kr

※ 설정방법

그림4

윈도우 검색에서 위의 앱을 찾아 관리자 권한으로 실행 합니다.

- 시뮬레이션 설정을 먼저 하겠습니다.

그림5

1. ListView -> Wizard -> Logical Station number순으로 설정합니다.

시뮬레이션은 1번에 저장했습니다.

그림6

GX Simulator2로 설정을 해주시고 Next

그림7

코멘트 작성하고 Finish

- 테스트

그림8

1. Gxworks2를 켜고 melsec에 컴파일 된 파일을 넣는다

2. 시뮬레이션을 켠다.

3. 빨간색 1,2,3번 순서대로 확인해서 successful이 뜨면 성공.

 

- 이더넷 통신을 하도록 하겠습니다.

 

그림9

이더넷은 2번으로 설정

그림10

1. Ethernet board 설정

2. CPU module

3. TCP

설정해주기

그림 11

Host를 Melsec의 IP주소로 설정하면 되겠습니다.

- 테스트

그림 12

successful이 뜨면 성공

 

※ C#으로 프로그래밍 설정

그림13

API를 써야되기 때문에 라이브러리를 추가해줘야 됩니다.

그림 14

위와 동일한 라이브러리를 추가해야됩니다.

- C# Form 구조 만든 것

그림 15

여기서는 연결 버튼과 공급실린더 전후진 한 내용만 올리겠습니다.

- C# 프로그래밍

그림15

1. using ActUtlTypeLib -> 라이브러리를 사용하겠다고 추가하는 것 입니다. 

2. ActUtlType m_PLC -> m_PLC란 변수로 객체를 만드는 것 입니다.

3. 시리얼 통신 연결하는 함수입니다.

   void ComConnectBtn 의 함수는 위의 버튼 함수의 MouseDown을 눌렀을 때 실행되는 함수입니다.

MouseDown에 연결된 ComConnectBtn

   m_PLC.AclogicalStationNumber = 2 -> 위에서 이더넷 통신하는 번호를 적어줍니다.

                                                         (여기서는 이더넷으로 통신을 합니다.)

   int nRtn = m_PLC.Open() -> m_PLC.Open() 통신을 하기위해 접속을 하는 것입니다.

                                         (성공했으면 0을 반환합니다.)

4. 공급실린더 전진을 위한 함수입니다.

   m_PLC.SetDevice("B0" 1) -> SetDevice는 PLC의 메모리에 접근해서 직접 넣어주는 역할을 합니다. B0     의 메모리에 1, 즉 On을 시키는 것입니다. 단 여기서 B0가 항상 On이 되는게 문제가 됩니다. 

   그래서 Mouse Up이 됬을 때 B0를 0으로 바꿔주기 위해 delegate의 무명메서드를 사용합니다.

(Delegate가 어려우면 아래의 방법으로 해도됌)

Mouseup과 down의 함수를 따로 나눠서 씀

5. 공급실린더 후진을 위한 함수입니다.

- PLC 프로그래밍

PLC 프로그래밍

끝~

CPU : QD75P1N , 앰프 : MR-J4-10A를 사용하였습니다.

QD75P1 : QD75 => 위치모듈종류 , P => 오픈컬렉터(만약 D=> 차동드라이버)

(참고 : 오픈 컬렉터는 노이즈잡기가 힘듬. 차동 드라이버는 노이즈잡기가 수월함.)

 

----------------------------------------------------------------------------------------------------------------------------------

그림1

- PLC Parameter에서 I/O Assignment에서 Read PLC Data를 불러온다.

그림2

 

- Intelligent Function Module -> New Module로 파일을 새로 만든다.

- QD75 Type Positioning Module로 설정

- QD75P1N로 설정.

- Acknowledge I/O Assignment 클릭 -> Intelli. 클릭후 Setting 을 눌러서 설정

그림3

----------------------------------------------------------------------------------------------------------------------------------

 

그림 4

- Intelligent Funtion Module -> Parameter 을 더블 클릭을 한다.

- Unit setting : mm로 설정(초기에 움직을 서보모터 단위)

- No, of pulses per rotation : 서보 모터 1번 회전 시 펄스 수

(참고 : hg-kr13의 모터의 경우 최대 분해능 2^22이므로 전자 기어비를 사용하여 최대 분해능 수치를 맞춘다. Ex) PLC 설정 분해능 값 : 2^13 => 8192 , 앰프 분해능 값 : 2^9 => 512로 설정 그래서 최대 분해능 2^22을 맞춘다.)

- Movement amount per rotation : 서보 모터 1번 회전 시 이동거리 설정 여기선 10mm로 설정이 되어있어 , 마이크로 단위로 변경 10000um인데 PLC에서 설정값을 초과하기 때문에 1000um로 설정한다.

- Unit magnification : Movement amount per rotation의 설정값의 배율을 설정한다.

위에서 1000um를 설정하고 10배로 설정하면 10000um가 설정이 되어진다.

- Roatation direction setting : 서보 모터 회전 방향을 결정하여 전진or 후진을 설정할 때 필요하다. (일단 돌려보고 전진,후진 선택을 하여 조정하면 되겠다.)

 

----------------------------------------------------------------------------------------------------------------------------------

 

그림5

- JOG speed limit value : 수동으로 제어 하기 위해 JOG 스피드 조절.

----------------------------------------------------------------------------------------------------------------------------------

 

그림 6

OPR : 원점복귀

- OPR method : Near - point Dog Method로 설정 (DOG 방식으로 설정. 아래에 설명)

- OPR direction : Reverse Direction(Address Decrease Direction) 으로 설정(아래에 설명)

- OPR speed : 500mm/min으로 설정

- Creep speed : 200mm/min으로 설정(아래에 설명)

- OPR retry : Retry OPR  with limit switch로 설정(아래에 설명)

 

아래는 왜 이렇게 설정했는지 설명이다.

그림6

RLS : 하한 센서 (하한 Limit 값)

FLS : 상항 센서 (상한 Limit 값 )

 

DOG : 전원을 껏다가 켰을 시 원점을 복귀하기 위해선 기준이 되는 무언가가 있어야된다. 그래서 서보모터가 움직였을 때 DOG의 기준으로 원점을 찾기 위해 달아둔 센서이다. 

% Creep speed 는 그림 6과 같이 OPR method(여기에선 DOG방식)와 원점 간의 사이에 Speed를 조정하는 값이다.

% OPR direction 는 원점 복귀를 FLS방향으로 시작을 할것이냐, 아니면 RLS 방향으로 시작을 할 것이냐라는 이야기임. 위에선 DOG방식으로 하니깐 DOG방향으로 설정함 그래서 Reverse Direction으로 설정

% Retry OPR 는 FSL, RSL에서 한번더 원점을 찾을지 설정하는 것이다. 여기선 한번더 원점 찾는걸로 함.

 

----------------------------------------------------------------------------------------------------------------------------------

TEST

순서대로 누른다.

Select Function : JOG/Manual Pulse Generator /OPR 로 설정

JOG Speed : 300으로 설정

Forward RUN , Reverse RUN으로 서보모터 JOG 조정하면 끝.

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

그림 1

필자는 그림을 못그립니다... 이해좀 해주세요ㅋㅋ 전구입니니다.

 

위의 그림1을 보면 PB1을 눌렀을 때 전구가 빨간색 -> 노란색 -> 파란색 -> 녹색 -> 보라색 순으로 켜보려고 합니다.

각각의 전구들이 1초간 켜지고 꺼지면 바로 다음 전구가 켜지고 마지막 전구가 켜지면 다시 첫 번째 전구를 켜는걸 할겁니다. 

PB2는 정지버튼 입니다. 전구가 커져 있으면 전구가 꺼집니다.

 

제어 회로입니다.

그림 2

▶ PB1을 누르면 M1을 켜고 M1을 자기유지 시킵니다. 1번 빨간 네모를 보시면 M1으로 T0(타이머0번)을 K10(1초)가 지난뒤 T0가 ON이 되면 D0에 1의 값을 더해 줍니다. (D0는 초기값이 0입니다.) 그리고 T0가 켜지면 T0의 자기 자신을 B접점을 두어 T0를 초기화 시키고 M1이 켜져있기 때문에 다시 타이머를 켭니다.

결국 1초 간격으로 한번식 끊어주고 다시 타이머를 돌리는 원리가 됩니다.

 

▶ 2번 빨간 네모를 보시면 M1이 켜졌을 때 비교연산자를 사용하여 D0의 들어간 값들이랑 비교를 하여 M10 ~ M 14까지 순서대로 켜주게 됩니다.  M10~M14는 임의로 준 값이며 여기에선 M10(빨간 램프) , M11(노란 램프) , M12(파란색 램프) , M13(녹색 램프) , M14(보라색 램프)로 보시면 되겠습니다. 마지막 줄을 보면 [> D0 K4] ----[MOVP K0 D0] 보입니다. 이것은 D0 > 4보다 크다면 D0에 0을 넣겠다는 것입니다. 

그 말은 D0가 5가 될 때 D0에 0을 넣는다는 말입니다.

결론은 4 -> 5가 될때 1초가 지난 뒤에 1을 더해 주니까, M14(보라색 램프) 동작이 끝나고 M10(빨간 램프)로 다시 켜주게 됩니다.

 

▶ 3번 빨간 네모는 PB2가 정지 버튼이므로 정지를 했을 때 처음부터 시작을 하려면 D0의 값을 0으로 바꿔줘야 됩니다. 그래서 넣었습니다.

 

※ 이쯤하면 만들 수 없을까? 라고 생각이 드실수도 있을겁니다. 물론 아닌분들도 있지만... 그래도 해봐야 느니깐 한번 생각 해보시기 바랍니다. 생각이 안난다 싶으면 위의 방법으로 변형을 한번 해보시기 바랍니다. 한 2가지 방법을 더 적겠습니다.

 

첫 번째 방법

그림 3

▶ 1번 빨간 네모칸은 T0를 K50(5초) 동안 타이머를 진행시킵니다. 

아래 줄에 [> T0 K0] - [< T0 K10] 둘다 ON이 되면 M10(빨간 램프)이 켜집니다.

이말인 즉, T0가 0~1초 동안 M10(빨간 램프)를 ON 시킨다는 말입니다. 나머지도 똑같습니다 

0 ~ 1초동안 -> M10 ON

1 ~ 2초동안 -> M11 ON

2 ~ 3초동안 -> M12 ON

3 ~ 4초동안 -> M13 ON

4 ~ 5초동안 -> M14 ON

 

두 번째 방법

그림 4

▶ 위의 방법은 D0의 시작점이 0의 값부터 시작 했는데, 이 방법은 1부터 합니다. 1번 빨간 네모칸을 보면 PB1을 눌렀을 시 D0에 1의 값을 넣습니다. 

이유가 있습니다. 밑에서 설명 하겠습니다.

2번 빨간 네모칸을 보면 ROL이라는 명령어가 있습니다.  여기서 쓰인 명령어는 ROL , SFR , SFL을 썼습니다. 이걸 한번 짚어보고 가겠습니다. 추가로 ROR도 설명 하겠습니다.

 

D 메모리 크기(16Bit)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

이렇게 표현을 할 수 있습니다. 2진수로 표현 됩니다. 저기 한칸 한칸이 1Bit입니다.

 

D메모리 안에 10진수 1을 넣어 보겠습니다.

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

1을 2진수로 16Bit에 표현하면 위쪽처럼 됩니다. 

아까 D0에 10진수 1을 넣었으니 위와 같이 표현이 됩니다.

 

이때 , ROL K1을 하면

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0

이렇게 됩니다. 설명을 하자면 "왼쪽으로 1 Bit 움직여라." 라는 뜻이다. 

 

특징은 아래와 같이 설명 하겠습니다.

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

여기서 ROL K1을 하면 

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

0자리에 1이 올라간다. 생각해보자. 15번째 자리랑 0번째 자리랑 원모양으로 이어져 있다고 생각하면 왼쪽으로 1Bit만큼 밀었다면 0번째 자리에 1이 올라간다고 생각할 수 있다. 그래서 ROL은 Roate of left 라고 생각하고 해석하면 왼쪽으로 회전 요렇게 생각하면 된다. 그래서 ROL K1을 다시 설명 하자면 "왼쪽으로 1Bit만큼 움직이고 회전할꺼 있으면 회전해라" 라는 뜻이된다.

나머지도 해석을 할 수 있다. "ROR(Rotate of Right) -> 오른쪽으로 Bit를 움직이고 회전해라." 라고 생각할 수 있다.

 

그럼 SFL,SFR은 뭘까? 이것도 똑같다 비트 수 만큼 움직이는 명령어다.  SFL -> Shift left , SFR -> Shift Right 뜻이다. 그럼 다른점은 뭘까? 아래를 보자.

 

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

여기서 SFL K1을 하면

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

어떤가? 다 0이 된다. 아까는 회전해서 0번째 자리로 갔지만 이거는 옆으로 가면 아예 없어져 버린다. 

이정도 이해하면 된다. 더 알고 싶다면 C언어 중에 쉬프트 연산이있다. 그걸 참고하면 이해가 더 잘 될 것이다.

 

▶ 아까 위로 다시 가보면  3번 빨간 네모 칸에 D0.0 이 있습니다. 아까 위에서 봤듯이 D0의 메모리안에 0번째 자리를 쓴다는 이야기 입니다. D0.0가 A접점으로 쓰인걸로 보이죠? 네 맞습니다. 1Bit는 0 또는 1의 값을 가지는데 A접점으로 쓰고 D메모리에 0번째 자리에 1이 들어가면 커졌다고 생각할 수 있겠습니다. 그래서 D0.0이 켜지면 M10가 켜지고 ROL K1 한번식 Bit가 왼쪽으로 밀리면 D0.1, D0.2, D0.3... 요런식으로 커졌다 꺼졌다를 할 수 있습니다. 

4번 빨간 네모칸을 보면 SFR K5 오른쪽으로 밀었으니 다시 0번째 자리에 1이 있으므로 처음 상태값이 됩니다. 그래서 똑같은 결과가 됩니다.

5번 빨간 네모칸을 보면 SFL을 k15번 자리로 밀면 죄다 0의 값으로 채워지기 때문에 처음 아무것도 없는 상태가 되므로 [ MOVP K0 D0 ]와 똑같은 결과가 됩니다.

 

 

 

+ Recent posts