PLC 1일차 : PLC 기본 구조와 Scan Cycle, 처음부터 쉽게 이해하기

PLC의 CPU, 입·출력 모듈, 센서와 액추에이터 사이를 Scan Cycle로 연결한 개념 다이어그램을 표현한 이미지입니다.

PLC 기본 구조와 Scan Cycle, 처음부터 쉽게 이해하기

한눈에 보는 요약

PLC(Programmable Logic Controller)는 공장 자동화 설비를 제어하기 위해 사용되는 산업용 컴퓨터입니다. 센서에서 들어오는 신호를 읽고, 사용자가 작성한 프로그램대로 논리 계산을 수행한 뒤, 모터·실린더·램프와 같은 장치를 구동합니다.

PLC 내부에서는 CPU가 Scan Cycle(스캔 사이클)이라는 일정한 반복 루프를 계속 돕니다. 이 루프는 “입력 값 읽기 → 프로그램 실행 → 출력 갱신 → 통신/진단” 순서로 진행되며, 이 한 바퀴 도는 데 걸리는 시간이 Scan Time(스캔 시간)입니다.

Scan Cycle을 이해하면 “왜 버튼을 눌렀는데 살짝 늦게 동작하는지”, “왜 아주 짧은 펄스 신호는 가끔 놓치는지”, “타이머 설정값을 어느 정도로 잡아야 안전한지”와 같은 현장 의문에 답을 찾을 수 있습니다.

본 글에서는 PLC의 기본 하드웨어 구조와 Scan Cycle의 단계별 동작을 쉽게 설명하고, 실제 현장에서 어떤 점을 주의해서 설계·디버깅해야 하는지 실무 관점까지 함께 정리합니다.

목차


핵심 포인트

  • PLC는 산업용 제어를 위한 특수 컴퓨터로, 릴레이 논리를 대체해 공장 설비를 유연하게 제어합니다.
  • PLC 기본 구조는 전원부, CPU, 메모리, 입출력(I/O) 모듈, 통신 포트, 베이스(랙)로 구성되며, 현장의 센서·액추에이터와 직접 연결되는 부분은 I/O 모듈입니다.
  • Scan Cycle은 입력 스캔 → 프로그램 실행 → 출력 갱신 → 통신/진단 순서로 반복됩니다. 하나의 사이클이 끝나면 다시 처음으로 돌아가는 구조입니다.
  • Scan Cycle 시작 시점의 입력 값이 메모리에 복사되며, 한 사이클 동안은 그 스냅샷을 기준으로 프로그램이 실행된다는 점이 중요합니다.
  • Scan Time이 길어질수록 장비의 응답 속도는 느려지고, 아주 짧은 펄스 신호는 놓칠 수 있습니다. 따라서 프로그램 구조와 I/O 설계를 통해 Scan Time을 관리해야 합니다.
  • 고속 카운터, 인터럽트(Task) 기능 등을 활용하면 빠른 신호도 안정적으로 처리할 수 있으며, 시뮬레이터와 모니터 화면을 통해 Scan Cycle을 눈으로 확인하며 학습하는 것이 좋습니다.

상세 설명

1. PLC란 무엇인가

PLC(Programmable Logic Controller)는 말 그대로 “프로그램이 가능한 논리 제어기”입니다. 과거에는 릴레이와 타이머, 접점 회로를 사용해 설비를 제어했지만, 회로 변경이 어렵고 유지보수가 복잡했습니다. PLC는 이를 소프트웨어(프로그램)로 대체함으로써, 공장 설비를 훨씬 유연하게 변경·확장할 수 있게 해주었습니다.

PLC는 다음과 같은 특징을 가집니다.

  • 온도, 습도, 진동 등 공장 환경에서도 안정적으로 동작하도록 설계된 산업용 장비입니다.
  • 입력은 센서, 스위치, 버튼 등에서 들어오고, 출력은 모터, 솔레노이드 밸브, 램프 등으로 나갑니다.
  • 내부 프로그램은 래더 다이어그램(LD), 구조적 텍스트(ST), 펑션 블록(FB) 등 IEC 61131-3 표준 언어로 작성되는 경우가 많습니다.

