본문 바로가기

KAIROS 2기

[카이로스2기] PLC 기초1 : 레더 프로그램을 배워보자

카이로스 2기 커리큘럼에는 또 새로운 부분이 있으니 바로 PLC (Programmable Logic Controller)이다.
도대체 어떤 것인지 짐작도 안가던 PLC 프로그램,,이었지만 한 주간 열심히 배웠더니 이제는 어떤 것인지 감이 잡혔다!
산업 현장에서 많이 쓰인다고 하는만큼 다양한 시스템(기계)들을 제어할 수 있는 중앙제어 시스템의 느낌이 컸다. 

1. 결선
2. PLC 기초
3. 타이머
4. 카운터
5. 비교명령
6. 전송명령 (MOV)

 

총 3주 동안 개인용 PLC를 가지고 하는 명령어 연습과 팀별로 큰 PLC를 가지고 하는 응용 실습이 예정되어 있다.
이번 포스팅에서는 카이로스 2기에서 1인 1대 제공해준 PLC XBC-DR10E 모델을 통한 학습 내용을 담아보겠다.


1. 결선 

1) 기본세팅
본격적인 시작에 앞서 엄청난 양의 물품 배분이 이루어졌다. PLC 본체와, 스위치, LED, 릴레이 등..
그리고 무엇보다 전선을 안전하고 효율적으로 쓰기 위한 Y자 단자 작업이 이루어졌는데(모가지..라고 불렀다ㅎ) 첫 날부터 50개를 만들었는데도 결국 부족해서 추가 생산을 꽤 했다.
번거롭고 시간이 꽤 들었던 작업이지만 이후 수많은 결선을 진행하면서 너무너무 편리했고, 강사님 말씀대로 전선이 깔끔하게 분실없이 관리될 수 있다는 점도 큰 장점인 것 같다!
아무래도 전기를 다루고 있으니 안전상의 관리를 강사님께서 많이 신경써주셨다.😺

 
다음으로는 전원에 스위치를 만드는 작업을 했다.
전원 선을 싹둑 자르려니까 정말 당혹스러웠다 ㅋㅋㅋ 이렇게 스위치를 달면 정말 전원을 스위치로 제어가 되는게 당연하면서도 너무 신기했고, 정말 편리하게 잘썼다👍
처음 단계동안은 PLC를 전원용으로만 사용하고, 포트를 사용하지 않는 결선으로 되어있다.

 
2) BTN, LED
결선은 기본적으로 : 전원 > PLC > LED (24V > +, 24 G > - ) > Btn (극성 없음) 흐름으로 이루어졌다.
여기서 중요한 점은 Push Button에 극성은 없지만, 파란색(a접점)과 빨간색(b접점)을 잘 구분해야 한다는 점이다.

- a접점 : NO (Normal Open) 기본값이 열려있고, 누르면 회로가 연결됨 > 우리가 일반적으로 생각하는 버튼
- b접점 : NC (Normal Closed) 기본값이 닫혀있고(연결), 누르면 회로가 풀림

버튼을 통해 추후 PLC 프로그램에서 쓰는 a접점 b접점을 직관적으로 더 잘 이해할 수 있었다!

 
3) 자기유지

위의 사용법으로는 LED가 버튼을 누르고 있을때만 켜져있고, 손을 떼면 불이 꺼진다.

이것을 계속 켜져있게 하기 위해서는 '자기유지'가 되도록 해야하는데, 프로그램 없이 결선하는 지금은 '릴레이'라는 장치를 이용하여 자기유지를 만들 수 있다.

 



2. PLC 기초 

1) 레더 프로그램(Ladder Diagram)
LS 산전 PLC는 X5000이라는 프로그램을 통해 제어할 수 있다.

레더 프로그램으로 가장 기본적인 AND 연산은 이렇게 표현되어, 두 버튼이 모두 눌려야만 전류가 통해서 ON이 된다는 것을 직관적으로 볼 수 있다.

 
X5000은 가장 많이 쓴 기능 중 하나인 '시뮬레이션'을 제공하는데, I/O 파라미터 설정에서 모델을 설정하고, 시스템 모니터 창에서 설정된 버튼을 누르면 LED가 점등으로 변경되는 것을 확인할 수 있다.😮

이 시뮬레이션 기능이 있어서 프로그래밍이 잘 되었는지 바로바로 확인할 수 있고, 실제 배선하기 어려운 부분들도 확인할 수 있어서 좋았다.

 

