PLC 메모리 구조 완전 정리 — 입출력·내부 릴레이·레지스터 3영역 한눈에
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
PLC 메모리 구조 완전 정리 — 입출력·내부 릴레이·레지스터
입출력 영역(I/O), 내부 릴레이(M), 데이터 레지스터(D)의 역할과 주소 체계를 블록 다이어그램과 함께 한눈에 이해하고, 실무 배선 오류와 디버깅 시간을 획기적으로 줄여보세요.
PLC 메모리 구조란? — 설계의 출발점
PLC(Programmable Logic Controller) 메모리 구조는 제어 프로그램이 외부 세계와 어떻게 데이터를 주고받고 내부적으로 처리하는지를 정의하는 핵심 아키텍처입니다. PLC 메모리는 크게 입출력 영역(I/O Area), 내부 릴레이 영역(Internal Relay), 데이터 레지스터 영역(Data Register)으로 구분되며, 각각의 역할과 주소 체계가 명확히 분리되어 있습니다. 이 구조를 정확히 이해하지 못하면 입출력 신호가 올바르게 매핑되지 않아 기계가 오동작하거나, 변수 주소 충돌로 예상치 못한 출력이 발생할 수 있습니다. 특히 현장 디버깅 시 메모리 맵을 모르면 원인 파악에 수 시간이 소요되므로, 반드시 PLC 매뉴얼의 메모리 맵 페이지를 숙지한 후 프로그램 작성을 시작해야 합니다.
PLC는 CPU 유닛 내부에 프로그램 메모리, 데이터 메모리, 시스템 메모리를 별도로 구분하여 운영합니다. 프로그램 메모리에는 사용자가 작성한 래더 다이어그램(LD)이나 구조화 텍스트(ST)가 저장되고, 데이터 메모리에는 실시간으로 갱신되는 I/O 상태·중간 연산 결과·레지스터 값이 기록됩니다. 스캔(Scan) 방식으로 동작하는 PLC는 한 사이클마다 입력 읽기 → 프로그램 실행 → 출력 쓰기 순서로 메모리를 갱신하므로, 각 영역이 어느 타이밍에 갱신되는지 파악하는 것이 프로그램 신뢰성의 핵심입니다. 제조사마다 메모리 어드레스 표기 방식(Mitsubishi: X/Y/M/D, Siemens: I/Q/M/DB, Omron: CIO/W/D)이 다르지만 기본 개념은 동일합니다.
입출력 영역 (I/O)
외부 센서·버튼·릴레이·인버터와 직접 연결되는 물리적 신호 영역입니다. 미쓰비시 기준 X0~X1FF(입력), Y0~Y1FF(출력)이며, 스캔 사이클 시작 시 입력 이미지가 래치됩니다. 주소 중복 사용 시 출력이 충돌하므로 I/O 할당표 작성이 필수입니다.
내부 릴레이 (M)
프로그램 내부의 논리 연산만을 위한 가상 접점 메모리 영역입니다. 물리 배선이 전혀 없어 노이즈 영향을 받지 않으며, 접점을 몇 번이든 재사용할 수 있습니다. 자기유지·인터록·타이머 보조 로직에 광범위하게 활용됩니다.
데이터 레지스터 (D)
16비트(또는 32비트 쌍) 정수 데이터를 저장하는 워드(Word) 단위 메모리입니다. 타이머 설정값·현재값, 카운터 누적값, 아날로그 입력 스케일 결과, 레시피 파라미터 등을 보관합니다. 전원 차단 후에도 값을 유지하는 정전 유지 레지스터(Latch D) 구간이 별도로 존재합니다.
특수 릴레이/레지스터 (SM/SD)
PLC 시스템 상태를 나타내는 특수 내부 릴레이(SM)와 특수 데이터 레지스터(SD)는 CPU가 자동으로 관리합니다. 1초 클록 펄스(SM412), 스캔 시간(SD520), 에러 코드(SD0) 등이 여기에 해당하며, 읽기 전용과 읽기/쓰기 구분을 매뉴얼로 확인해야 합니다.
💡 스캔 사이클(Scan Cycle)과 메모리 갱신
스캔 사이클이란 PLC가 입력 읽기(Input Refresh) → 프로그램 실행(Program Execution) → 출력 쓰기(Output Refresh) → 주변기기 서비스(Service)를 한 번씩 반복하는 주기를 말합니다. 일반적인 스캔 타임은 1~50ms이며, 프로그램 용량과 명령어 수에 비례해 길어집니다. 스캔 사이클 중 입력 읽기 단계에서 X 영역 전체가 한꺼번에 래치(Latch)되므로, 스캔 중 외부 신호가 변해도 해당 사이클에는 반영되지 않습니다. 이 특성을 이해해야 고속 신호 처리 시 인터럽트(Interrupt) 루틴과 일반 스캔의 차이를 올바르게 설계할 수 있습니다.
PLC 메모리 구조 전체 블록 다이어그램
아래 블록 다이어그램은 PLC CPU 유닛 내부의 메모리 구조와 외부 I/O 모듈 간의 데이터 흐름을 한눈에 보여줍니다. 좌측에는 물리적 입력 신호(센서·버튼)가 입력 모듈을 통해 X 영역으로 들어오고, 우측에는 Y 영역에서 출력 모듈을 거쳐 액추에이터·인버터로 신호가 전달됩니다. 중앙의 CPU는 M 영역(내부 릴레이)과 D 영역(데이터 레지스터)을 이용해 프로그램 로직을 처리하며, 특수 영역(SM/SD)은 시스템 정보를 실시간 제공합니다. 전체 데이터 흐름은 스캔 사이클의 순서에 따라 단방향으로 갱신됩니다.
그림1. PLC 메모리 구조 전체 블록 다이어그램 — 입력(X)·출력(Y)·내부 릴레이(M)·레지스터(D)·특수영역(SM/SD) 구성
✅ 블록 다이어그램 읽는 포인트
물리적 입력 신호는 반드시 입력 모듈을 거쳐 X 영역에 래치되므로, 프로그램에서 X 접점을 읽는 시점은 스캔 사이클 시작 기준임을 기억하세요. M 영역은 X·Y 영역 사이의 논리 가공 공간으로, 여기서 자기유지·인터록·조건 분기를 수행합니다. D 영역과 T/C 영역은 수치 데이터를 보관하며, 결과를 M이나 Y에 간접적으로 반영하는 구조입니다. SM/SD는 CPU가 자동으로 갱신하므로 사용자가 무단으로 쓰기하면 시스템 오류가 발생할 수 있습니다.
입출력 영역(I/O Area) — 외부 신호 매핑 구조
입출력 영역은 물리적 I/O 단자와 PLC 메모리 주소를 1:1로 연결하는 영역으로, 프로그램에서 X0를 읽으면 실제 0번 입력 채널의 신호가 반영됩니다. 미쓰비시 MELSEC-Q 기준으로 입력은 X0000~X01FF(8진수 표기), 출력은 Y0000~Y01FF 범위를 갖습니다. I/O 할당 시 슬롯(Slot) 번호와 채널 번호를 정확히 매핑하지 않으면, 예를 들어 2번 슬롯의 0번 채널이 X020이 아니라 X040이 될 수 있으므로 반드시 GX Works3 등의 파라미터 설정에서 I/O 할당표를 확인해야 합니다. 입출력 영역의 비트(Bit)는 개별적으로 읽고 쓸 수 있으며, 16개 비트를 묶은 워드(Word) 단위로도 접근이 가능하여 데이터 전송 효율을 높일 수 있습니다.
그림2. 입출력 영역 매핑 구조 — 물리 채널과 X·Y 메모리 주소 1:1 대응 관계
⚠️ 입출력 영역 사용 시 주의사항
X 영역은 스캔 사이클 시작 시에만 갱신되므로, 해당 사이클 내에서 외부 신호가 변해도 X 값은 변하지 않습니다. Y 영역은 프로그램에서 읽기도 가능하지만, 출력 모듈이 없는 Y 주소에 쓰면 내부적으로만 처리되어 실제 출력이 발생하지 않으므로 배선과 반드시 일치시켜야 합니다. 또한 8진수 표기(X000, X007, X010, …)를 사용하는 제조사의 경우 X008, X009 같은 주소는 존재하지 않으므로 주소 계산 오류를 특히 주의해야 합니다. 증설 슬롯 추가 시 기존 I/O 할당 주소가 밀릴 수 있으므로, 하드웨어 구성 변경 시 GX Works3의 I/O 할당 파라미터를 반드시 재검토하세요.
내부 릴레이(M 영역) — 가상 접점 활용법
내부 릴레이(Internal Relay, M 영역)는 물리적 배선 없이 프로그램 내부에서만 사용하는 비트 메모리로, 자기유지·인터록·다단 조건·플래그 처리에 핵심적으로 활용됩니다. M0~M7679는 전원 차단 시 초기화되는 일반 내부 릴레이, M7680~M8191은 전원 차단 후에도 값을 유지하는 정전 유지 내부 릴레이(Latch Relay)로 구분됩니다(미쓰비시 Q 시리즈 기준). 하나의 M 코일을 여러 곳의 M 접점(A접점/B접점)으로 제한 없이 재사용할 수 있는 것이 Y 영역과의 가장 큰 차이점입니다. 인터록 회로를 구성할 때 물리 접점이 아닌 M 영역을 활용하면 배선 수를 줄이고 로직 변경도 소프트웨어만으로 즉시 반영할 수 있어 유지보수성이 크게 향상됩니다.
그림3. 내부 릴레이(M0) 자기유지 래더 회로 예시 — X0 기동, X1 정지(b접점), M0 자기유지, Y0 출력
데이터 레지스터(D 영역) — 수치 데이터 저장 구조
데이터 레지스터(Data Register, D 영역)는 16비트 부호 있는 정수(−32768~+32767)를 저장하는 워드 메모리입니다. 두 개의 연속된 D 레지스터(예: D0, D1)를 32비트 쌍으로 사용하면 −2,147,483,648~+2,147,483,647 범위의 더블워드 연산이 가능합니다. 타이머(T) 현재값·설정값, 카운터(C) 현재값·설정값도 내부적으로 D와 동일한 구조의 워드 메모리를 사용하며, GX Works3에서 심볼 테이블을 작성하면 D100 대신 'ConveyorSpeed'처럼 의미 있는 이름으로 관리할 수 있습니다. 레시피(Recipe) 기능을 구현할 때는 D 영역의 특정 구간에 제품별 파라미터를 블록으로 저장하고, BMOV(블록 이동) 명령으로 한 번에 로딩하는 방식이 현장에서 널리 사용됩니다.
그림4. 데이터 레지스터(D)·타이머(T)·카운터(C) 영역 구조 및 활용 예시
레지스터 초기화를 반드시 해야 하는 이유
전원을 차단하면 일반 D 레지스터(D0~D6999)의 값은 소멸하지만, 정전 유지 영역(D7000~D7999)의 값은 배터리 백업으로 유지됩니다. 따라서 프로그램 시작 시 초기화가 필요한 레지스터를 SM400(항상 ON 특수 릴레이)을 이용해 MOVP 명령으로 초기값을 강제 설정하는 로직을 반드시 추가해야 합니다. 초기화를 생략하면 이전 운전 중의 잔류값이 남아 기계가 이상 동작할 수 있습니다. 특히 카운터 현재값과 아날로그 스케일 오프셋 값은 초기화 누락으로 인한 현장 트러블이 빈번하므로 주의하세요.
메모리 영역별 어드레스 범위 및 특성 비교
메모리 영역별 어드레스 범위는 PLC 제조사와 시리즈에 따라 달라지므로 반드시 해당 매뉴얼을 우선으로 확인해야 합니다. 아래 표는 미쓰비시 MELSEC-Q 시리즈를 기준으로 작성한 것이며, 지멘스 S7-1500과 오므론 CJ2의 대응 영역도 함께 정리했습니다. 영역별로 비트(Bit) 단위 접근이 가능한지, 워드(Word) 단위만 가능한지, 읽기 전용인지 여부가 다르므로 프로그램 설계 전 이 특성을 명확히 파악해야 합니다. KEC 232 기준에서는 중요 제어 기기의 상태를 정전 유지 영역에 저장하여 전원 재투입 후 이전 상태를 복원하도록 권고하고 있습니다.
✅ 메모리 영역별 주요 특성
- X 영역(입력): 비트 단위, 읽기 전용, 스캔 시작 시 래치
- Y 영역(출력): 비트/워드, 읽기·쓰기 가능, 스캔 말 갱신
- M 영역(내부): 비트 단위, 읽기·쓰기, 전원 차단 시 초기화
- D 영역(레지스터): 워드 단위, 읽기·쓰기, 정전 유지 구간 별도
⚙️ 메모리 선택 기준
- 외부 센서·스위치 신호 읽기 → X 영역 고정
- 외부 릴레이·인버터 출력 → Y 영역 고정
- 중간 논리·자기유지·인터록 → M 영역 활용
- 수치 연산·타이머 설정·레시피 파라미터 → D 영역 활용
| 메모리 영역 | 기호(Q시리즈) | 역할 | 주소 범위 | 접근 단위 / 특성 |
|---|---|---|---|---|
| 입력 릴레이 | X | 외부 디지털 입력 신호 매핑, 스캔 시작 시 래치 | X0000~X01FF (8진수) | 비트 / 읽기 전용 |
| 출력 릴레이 | Y | 외부 디지털 출력 구동, 스캔 종료 후 갱신 | Y0000~Y01FF (8진수) | 비트·워드 / 읽기·쓰기 |
| 내부 릴레이 | M | 프로그램 내부 논리 연산, 자기유지, 인터록 | M0~M8191 | 비트 / 전원 차단 초기화 |
| 정전 유지 릴레이 | L (또는 M Latch) | 전원 재투입 후 상태 복원 필요 로직 | M7680~M8191 (Latch 설정 시) | 비트 / 배터리 유지 |
| 데이터 레지스터 | D | 수치 데이터 저장, 타이머·카운터 설정값 보관 | D0~D7999 | 워드(16비트) / 읽기·쓰기 |
| 특수 릴레이·레지스터 | SM / SD | CPU 상태(스캔시간·에러코드·클록) 제공 | SM0~SM2047 / SD0~SD2047 | 비트·워드 / CPU 자동 갱신 |
스캔 사이클과 메모리 갱신 동작 원리
PLC 스캔 사이클은 입력 새로고침(Input Refresh) → 프로그램 실행(Program Execution) → 출력 새로고침(Output Refresh) → END 처리·주변기기 서비스(Service Processing)의 4단계로 구성됩니다. 한 사이클이 끝나고 다음 사이클이 시작될 때 입력 X 영역의 전체 이미지가 갱신되며, Y 영역의 출력 이미지는 프로그램 실행 중에 누적된 뒤 사이클 마지막 단계에서 한꺼번에 물리 출력 모듈로 전달됩니다. M 영역과 D 영역은 프로그램 실행 단계 중 명령 처리 순서에 따라 즉시 갱신됩니다. 스캔 사이클 감시 타이머(Watch Dog Timer, WDT)가 설정값(보통 200ms)을 초과하면 CPU가 오류를 발생시키므로 무한 루프나 과도한 연산 처리 시 주의가 필요합니다.
입력 새로고침 (Input Refresh)
스캔 사이클의 첫 번째 단계로, 모든 물리 입력 채널(디지털·아날로그)의 현재 상태를 X 영역 입력 이미지 메모리로 한 번에 복사합니다. 이 단계 이후에 외부 신호가 변해도 해당 사이클에서는 X 값이 변하지 않으므로, 빠른 신호(예: 고속 펄스 입력)는 반드시 인터럽트(I/O 인터럽트) 기능을 사용해야 합니다. 아날로그 입력 모듈은 A/D 변환 완료 후 별도 갱신 채널을 통해 X 또는 FROM 명령으로 D에 저장합니다. 일반적으로 이 단계 소요 시간은 0.1~1ms 수준입니다.
프로그램 실행 (Program Execution)
래더 다이어그램 또는 구조화 텍스트로 작성된 사용자 프로그램을 0번 스텝부터 END 명령까지 순서대로 실행합니다. X 접점의 상태(이미 래치된 입력 이미지), M 접점 상태, D 레지스터 값을 읽어 연산하고, 그 결과를 M 코일·Y 코일·D 레지스터에 즉시 반영합니다. 이 단계에서 Y 출력 이미지가 갱신되며, 물리 출력 모듈로의 실제 전달은 다음 단계까지 유예됩니다. 프로그램 스텝 수와 명령 종류에 따라 스캔 시간이 달라지며, MOV·ADD 같은 기본 연산은 0.1μs 내외, 나눗셈이나 BCD 변환은 수 μs가 소요됩니다.
출력 새로고침 (Output Refresh)
프로그램 실행 단계에서 결정된 Y 출력 이미지 메모리의 값을 물리 출력 모듈의 각 채널로 일괄 전송합니다. 디지털 출력은 ON/OFF 신호로, 아날로그 출력은 TO 명령 또는 자동 갱신으로 D/A 변환되어 해당 채널에 출력됩니다. 이 단계에서 실제 릴레이·트랜지스터·솔레노이드가 동작하므로, 스캔 타임만큼의 응답 지연이 발생한다는 점을 시스템 설계 시 반영해야 합니다. 출력 모듈의 응답 지연(Response Time)과 PLC 스캔 타임의 합이 전체 제어 응답 시간이 됩니다.
END 처리 및 주변기기 서비스
사용자 프로그램의 END 명령 처리 후, 프로그래밍 툴(GX Works3)과의 통신, 내장 CC-Link 모듈 갱신, 시스템 내부 처리, WDT 리셋 등의 주변 서비스를 수행합니다. 특수 내부 릴레이(SM412: 1초 클록 등)와 특수 데이터 레지스터(SD520: 스캔 시간 기록)도 이 단계에서 갱신됩니다. END 처리가 완료되면 다시 ①번 입력 새로고침 단계로 복귀하여 다음 스캔 사이클이 시작됩니다. 스캔 사이클 주기는 SD520으로 모니터링할 수 있으며, 이상 증가 시 프로그램 용량 또는 통신 부하 점검이 필요합니다.
인터럽트 처리 (비정기 실행)
스캔 사이클 외에 고속 입력 신호나 타이머 인터럽트 조건이 발생하면 현재 진행 중인 스캔을 일시 중단하고 인터럽트 루틴(I/O 인터럽트 포인터: I28~ 등)을 실행합니다. 인터럽트 루틴에서는 X 영역의 실시간 상태를 바로 읽을 수 있어 수십μs 응답이 가능합니다. 인터럽트 루틴 내에서 사용하는 M 영역과 D 영역은 메인 프로그램과 공유되므로, 동시 쓰기 충돌이 발생하지 않도록 전용 어드레스 구간을 예약하여 사용하는 것이 중요합니다. 서보 드라이브 위치 제어나 고속 카운터 처리에 주로 활용됩니다.
0μs: 스캔 사이클 시작 — 입력 X 영역 전체 래치
모든 X 주소의 현재값이 입력 이미지 메모리에 복사되며, 이 시점부터 해당 사이클의 X 값은 고정됩니다.
~수ms: 프로그램 실행 — M·D·Y 이미지 갱신
래더 0스텝부터 순서대로 처리되며, M 코일·D 레지스터·Y 출력 이미지가 명령 실행 즉시 반영됩니다.
END 후: 출력 물리 전달 — Y 이미지 → 출력 모듈
Y 출력 이미지가 실제 트랜지스터·릴레이 출력 채널로 전달되어 외부 기기가 동작합니다. 이후 다음 스캔이 시작됩니다.
📋 KEC 232조: 자동 제어 회로의 메모리 안전 관리
KEC 232는 PLC 등의 자동 제어 장치를 사용하는 경우, 제어 프로그램의 백업 및 복원 체계를 갖출 것을 요구합니다. 프로그램 수정 시에는 수정 전 버전을 반드시 보존하고, 수정 후 시험 운전 절차를 거쳐 정상 동작을 확인해야 합니다. 또한 중요 공정의 설정값은 정전 유지 메모리(배터리 백업 D 영역)에 저장하여 전원 이상 발생 시에도 제어 상태를 복원할 수 있도록 설계하는 것이 안전 기준에 부합합니다. 배터리 교체 주기(보통 5년)를 준수하지 않으면 정전 유지 데이터가 소실될 수 있습니다.
관련 KEC 기준 조항
PLC 메모리 구조 및 프로그램 안전 관리와 관련된 KEC(한국전기설비규정) 조항은 주로 232조(자동 제어 회로) 및 판단 기준 해설서에서 다루고 있습니다. 2023년 개정 KEC에서는 디지털 제어 기기의 소프트웨어 안전성 요건이 강화되었으며, IEC 61131-3 프로그래밍 언어 표준 준수를 권장합니다. 현장 설계자와 유지보수 기술자 모두 이 기준을 숙지하여 법적 책임을 명확히 해야 합니다. 전기기술사 시험에서도 KEC 232와 PLC 관련 내용을 서술형으로 묻는 문항이 증가하고 있으므로 핵심 조항을 암기해두는 것이 유리합니다.
자동 제어 회로 안전 기준
PLC를 포함한 자동 제어 회로는 제어 신호 이상 시에도 안전 상태로 복귀하는 Fail-Safe 설계를 적용해야 합니다. 정전 또는 신호 이상 시 출력(Y 영역)이 모두 OFF되는 방향으로 설계하는 것이 원칙이며, 안전 기능은 하드웨어 인터록을 소프트웨어(M 영역)와 병행 적용해야 합니다. 프로그램 변경 이력과 버전 관리 체계 구축이 요구됩니다.
제어 프로그램 백업 및 복원
중요 설비의 PLC 프로그램은 오프라인 백업(SD 카드·USB 드라이브 등)을 주기적으로 실시하고, 원본과 운전 중 프로그램을 비교 검증(Program Compare)하는 절차를 유지해야 합니다. 백업 파일에는 D 영역의 레시피 파라미터와 정전 유지 설정값도 포함해야 하며, 교체용 CPU 유닛 장착 후 복원까지의 절차를 작업 지침서로 문서화하도록 합니다. 백업 주기는 프로그램 변경이 있을 때마다 즉시 실시하는 것을 원칙으로 합니다.
PLC 입출력 모듈 접지 및 노이즈 대책
PLC 입력 모듈의 공통 단자(COM)는 제어 전원(24VDC)의 (-) 측에 접속하고, 외부 노이즈 유입을 차단하기 위해 케이블 차폐 접지를 PE에 단락(Single-point Grounding) 적용합니다. I/O 배선은 주회로 동력선과 분리하여 포설하며, 평행 포설 시 30cm 이상 이격을 권장합니다. 노이즈로 인한 X 영역 오입력은 필터링 파라미터(입력 응답 시간 설정)로 완화할 수 있습니다.
⚠️ 자주 틀리는 KEC 해석 — M 영역 소프트웨어 인터록의 한계
M 영역 내부 릴레이를 이용한 소프트웨어 인터록만으로는 안전 기준을 충족할 수 없습니다. CPU 이상이나 프로그램 오류 시 M 값이 의도치 않게 변할 수 있으므로, 안전 기능(Emergency Stop, 안전 도어 인터록 등)은 반드시 하드와이어드(Hard-wired) 물리 회로를 병행 적용해야 합니다. KEC 232에서는 소프트웨어 인터록과 하드웨어 인터록의 이중 적용을 명확히 요구하고 있으므로, 현장 설계 시 이 두 가지를 혼동하지 않도록 주의하세요. 시험에서도 "소프트웨어 인터록만으로 충분한가?"라는 서술 문항이 자주 출제됩니다.
현장 실무 포인트 — PLC 메모리 관리 6가지 노하우
메모리 맵 작성 필수화
프로그램 작성 전 반드시 X/Y/M/D 전체 주소를 정리한 메모리 맵(변수 할당표)을 Excel로 작성하세요. 영역별 용도·담당 기기·수정 이력을 기록하면 디버깅 시 원인 파악 시간이 70% 이상 단축됩니다. 메모리 맵은 준공 서류에도 포함시켜 인수인계 시 활용하면 유지보수성이 크게 향상됩니다.
심볼 테이블(Symbol Table) 적극 활용
GX Works3의 글로벌 레이블(Global Label) 기능을 사용하면 D100을 'ConveyorSpeed_rpm'처럼 의미 있는 이름으로 관리할 수 있습니다. 심볼로 작성된 프로그램은 타인이 읽어도 바로 이해할 수 있어 유지보수 시 오배선·오수정 위험이 현저히 낮아집니다. 심볼 테이블은 CSV로 내보낼 수 있어 문서화도 자동화됩니다.
영역 충돌 방지 — 구간 예약 원칙
M 영역을 용도별로 구간을 나눠 예약하세요(예: M0~M99: 기동/정지 플래그, M100~M199: 알람 플래그, M200~M299: 타이머 보조, M300~: 인터록). 구간을 예약하지 않으면 프로그램이 길어질수록 주소 중복 사용으로 인한 오동작이 발생합니다. 현장에서 가장 많이 발생하는 PLC 트러블 원인 1위가 바로 이 메모리 영역 충돌입니다.
프로그램 시작 시 초기화 로직 추가
래더 다이어그램의 첫 번째 스텝에 SM402(초기 사이클 ON: 전원 투입 후 첫 스캔만 ON)를 조건으로 MOVP 명령을 사용해 D 레지스터 초기값을 설정하는 로직을 반드시 추가하세요. 정전 유지 영역(D7000↑)은 전원 재투입 후 값이 남으므로, 비의도적인 초기화 방지를 위해 별도 초기화 조건(유지보수 버튼 등)을 구성하는 것이 바람직합니다. 초기화 누락으로 인한 생산 라인 첫 기동 오동작 사례가 현장에서 빈번합니다.
스캔 타임 모니터링으로 이상 감지
SD520(현재 스캔 시간), SD521(최대 스캔 시간)을 SCADA나 HMI에 실시간 표시하면 프로그램 과부하나 통신 이상을 조기에 감지할 수 있습니다. 스캔 타임이 평소의 2배 이상으로 급증하면 무한 루프·대용량 데이터 처리·통신 지연이 의심되므로 즉시 점검하세요. 정상 운전 중 스캔 타임이 WDT 설정값(보통 200ms)의 50%를 초과하면 WDT 설정 또는 프로그램 최적화를 검토해야 합니다.
정전 유지 배터리 관리
M(Latch) 영역과 D7000↑(정전 유지 D)의 데이터는 CPU 내장 배터리로 유지되며, 배터리 수명은 통상 5년(25°C 기준)입니다. SD51(배터리 전압)과 SM51(배터리 이상 플래그)을 HMI에 표시하고, 배터리 교체 전 반드시 프로그램과 D 레지스터 전체를 백업하는 절차를 수립하세요. 배터리 무단 교체 후 정전 유지 데이터가 소실되어 레시피 전체가 초기화된 사례가 현장에서 보고되고 있습니다.
전기기사·기술사 빈출 포인트
전기기사 실기 및 전기기술사 서술형 시험에서 PLC 메모리 구조 관련 문제는 주로 래더 다이어그램 해석, 메모리 영역별 역할 서술, 타이머·카운터 회로 설계 형식으로 출제됩니다. 최근 전기기술사 시험에서는 "스캔 사이클과 입출력 래치의 관계", "정전 유지 메모리의 필요성과 KEC 관련 기준" 등의 심화 문항이 늘어나는 추세입니다. 계산 문제보다는 원리 서술과 회로 설계 능력을 평가하는 방향으로 출제 비중이 이동하고 있습니다. 아래 5가지 핵심 포인트를 중심으로 암기와 이해를 병행하면 고득점이 가능합니다.
- 입출력 영역 래치 원리: 스캔 사이클 시작 시 X 영역이 한 번만 읽히고 래치되는 원리를 서술할 수 있어야 합니다. "왜 고속 신호 처리 시 인터럽트를 사용해야 하는가?"를 스캔 사이클 개념으로 논리적으로 설명하는 것이 핵심입니다.
- 내부 릴레이의 자기유지 회로: X0(기동) · X1(정지 b접점) · M0(자기유지 a접점) → M0 코일의 래더 회로를 손으로 작성하고, 물리 배선 없이 자기유지가 구현되는 원리를 설명할 수 있어야 합니다. 인터록 회로(M100과 M101이 상호 b접점으로 교차 배치)도 함께 학습하세요.
- 타이머 레지스터 동작 구조: T0 코일이 ON되면 타이머 현재값이 카운트 업되고, 설정값(예: K50 = 5.0초, 100ms 타이머 기준) 도달 시 T0 접점이 ON되는 구조를 시간 선도와 함께 서술하는 문제가 빈출됩니다.
- 정전 유지 메모리 선택 이유: 왜 레시피 파라미터·원점 복귀 완료 플래그·생산 카운터를 일반 D가 아닌 정전 유지 D(D7000 이상)에 저장해야 하는지, 배터리 백업 원리와 교체 주기를 함께 서술하는 문제가 출제됩니다.
- KEC 232 소프트·하드 인터록 이중 적용: 소프트웨어 M 영역 인터록의 한계(CPU 이상 시 동작 불가)와 하드웨어 물리 인터록의 필요성을 비교 서술하는 문제가 전기기술사 수준에서 반복 출제됩니다. "M 영역 인터록만으로 KEC 기준을 충족할 수 있는가?"에 대한 명확한 답변 논리를 준비하세요.
자주 묻는 질문
X 영역(입력)은 물리적 입력 모듈을 통해 외부 센서·버튼의 24VDC 신호를 받아 스캔 사이클 시작 시 래치하는 영역으로, 프로그램에서 읽기만 가능합니다. Y 영역(출력)은 프로그램 결과를 물리 출력 모듈(릴레이·트랜지스터)로 전달하는 영역으로, 읽기와 쓰기 모두 가능합니다. 반면 내부 릴레이(M)는 물리 배선이 전혀 없는 가상 메모리 비트로, 중간 논리 연산·자기유지·인터록 목적으로만 사용되며 접점을 무제한 재사용할 수 있습니다. 가장 큰 실무적 차이는, Y를 사용하면 실제 출력 모듈에 신호가 전달되지만 M을 사용하면 프로그램 내부에서만 처리된다는 점입니다. 따라서 중간 논리 처리에 Y 주소를 사용하면 의도치 않은 외부 출력이 발생할 수 있으므로 반드시 M을 사용해야 합니다.
데이터 레지스터(D)는 범용 16비트 워드 메모리로, 사용자가 자유롭게 어떤 수치 데이터든 저장할 수 있습니다. 예를 들어 컨베이어 속도 설정값(D100: 1500rpm), 온도 측정값(D200: 253 = 25.3°C), 생산 개수 누계(D300: 876개) 등을 저장합니다. 타이머(T) 레지스터는 T 코일이 ON되는 순간부터 CPU가 자동으로 현재값을 증가시키는 전용 레지스터이며, 사용자는 설정값(K값)만 지정하면 됩니다. T0의 100ms 타이머에서 K50을 설정하면 5.0초 후 T0 접점이 ON되는 방식으로 동작합니다. D 레지스터는 사용자가 MOV 명령으로 직접 값을 변경하지만, 타이머 현재값은 CPU가 자동으로 관리하므로 직접 수정은 권장되지 않습니다. 실무에서는 타이머 설정값을 D 레지스터에 저장해두고 MOVP 명령으로 유연하게 변경하는 패턴을 많이 사용합니다.
일반 내부 릴레이(M0~M7679, 미쓰비시 Q 기준)는 PLC 전원이 차단되면 모든 값이 0(OFF)으로 초기화됩니다. 반면 정전 유지 내부 릴레이(Latch Relay, M7680~M8191)는 CPU 내장 배터리의 전원으로 RAM 값을 유지하여, 전원이 다시 들어와도 차단 전 상태를 그대로 복원합니다. 이 특성은 공정 완료 플래그, 원점 복귀 완료 신호, 비상 정지 이력처럼 전원 재투입 후에도 이전 상태를 기억해야 하는 로직에 사용됩니다. 단, 배터리가 방전되면 정전 유지 영역의 데이터도 소실되므로 배터리 이상 알람(SM51)을 HMI에 표시하고 5년 주기로 교체하는 유지보수 계획이 필수입니다. GX Works3 파라미터의 'Latch Range' 설정으로 정전 유지 구간을 사용자가 직접 조정할 수 있습니다.
KEC 232(자동 제어 회로)에서는 PLC를 포함한 자동 제어 장치에 대해 제어 프로그램의 정기 백업, 버전 관리, 비교 검증 절차를 요구합니다. 구체적으로는 프로그램 변경 시마다 오프라인 백업(SD 카드, USB 또는 네트워크 드라이브)을 실시하고, 운전 중 CPU의 프로그램과 백업 파일을 'Program Compare' 기능으로 주기적으로 비교하여 무단 변경 여부를 확인해야 합니다. 중요 공정의 레시피 파라미터(D 영역)와 정전 유지 설정값도 백업 범위에 포함시켜야 하며, 교체용 CPU 장착 후 복원 절차를 작업 표준서로 문서화하도록 합니다. 또한 Fail-Safe 원칙에 따라 전원 이상 또는 CPU 오류 시 모든 출력(Y 영역)이 OFF 상태로 귀환하도록 설계해야 합니다. 이를 위해 출력 모듈의 'Hold/Clear' 파라미터를 반드시 'Clear(전원 이상 시 출력 OFF)'로 설정해야 합니다.
메모리 영역 충돌은 두 개 이상의 코일이 동일한 Y 또는 M 주소를 사용할 때 발생하며, 래더 다이어그램에서 마지막으로 실행된 코일 명령의 결과만 유효해지는 특성 때문에 기대와 다른 동작이 나타납니다. 예방을 위해서는 첫째, 프로그램 작성 전 영역별 주소 구간 예약표를 작성하고 용도별 구간을 명확히 나눠야 합니다. 둘째, GX Works3의 'Cross Reference' 기능을 사용하면 특정 코일 주소가 프로그램 어디에서 몇 번 사용되는지 자동으로 검색할 수 있어 중복을 즉시 발견할 수 있습니다. 셋째, 글로벌 레이블(심볼 테이블)을 활용하면 같은 심볼은 같은 주소에만 할당되므로 구조적으로 중복이 발생하지 않습니다. 마지막으로 작성 완료 후 GX Works3의 프로그램 체크(Program Check) 기능으로 이중 코일 경고를 반드시 확인하세요.
PLC 프로그램 수정 작업 안전 수칙
설비 정지 후 프로그램 수정 원칙
운전 중 PLC 프로그램을 직접 수정(Online Edit)하는 것은 출력(Y 영역)이 즉시 변경되어 기계가 갑자기 동작할 수 있어 매우 위험합니다. 반드시 설비를 정지 상태로 두고, 비상정지(E-Stop) 회로를 하드웨어로 개방한 후 프로그램을 수정하는 것이 원칙입니다. 부득이하게 Online Edit가 필요한 경우 관련 출력 기기를 수동으로 안전 위치에 두고, 작업 반경 내 인원을 대피시킨 후 진행하세요.
프로그램 수정 전 백업 필수
프로그램을 수정하기 전에 반드시 현재 CPU의 프로그램 전체(래더 + 파라미터 + D 레지스터 설정값)를 오프라인 매체(SD 카드·USB·네트워크 서버)에 백업해야 합니다. 수정 후 이상 동작이 발생할 경우 즉시 백업본으로 복원할 수 있어야 하며, 복원 절차를 사전에 훈련해두는 것이 중요합니다. 백업 파일에는 날짜·수정자·수정 내용을 반드시 기록하여 변경 이력을 관리하세요.
I/O 배선 점검 시 절연 장갑 착용
PLC 입력 모듈 단자(24VDC)와 출력 모듈 단자(AC220V 또는 DC24V)는 전압이 다르므로, 배선 점검 시에는 반드시 내전압 절연 장갑(IEC 60903 Class 0 이상)을 착용해야 합니다. 입력·출력 단자 주변의 분전반 내부는 주회로 고전압(AC380V 이상)과 근접하는 경우가 많으므로 작업 전 주회로 차단기를 반드시 개방하고 검전기로 무전압을 확인하세요. 전원 ON 상태에서의 단자 접속·분리는 절대 금지하며, 점검 전 카드보드 패널에 "작업 중" 표지를 부착하세요.
수정 후 시험 운전 절차 준수
프로그램 수정 후에는 반드시 단계별 시험 운전 절차를 거쳐야 합니다. 첫째, 수동 모드에서 각 출력(Y)을 개별 강제 ON/OFF 테스트로 배선 상태를 확인하세요. 둘째, 자동 모드로 전환 후 저속·무부하 조건에서 전체 공정 사이클을 1회 이상 실행하여 이상 동작을 점검합니다. 셋째, 정상 확인 후 GX Works3의 Program Compare로 설계 사양과 실제 CPU 프로그램을 비교 검증하고, 담당자 서명이 포함된 수정 확인서를 작성·보존하세요.
📖 함께 보면 좋은 글
PLC 모듈형과 컴팩트형 비교: 확장성과 비용 분석 PLC 프로그래밍 언어별 특징 (LD, IL, ST, FBD, SFC) PLC 유지보수를 위한 주석과 심볼 테이블 작성 요령 PLC 아날로그 필터 프로그래밍과 노이즈 제거 기법이 글이 도움이 되셨나요?
이 글이 도움됐다면 공유해주세요!
Facebook 공유📝 업데이트 기록
- 2026년 1월: 초안 작성 및 SVG 블록 다이어그램 4종 제작
- 2026년 1월: KEC 2023 기준 반영 및 KEC 232 조항 상세 추가
- 2026년 1월: 현장 실무 팁 6가지 및 정전 유지 배터리 관리 내용 보완
KEC 2023 / IEC 61131-3 / 미쓰비시 MELSEC-Q 기준 / 2026년 기준
- 공유 링크 만들기
- X
- 이메일
- 기타 앱