2. PLC 기본 하드웨어 구조

대부분의 PLC는 아래와 같은 공통적인 하드웨어 구조를 가지고 있습니다.

  • 전원 모듈: AC 220V, 110V 또는 DC 24V 전원을 받아 PLC 내부에서 사용하는 안정된 DC 전원으로 변환합니다.
  • CPU 모듈: PLC의 두뇌에 해당하는 부분으로, 프로그램을 실행하고, Scan Cycle을 관리하며, 내부 진단 기능을 수행합니다.
  • 메모리: 프로그램이 저장되는 영역과, 입력·출력 상태, 내부 플래그, 타이머/카운터 값 등이 저장되는 데이터 메모리로 나뉩니다.
  • 입출력(I/O) 모듈: 디지털 입력(DI), 디지털 출력(DO), 아날로그 입력(AI), 아날로그 출력(AO) 등으로 나뉘며, 센서·액추에이터와 직접 연결됩니다.
  • 통신 포트/통신 모듈: 상위 HMI, SCADA, 다른 PLC, 인버터, 로봇 등과 통신하기 위한 포트입니다. (Ethernet, RS-485, 필드버스 등)
  • 베이스/랙(Backplane): 각 모듈을 고정하고, 모듈 간 전원·데이터 신호를 전달하는 역할을 합니다.

현장 관점에서 보면, 센서 → 입력 모듈 → CPU(프로그램) → 출력 모듈 → 모터·밸브·램프 순서로 신호가 흐르며, 이 전체 흐름을 일정한 주기로 반복하는 것이 바로 Scan Cycle입니다.

3. Scan Cycle의 개념과 흐름

CPU는 전원이 켜져 있는 동안 쉬지 않고 같은 일을 반복합니다. 이 반복 루프 한 바퀴를 Scan Cycle이라고 부르고, 각 사이클은 보통 다음 순서로 진행됩니다.

  1. 입력 스캔(Input Scan)
  2. 사용자 프로그램 실행(Program Execution)
  3. 출력 갱신(Output Update)
  4. 통신 및 내부 진단(Communication & Diagnostics)

이 네 단계가 끝나면 다시 1번 단계로 돌아가며, 이렇게 수 ms~수십 ms 단위로 계속 반복됩니다. 한 번 도는 데 걸리는 시간이 Scan Time입니다. 예를 들어 Scan Time이 10ms라면, 1초에 약 100번 같은 루프가 반복되는 셈입니다.

중요한 점은, 프로그램 실행 중에는 입력 값이 계속 바뀌는 것이 아니라, “사이클 시작 시점에 복사해 둔 값”을 사용한다는 것입니다. 이 구조를 이해하면, 왜 어떤 신호는 가끔 인식되지 않는지, 왜 응답이 미세하게 늦는지 논리적으로 설명할 수 있습니다.

4. Scan Cycle 단계별 동작 이해

각 단계에서 어떤 일이 일어나는지 조금 더 구체적으로 살펴보면 다음과 같습니다.

  • 1) 입력 스캔 – 모든 입력 모듈의 현재 상태를 읽어와 내부 메모리(입력 이미지 영역)에 저장합니다. 스위치 ON/OFF, 센서 감지 여부, 아날로그 값 등을 이때 한 번에 복사합니다.
  • 2) 프로그램 실행 – 래더 다이어그램, ST 등으로 작성한 사용자 프로그램을 네트워크/블록 순서대로 실행합니다. 이때 참조하는 입력 값은 방금 복사한 입력 이미지이며, 연산 결과는 내부 비트, 워드, 타이머·카운터 값, 출력 이미지 영역 등에 반영됩니다.
  • 3) 출력 갱신 – 프로그램 실행 결과로 만들어진 출력 이미지 값을 실제 출력 모듈에 전송합니다. 이때 모터 ON/OFF, 밸브 개폐, 램프 점등 등 실제 하드웨어 상태가 바뀝니다.
  • 4) 통신·진단 – 상위 시스템과 데이터 교환, 다른 PLC와 링크 통신, 자체 진단(에러 체크 등)을 수행합니다. 일부 PLC는 통신을 별도 Task로 처리하기도 합니다.