2) 명령어

PLC는 릴레이를 사용하지 않고도 프로그래밍으로 가능하다는 것을 굉장히 체감할 수 있었는데, 미리 배선을 해보니 이 체감이 더욱 어마어마 했다 ^^ 프로그래밍 만세🙌

이것으로 릴레이 종결...

 
이것으로 자기유지회로도 종결..

 

그리고 자기유지를 SET/RESET 명령어를 통해서도 간단하게 제어가 가능했다.

(하지만 회로도가 복잡해질수록 그냥 자기유지회로를 만드는게 오히려 직관적인 것 같기도..)

 
인터록 회로 : 하나가 작동하면 나머지 하나를 막는 회로이다.

인터록을 하면서 M(릴레이)를 자기유지하고, 그것을 상대의 회로를 막는데에 b접점으로 넣어 쓰고있다.

이 방식이 굉장히 나에게는 신선했는데, LED OFF도 이렇게 b접점으로 막는 방식으로 구현하는 게 코딩의 True/False를 주는 것과 전혀 다르게 전기적으로 흐름을 끊는다는게 엄청 와닿았기 때문이다.😮

 

3) PLC 결선

PLC 프로그램을 위한 결선은 버튼, LED를 PLC 포트와 연결해두고, 이 중 필요한 부분들을 프로그래밍으로 사용하는 방식으로 하기 때문에 매번 결선을 바꿔주지 않아도 되어서 좋았다.

PLC 포트 결선의 중요점은 앞면 포트들은 OUT(출력) / 뒷면 포트들은 IN(입력)으로, COM을 통해 전원을 공급받아야 한다는 점이 중요하다.

기본 결선으로는 24V 두 개를 COM0>1>2로 연결하는데 하나, 뒷면 COM에 연결하는데 하나를 주고, P40,41,42 포트로 LED를, P01, 02, 03으로 스위치(Push Button)를 연결해주었다.

정말 복잡한데 신기하게도 할수록 익숙해지고 있다..🐢


3. Timer

이번 주 내용의 꽃은 아무래도 Timer와 Counter 였다.😹

타이머는 이름에서 느껴지듯이, 시간 경과에 따라 동작을 수행하도록 설정해둘 수 있는 장치이다.

Timer의 종류
- TON (On delay) : N초 뒤에 켜짐, 예약 키기 / 예약 끄기 가능
- TOFF(Off delay) : 버튼 누르자마자 LED 들어오고, 떼고부터 시간 흘러서 불도 꺼짐
- TMR (적산 on delay) 떼더라도 입력값을 기억하여 더함
- TMON 입력을 여러번 넣다해도 첫 입력 시간에서부터 설정 시간이 지나면 꺼짐 ex) 중앙제어시스템
- TRTG Retriggerable : TMON과 비슷하지만 입력이 다시 들어오면 초기화 다시 시작


1) One Shot Timer (예약끄기)

버튼(P0)을 누르면 타이머 T1이 시작됨과 동시에 M0을 통해 LED(P40)가 들어오고, 5초가 지나 T1이 활성화되면 b접점이던 T1이 떼지면서 타이머 초기화, 불도 꺼진다. -> 예약 끄기

M0은 자기유지를 위한 릴레이 : 타이머를 위해서는 자기유지가 필수라는 것을 꼭 기억하도록 해요👻

 
2) DC모터

타이머를 통해 DC모터를 제어하는 연습!

카이로스 2기에서 제공한 서보모터를 PLC에 연결하기 위해 전선 납땜을(!) 진행했다.😲

정말 초등학생때..? 이후로 처음 해보는데 강사님의 전문적인 설명 하에 너무 예쁘게 잘되어서 매우 만족😊 


모터를 정방향/역방향으로 돌리기 위한 회로는 아래와 같이 구성하였다.

중요한 점은 한 방향으로 돌릴때는 다른 방향을 지시하는 버튼이 안먹도록 인터락을 사용했다는 점!

 

모터 돌려돌려도 완료! (영상)


4. Counter

카운터도 이름처럼 숫자를 세어주는 기능이다.

예를 들어 버튼 누름에 카운터를 연결해두면 버튼이 눌릴때마다 카운트가 올라간다.

