“명령어도 다 외웠고, 타이머/카운터도 쓸 줄 아는데… 왜 실제 로직을 짜면 설비가 내 생각대로 안 움직일까요?”
PLC를 처음 접하는 분들이 현장에서 가장 당황하는 순간입니다. 분명히 로직은 맞게 짠 것 같은데, 출력이 안 나가거나 반대로 정지가 안 되는 상황이 벌어지죠. 범인은 대개 SET/RST의 남용이나 PLC 특유의 스캔 구조에 대한 오해 때문입니다. 오늘은 로직이 꼬이는 근본적인 원인과 이를 해결하는 ‘진짜’ 실무 기술을 파헤쳐 봅니다.
1. 일반 코일 vs 자기유지 vs SET/RST 결정적 차이
로직 상태를 제어하는 방법은 크게 세 가지입니다. 특히 명령어의 특성과 사용하는 디바이스의 속성(일반/래치)을 구분하지 못하면 로직은 반드시 꼬이게 됩니다.

📊 로직 유지 방식 비교 (OUT vs 자기유지 vs SET/RST)
| 구분 | 일반 코일 (OUT) | 자기유지 (Self-Holding) | SET / RST 명령어 |
| 동작 방식 | 조건 ON 시 출력, OFF 시 즉시 소자 | 조건 + 자기 접점으로 상태 유지 | SET 시 ON 고정, RST 전까지 유지 |
| 상위 조건 영향 | 상위 조건(MC 등) 끊기면 즉시 OFF | 상위 조건(MC 등) 끊기면 함께 OFF | 상위 조건 끊겨도 ON 상태 유지 |
| 전원 재투입 시 | 초기화됨 (OFF) | 초기화됨 (OFF) | 디바이스 속성에 따라 다름 |
| 제어 성격 | 기본 제어 (가장 권장) | 조건 기반 유지 | 강제 유지 (상태 기억) |
💡 여기서 잠깐! SET/RST와 래치(Latch)는 다릅니다.
- SET/RST: 한 번 신호가 들어오면 계속 켜져 있게 만드는 ‘명령어’입니다.
- 래치(Latch): 전원이 꺼져도 값을 기억하는 ‘메모리 영역(L, S 등)’입니다.
- 주의: 일반 비트(M)를
SET하면 전원 OFF 시 꺼지지만, 래치 비트(L)를SET하면 전원을 껐다 켜도 설비가 바로 돌아가 버립니다. 이 차이를 모르면 사고 납니다.
M, L 같은 비트 디바이스 차이가 헷갈린다면 아래 글을 먼저 보고 오시면 이해가 훨씬 쉽습니다.
👉 [실무] X·Y·M·L·B 트러블 없이 구분하는 핵심 기준
[한 줄 직설]
“OUT은 조건 따라 움직이고, 자기유지는 조건 붙잡고 버티고, SET은 누가 꺼주지(RST) 않으면 끝까지 산다.”
👉 엔지니어 한마디
“SET은 편해서 쓰는 게 아니라, 책임지고 끌 수 있을 때만 쓰는 명령어다.”
2. 🚨 현장 사례: 멈추지 않는 설비의 공포
실제 현장에서 설비가 한 번 동작한 후 정지가 안 되고 계속 유지되는 문제가 발생했습니다.
확인 결과, SET으로 출력을 살려놓았는데 특정 공정 조건에서 RST 신호가 도달하지 못하는 구조였습니다.
더 심각한 것은 마스터 코일(MC) 영역 안에 SET을 사용한 경우였습니다. 마스터 코일이 오프(OFF)되어 상위 인터락이 끊겼으므로 전체 로직이 죽었다고 생각했지만, SET으로 살려놓은 비트는 메모리에 그대로 남아 있어 예상치 못한 타이밍에 설비가 다시 동작하는 위험천만한 상황이 연출되었습니다.
작업자가 정지 버튼을 눌러도 로직이 풀리지 않아 결국 전원을 내려야만 멈췄던 이 사례처럼, SET 명령어를 쓸 때는 반드시 ‘어떤 최악의 상황에서도 리셋이 걸리는가?’를 자문해야 합니다.
3. 스캔 구조가 로직을 배신할 때
PLC는 위에서 아래로, 왼쪽에서 오른쪽으로 한 줄씩 읽습니다. 이 ‘찰나의 시간’ 차이가 로직의 성패를 가릅니다.
- 순서의 중요성
- 연산 결과가 다음 줄에 바로 반영되는 특성을 무시하면, 타이머나 카운터가 한 스캔 늦게 동작하거나 신호를 씹는 현상이 발생합니다.
- 이중 코일의 변형
- 위에서
SET을 해도 아래에서 다른 조건으로RST를 해버리면 PLC는 최종 스캔 결과인RST만 수행합니다. 내가 짠 로직의 ‘최종 승자’가 누구인지 스캔 방향을 따라가며 확인해야 합니다.
- 위에서
📌 실무 로직 빠른 점검 체크리스트
작성하신 로직이 불안하다면 발행 전 다음 4가지를 꼭 체크해 보세요.
- [ ] 일반 코일(OUT)로 해결 가능한 동작을 굳이 SET/RST로 짜지 않았는가?
- [ ] 래치(Latch) 영역에 SET을 썼다면, 전원 재투입 시 설비가 튀어나가지 않는가?
- [ ] 마스터 코일(MC) 해제 시에도 반드시 유지되어야 하는 신호인지 확인했는가?
- [ ] 로직 순서(스캔 방향)에 따라 상단 조건이 하단 조건에 의해 덮어쓰여지지 않는가?
👉 오늘 내용 3줄 요약
- 자기유지는 상위 조건 끊기면 같이 죽지만, SET은 누가 꺼줄 때까지 끝까지 살아 있다.
- SET/RST 남발하면 나중에 에러 났을 때 범인 못 찾고 한참 헤멥니다.
- 스캔 구조 모르면 내가 짠 로직이 아래 줄에서 덮어쓰여도 왜 안 되는지 평생 모릅니다.
📌 결론
“명령어 하나가 설비를 살릴 수도, 박살 낼 수도 있습니다.”
특히 SET은 편리한 만큼 리셋(RST) 조건을 칼같이 설계해야 한다는 것, 그리고 상위 인터락(MC)과 만났을 때 어떻게 동작하는지 모르면 사고 난다는 것, 이거 하나만 명심해도 실무 로직의 80%는 성공입니다.
[ 다음 포스팅 예고]
방금 말한 ‘상위 조건’의 정체, 바로 마스터 코일(MC/MCR)입니다. 로직 수십 줄을 일일이 인터락 거는 게 아니라, 마스터 코일 하나로 통째로 살리고 죽이는 법을 알아야 합니다.
특히 이번 글에서 강조한 SET 명령어가 MC 영역 안에 있을 때 왜 위험한지, 그 실무 디테일을 싹 정리해 드립니다.