이 과정을 반복하면서, PLC는 마치 사람이 “주변을 둘러보고 → 판단하고 → 손과 발을 움직이는” 행동을 매우 빠른 속도로 계속 수행하는 것과 비슷한 역할을 합니다.

Scan Cycle 단계 요약 표

아래 표는 Scan Cycle의 각 단계에서 어떤 일이 일어나는지, 실무에서 어떤 점을 기억해야 하는지 정리한 것입니다.

단계 동작 내용 실무 포인트 예시
입력 스캔 센서·스위치 등의 현재 상태를 읽어 내부 입력 메모리에 복사 사이클 시작 시점의 스냅샷이므로, 아주 짧은 펄스는 놓칠 수 있음 포토센서 ON 시간이 Scan Time보다 짧으면 인식 실패 가능
프로그램 실행 입력 메모리 값과 내부 상태를 기반으로 논리 연산 수행 연산량이 많을수록 Scan Time 증가, 조건 분기 구조를 효율적으로 설계 타이머, 카운터, 연산 블록, 조건문 등 실행
출력 갱신 출력 메모리 값을 실제 출력 모듈에 반영 출력 변경은 사이클마다 한 번 일어난다고 보는 것이 안전 모터 ON, 밸브 열림, 스택라이트 점등 등
통신·진단 상위 시스템과 데이터 교환 및 자체 진단 수행 통신량이 많으면 Scan Time이 늘어날 수 있어 주기 설정 필요 HMI 태그 업데이트, SCADA 로깅, 에러 코드 확인

5. Scan Time과 설계 시 주의사항

Scan Time은 “한 번의 Scan Cycle을 완료하는 데 걸리는 시간”입니다. 이 값은 PLC 제조사, CPU 성능, 프로그램 길이, 통신량, I/O 수 등에 따라 달라집니다. 일반적으로 몇 ms에서 수십 ms 수준이지만, 프로그램이 복잡해질수록 늘어날 수 있습니다.

설계 시에는 다음 사항을 고려하는 것이 좋습니다.

  • 목표 응답 시간 정의 – 예를 들어 비상 정지(E-STOP)는 50ms 이내, 일반 센서 응답은 200ms 이내 등, 설비별로 목표 응답 시간을 정합니다.
  • Scan Time 모니터링 – 개발 툴의 진단 화면에서 현재 Scan Time, 최댓값, 최솟값을 확인해 목표 응답 시간 대비 충분히 여유가 있는지 확인합니다.
  • 빠른 신호 처리 전략 – 에ン코더 펄스처럼 매우 빠른 신호는 고속 카운터 모듈이나 인터럽트 Task를 사용합니다. 일반 Scan Cycle만으로 처리하려 하면 신호 손실이 생길 수 있습니다.
  • 코드 최적화 – 사용하지 않는 타이머·카운터, 중복 연산, 과도한 통신 요청 등을 줄여 Scan Time을 안정적으로 유지합니다.

결론적으로, Scan Time은 단순한 숫자가 아니라 “설비의 반응성”을 좌우하는 핵심 지표입니다. 설계 초기부터 요구 성능을 정의하고, 프로그램 구조를 그에 맞게 설계하는 것이 중요합니다.


코드 예시로 이해하는 Scan Cycle

간단한 모터 제어 예시를 통해 Scan Cycle이 프로그램 동작에 어떤 영향을 주는지 살펴보겠습니다. 아래 예시는 IEC 61131-3 구조적 텍스트(ST) 스타일로 표현한 가상의 코드입니다.

 (* 가상의 태그 정의 *) (* 입력 *) StartButton : BOOL; (* 기동 버튼, 유지형 스위치 *) StopButton : BOOL; (* 정지 버튼 *) EmergStop : BOOL; (* 비상 정지 스위치 *) (* 출력 *) MotorOutput : BOOL; (* 모터 구동 출력 *) (* 내부 메모리 *) MotorLatch : BOOL; (* 모터 자기유지 상태 *) (* 메인 프로그램 *) IF EmergStop = TRUE THEN (* 비상 정지 시 무조건 모터 OFF *) MotorLatch := FALSE; ELSIF StopButton = TRUE THEN (* 정지 버튼이 눌리면 유지 해제 *) MotorLatch := FALSE; ELSIF StartButton = TRUE THEN (* 기동 버튼이 눌려 있는 동안 모터 ON 상태로 래칭 *) MotorLatch := TRUE; END_IF; (* 래칭 상태를 실제 출력에 반영 *) MotorOutput := MotorLatch; 