카운터의 종류
- CTU (Up counter) : 누를수록 올라감
- CTD (Down counter) : 누를수록 내려감
- CTUD (Up down counter) : 조건1이면 올라가고 조건2면 내려감
- CRT (Ring counter) : 누를수록 올라가되 최대값을 넘으면 초기값으로 돌아감

 

아두이노를 할때는 버튼 1회 누른것도 여러번 값이 올라가서 Flag 처리 해주는 등 번거로움이 있었는데, 카운터가 별도로 있으니 제어할때 정말 편했다!🙆

특히 Positive / Negative로 버튼 눌림/떼어짐도 각자 제어가 가능해서 활용도가 높았다.

아래는 CTUD를 이용한 가감에 따른 LED 점등 영상이다.


5. 비교명령(조건문)

타이머와 카운터를 잘 사용하기 위해서는 조건문을 활용하는 것이 중요하다.

조건문은 F10에서 불러오는 비교연산자를 사용하면 되는데, 일반적인 비교연산자 외에 >=3, <=3을 통해 특정 범위 내에 값이 있거나, 범위 앞 뒤 값을 지정할 수 있다.

이렇게 해서 타이머 현황이나 카운터 현황을 원하는 값 사이일때 action 시행을 관리할 수 있다.😏

 

지금까지 배운 것을 종합하면 실생활에 가까운 예제도 구현할 수 있다.
아래 코드는 신호등을 표현한 것으로, 12초짜리 타이머를 차량/보행자를 구분하여 신호를 부여하였다. 

카이로스 2기 PLC 수업에서 강사님께서 정말 많은 예시 문제들을 주셔서 결선과 프로그래밍을 모두 많이 연습할 수 있었다! 확실히 역시 삽질할수록 실력이 는다.🌵


6. MOV

마지막으로, 전송명령인 MOV이다.

MOV명령어 + S(Source Data) + D(Destination Data) : Source 데이터를 -> Destination 데이터로 전송한다.

아래 예시는 hex (16진수) 기준으로, 받는 입장에서는 그 hex 값을 각각의 비트로 봐서 해당하는 포트를 ON 한다.

EX) MOV h00F3 P004
- h00F3 : 0000 0000 1111 0011
- P004 (P0040~P0047) : 40, 41, 44, 45, 46, 47번 LED ON

EX2) MOV h0008 P004
- h0008 : 0000 0000 0000 1000 > 43번 LED ON

 

MOV를 타이머나 카운터와도 함께 쓸 수 있는데, 아래 예시는 MOV로 타이머 값을 조정하는 코드이다.

- MOV 10 T001 : 10을 T1으로 전송하므로, T1 타이머가 0부터가 아닌 10부터 시작되도록 한다.

 

 

PLC 1차 학습 후기👀

- 레더 프로그램 신기하다! 회로도에 익숙하지 않은 나에게 회로에 대한 감을 많이 키워줄 수 있는 방식인 것 같다. 보기에 직관적이기도 하고. 다만 중간중간 if 문 쓰고싶은 순간이 얼마나 많았던가.. 😇

- 웹 개발과 다르게, 하드웨어와 함께하는 코딩은 '시간'을 정말 중요하게 생각하는 것 같아서 신기했다. 애초에 웹은 loop가 계속 돌지도 않고, 시간보다 어떤 행위에 따른 액션이(API 등) 더 비중이 컸던 느낌이랄까.. 하드웨어는 정말 시간 제어가 중요하구나 싶은? 아두이노 millis.. STM Clock.. 이제.PLC Timer까지 

- 결선은 꼬이면 답이 없다.. 당연하지만 처음부터 잘하는게 최선, 침착함이 생명이다.🙏

- 다음주부터 진행되는 큰 PLC에서는 어떤 차이가 있을지 다뤄보고싶다!

 

 

🌱 카이로스 2기에서 배우는 STM32가 궁금하다면?

https://bagjo2884.tistory.com/20

 

[카이로스2기] STM32 기초 : 실무에서 쓰는 마이크로 컨트롤러 배우기

3D 모델링을 뒤로하고, 다시 배선과 코딩의 시간이 돌아왔다!특히 이번에 배우는 STM32는 어린 친구들부터 접하는 아두이노와 다르게 현업에서 많이 사용하는 마이크로 컨트롤러라고 하여 기대가

bagjo2884.tistory.com

 

다음 시간에는 PLC 2차가 이어집니다.😺