PLC 래더 프로그래밍을 하는 과정에서 반복적인 회로가 필요할 때가 있습니다.
제목에 '인덱스 레지스터'라는 생소한 용어가 하나 보일텐데,
이 레지스터는 값을 저장하는 레지스터가 아닌 메모리의 위치를 저장하는 레지스터라고 할 수 있겠습니다.
대충 PC 계열의 프로그래밍에서는 '포인터'라는 개념과 상당히 유사합니다.
이 '포인터'라는 개념만큼 어렵지는 않지만, 나름 사람에 따라 난이도가 있다고 느낄 수도 있습니다.
하지만 알아두면 프로그래밍이 상당히 간결해지고 편리해지는 장점이 있죠.
인덱스 레지스터는 총 IR0~IR15까지 넉넉하게 제공이 되고,
태스크마다 IR/DR을 공유할 것인지, 별도로 사용할 것인지에 대한 부분을 PLC 설정에서 바꿀 수 있습니다.
간단하게 예를 들기 위해서 예제 회로 하나를 준비했습니다.
반복 회로 (사진 1)
위 사진을 보시면 똑같은 형태의 회로가 반복되고 있습니다.
이 회로를 인덱스 레지스터와 반복문을 이용하여 다음과 같은 형태로 줄일 수 있습니다.
인덱스 레지스터를 사용한 반복 회로 (사진 2)
처음부터 각 렁(Rung)마다 하나씩 설명드리자면...
Rung 0 : IR0 (첫번째 인덱스 레지스터)에 0.00의 주소값을 대입합니다. (MOV가 아닌 MOVR을 사용합니다.)
Rung 1 : IR1 (두번째 인덱스 레지스터)에 W0.00의 주소값을 대입합니다.
Rung 2 : FOR 명령어를 이용해 회로를 반복합니다. 반복 횟수는 11번으로 지정해줍니다. (0.00 ~ 0.10까지 총 11개)
Rung 3 :
인덱스 레지스터의 핵심입니다. 회로의 모양은 사진 1과 같은 회로입니다.
다만 여기서 '콤마(,) 기호'를 통해서 IR0이 가리키는 주소값을 받아옵니다.
따라서 ,IR0는 IR0가 가리키는 주소값을 불러오게 됩니다.
여기서 맨 뒤에 '더하기(+) 기호'를 추가하여 오토 인크리먼트(Auto Increment; 자동 증가) 옵션을 사용하면 ,IR0에서 값을 불러온 후 IR0가 다음 주소값을 가리키도록 할 수 있습니다.
따라서 ,IR0+는 IR0가 가리키는 주소값을 불러오고 다음 주소값을 자동으로 가리키게 됩니다.
Rung 4 : ++L 명령어를 사용해 IR1의 주소값을 하나 증가시킵니다.
Rung 5 : FOR 명령어 반복의 마지막을 나타내는 NEXT 명령어입니다.
여기서 모두들 왜 IR0는 오토 인크리먼트로 다음 주소값을 가리키면서, IR1은 따로 ++L 명령어를 사용하여 다음 주소값을 가리키냐가 가장 궁금하실 것이라고 생각이 됩니다.
래더 프로그램의 특성 상 순차적으로 실행이 되고, 필요없는 부분은 건너뛰기 때문에 ,IR0 ,IR1 모두 꺼져있거나, 리셋 스위치가 켜져 있는 경우에는 출력부인 [OUT ,IR1]이 실행되지 않습니다.
출력부 자체가 실행되지 않으므로 오토 인크리먼트를 적용할 경우에는 IR1은 증가하지 않고 IR0만 증가하게 되어 회로가 꼬이게 됩니다.
'ForBeginner' 카테고리의 다른 글
6-1. 무접점 릴레이 SSR, Solid State Relay 활용 및 장점과 단점 (1) | 2024.12.11 |
---|---|
3-8. PLC 회로 설계 DI, DO, DC 24V 사용해야 하는 이유 (0) | 2024.12.11 |
4-9. RS-485 2선식 연결과 4선식 연결 방식 (RS485 4w to 2w) (1) | 2021.12.02 |
4-8. Serial Communications Protocols - RS-485 (0) | 2021.12.02 |
3-6. PLC 프로그램밍 순서 (0) | 2021.08.02 |