위 프로그램은 Scan Cycle마다 한 번씩 실행됩니다. 각 사이클의 시작에서 입력 스캔을 통해 StartButton, StopButton, EmergStop 상태가 메모리에 복사되고, 그 값을 기준으로 IF 문이 평가됩니다. 사용자가 StartButton을 짧게 눌렀더라도, 적어도 한 번의 Scan Cycle 동안 ON 상태를 유지했다면 해당 사이클에서 MotorLatch가 TRUE로 설정되고, 이후 버튼을 떼어도 MotorLatch를 통해 모터가 계속 구동됩니다.

반대로 StartButton ON 시간이 특정 Scan Time보다 짧다면, 어떤 사이클에서는 ON 상태가 한 번도 스캔되지 않아 모터가 켜지지 않을 수도 있습니다. 이런 이유로 매우 짧은 펄스를 처리할 때는 일회성 펄스 캡처(원샷), 인터럽트 입력, 고속 카운터 등 Scan Cycle을 보완하는 기능을 함께 사용해야 합니다.

실무에서 Scan Cycle 이해하고 활용하는 단계

  1. 현재 사용하는 PLC와 개발 환경 파악
    현장에서 사용 중인 PLC 제조사와 모델, 프로그램 언어(LD/ST 등)를 먼저 확인합니다. 개발 툴에서 Scan Time, 진단 화면, 모니터 기능을 어디서 확인할 수 있는지 메뉴를 찾아봅니다.
  2. Scan Time 모니터링 기능 켜기
    PLC에 온라인 접속한 뒤, Scan Time(현재값, 최대값, 평균값)을 표시하는 화면을 켜 두고 설비를 가동해 봅니다. 설비 상태에 따라 Scan Time이 어떻게 변하는지 관찰하면, 프로그램 부하가 언제 커지는지 감을 잡을 수 있습니다.
  3. 간단한 테스트 프로그램 작성
    테스트용 램프를 하나 잡고, “0.5초 ON, 0.5초 OFF”와 같이 주기적으로 깜박이는 프로그램을 만들어 봅니다. Scan Time이 길어지면 깜박임이 불규칙해지거나 지연되는 현상이 나타날 수 있습니다.
  4. 빠른 신호에 대한 실험
    포토센서나 푸시 버튼을 이용해 매우 짧게 ON/OFF를 반복해 보고, 일반 입력과 고속 카운터/인터럽트 입력에서 인식률 차이를 비교합니다. 이를 통해 어떤 경우에 Scan Cycle만으로는 부족한지 체감할 수 있습니다.
  5. 실제 프로젝트에 반영
    실제 설비 프로그램에서 비상 정지, 안전 관련 신호, 고속 센서, 중요한 타이밍 제어 부분을 중심으로 Scan Cycle과 Scan Time을 다시 점검합니다. 필요하다면 인터럽트 Task, 고속 모듈, 필터링 시간을 조정해 안정성과 신뢰성을 높입니다.

추가로 생각해볼 점

  • 안전 회로(E-STOP, 안전 릴레이 등)는 PLC 로직뿐 아니라 하드웨어 차단 회로까지 포함하여 설계하는 것이 좋습니다. Scan Cycle에만 의존한 안전 설계는 위험할 수 있습니다.
  • 프로젝트 규모가 커질수록 Task(주기 Task, 이벤트 Task)를 적절히 나누어, 긴 주기가 허용되는 로직과 짧은 주기가 필요한 로직을 분리하는 것이 Scan Time 관리에 유리합니다.
  • 개발 초기에 Scan Time, 응답 시간 목표, 고속 신호 처리 전략을 명확히 정의해 두면, 후반부 디버깅 부담이 크게 줄어듭니다.
Reactions

댓글 쓰기

0 댓글