본문 바로가기

개발/PLC

PLC 기초 개념: PLC와 PC 차이부터 Modbus 통신과 MES 연동 구조까지

반응형

반응형

PLC 기초 개념과 산업용 제어기의 역할

공장 자동화 시스템을 개발하다 보면 PLC, HMI, SCADA, MES와 같은 용어를 자주 접하게 됩니다. 이 가운데 PLC는 생산설비를 직접 제어하는 장치이며, 다른 시스템과 설비 데이터를 연결하는 출발점이 되기도 합니다.

PLC는 Programmable Logic Controller의 약자로, 산업용 기계와 장비를 프로그램에 따라 제어하는 장치입니다. PLC는 센서에서 입력 신호를 받고, 내부 프로그램에서 조건을 판단한 뒤, 모터나 밸브 등의 장치에 출력 신호를 전달합니다.

생산라인에서 제품이 특정 위치에 도착했는지 확인하거나, 안전 조건이 충족되었을 때 장비를 가동시키는 작업이 대표적인 사례입니다.

웹 애플리케이션 개발자에게 PLC는 익숙하지 않은 장치일 수 있습니다. 하지만 PLC에서 제공하는 생산량이나 설비 상태를 수집해 MES에 표시하는 과정은 일반적인 데이터 수집 시스템과 연결해서 이해할 수 있습니다.

이번 글에서는 PLC 자체를 제어하는 프로그램보다는 PLC가 어떤 방식으로 데이터를 관리하고, 외부 시스템과 연결되는지 살펴봅니다.


PLC와 일반 PC는 어떤 차이가 있을까?

PLC와 PC는 모두 프로그램을 실행하지만 사용하는 목적과 환경이 다릅니다. PC는 운영체제 위에서 여러 프로그램을 실행하도록 설계되었습니다. 데이터베이스 서버나 웹 애플리케이션을 실행하고, 다양한 개발 도구를 설치할 수 있습니다.

반면 PLC는 산업 현장에서 반복적인 제어 작업을 안정적으로 수행하는 데 초점을 맞춥니다. PLC는 일반적으로 디지털 입력과 출력, 아날로그 신호 처리, 산업용 통신 등의 기능을 갖추거나 관련 모듈을 연결할 수 있습니다.

구분PLC일반 PC

주요 목적 산업용 설비 제어 범용 프로그램 실행
입력 정보 센서, 스위치, 계측기 키보드, 네트워크 등
출력 대상 모터 제어기, 밸브, 램프 화면, 파일, 네트워크
프로그래밍 래더, 구조화 텍스트 등 Python, PHP, C++ 등
운영 환경 산업 현장 중심 사무실, 서버실 등
통신 Modbus, EtherNet/IP 등 HTTP, TCP/IP 등

이 표는 일반적인 차이를 정리한 것입니다. 산업용 PC도 설비 제어에 사용되며, PLC 역시 Ethernet 통신이나 고급 연산 기능을 지원할 수 있습니다. 중요한 것은 장비의 이름보다 어떤 작업을 위해 설계되었는지 이해하는 것입니다.


PLC 입력과 출력은 어떻게 처리될까?

PLC 제어 프로그램은 일반적으로 입력 정보를 읽고, 설정된 논리에 따라 판단한 다음 출력을 갱신하는 과정을 반복합니다. 예를 들어 컨베이어 설비에 제품 감지 센서와 모터가 연결되어 있다고 가정하겠습니다.

제품 감지 센서가 ON 신호를 보내면 PLC는 해당 입력을 확인합니다. 이후 프로그램에 작성된 조건을 평가하고, 필요한 출력 신호를 변경합니다.

[제품 감지 센서]
        │
        ▼
[PLC 입력 모듈]
        │
        ▼
[PLC 제어 프로그램]
        │
        ▼
[PLC 출력 모듈]
        │
        ▼
[모터 제어기 또는 표시등]

PLC 프로그램에는 다양한 조건을 추가할 수 있습니다. 제품 감지 여부뿐 아니라 설비 가동 허가, 비상 정지 상태, 작업 순서, 다른 장비의 완료 신호 등을 함께 판단할 수 있습니다.

일반적인 PLC에서는 이러한 처리를 스캔 사이클이라는 반복 동작으로 설명합니다. 입력 갱신, 프로그램 실행, 출력 갱신 등의 작업을 반복하면서 설비 상태에 대응하는 것입니다.

다만 고속 카운터나 인터럽트, 특수 제어 기능은 일반적인 스캔 처리와 다르게 동작할 수 있으므로 실제 제어 프로그램에서는 기종별 특성을 확인해야 합니다.


PLC 내부 데이터와 레지스터의 관계

PLC에서 처리하는 정보는 단순한 ON/OFF 신호만 있는 것이 아닙니다. 제품 생산 수량, 목표 수량, 측정 온도, 모터 회전 속도 등 숫자 형태의 정보도 다룹니다.

이러한 정보는 PLC 내부 변수나 메모리 영역에 저장될 수 있으며, 외부 장치에서 읽을 수 있도록 통신 주소에 연결되기도 합니다.

Modbus 통신에서는 레지스터라는 데이터 영역이 중요합니다.

대표적으로 Holding Register는 16비트 데이터를 저장하는 영역이며, 프로토콜상 읽기와 쓰기 기능을 지원합니다. 예를 들어 다음과 같은 가상 레지스터 맵을 만들 수 있습니다.

주소데이터저장값

HR0 설비 상태 1
HR1 누적 생산량 120
HR2 양품 수량 115
HR3 불량 수량 5
HR4 온도 253
HR5 목표 생산량 500

여기서 HR0의 1은 가동 상태를 의미하도록 정의할 수 있습니다. HR4에 저장된 253은 실제 온도 25.3도를 나타내도록 설정할 수 있습니다.

다만 이 주소와 값은 학습을 위해 임의로 정한 예시입니다. 실제 PLC에서 HR0이 설비 상태를 의미한다는 공통 규칙은 없습니다. 또한 PLC 내부 변수와 Modbus 레지스터는 항상 일대일로 대응하는 것이 아닙니다. 제조사별 통신 설정이나 PLC 프로그램에서 외부에 제공할 데이터를 정할 수 있습니다.


Modbus TCP 통신은 어떤 역할을 할까?

PLC 내부에 생산량이 저장되어 있다고 해도 외부 프로그램이 해당 값을 읽으려면 통신 방법이 필요합니다. Modbus는 산업용 장치 간 데이터 교환에 사용되는 대표적인 프로토콜 가운데 하나입니다.

Modbus TCP는 TCP/IP 네트워크를 이용하여 Modbus 요청과 응답을 전달하는 방식입니다. 일반적인 Modbus TCP 환경에서는 클라이언트가 서버에 특정 레지스터를 읽어 달라고 요청하고, 서버가 해당 값을 반환합니다.

[Python 수집 프로그램]
          │
          │ HR1 값 조회 요청
          ▼
[Modbus TCP 서버]
          │
          │ HR1 = 120
          ▼
[Python 수집 프로그램]
          │
          ▼
[생산량 120개 확인]

여기서 Python 수집 프로그램은 클라이언트 역할을 합니다. PLC 또는 가상 PLC는 Modbus TCP 서버 역할을 합니다. Modbus TCP에서는 일반적으로 TCP 포트 502를 사용하지만, 학습용 가상 서버에서는 운영체제의 관리자 권한이나 다른 서비스와의 충돌을 피하기 위해 5020 같은 별도 포트를 사용할 수 있습니다.

이러한 통신에서는 접속할 IP 주소와 포트뿐 아니라 레지스터 주소, 읽을 개수, 데이터 해석 방식 등을 정확하게 알아야 합니다. 또한 모든 PLC가 Modbus TCP를 기본으로 제공하는 것은 아닙니다. 일부 장비는 통신 모듈이나 별도의 설정이 필요하며, 제조사 전용 프로토콜을 사용하는 경우도 있습니다.


PLC와 MES는 어떻게 데이터를 연결할까?

MES는 Manufacturing Execution System의 약자로, 제조실행시스템을 의미합니다. 생산계획과 작업지시, 공정 진행 상태, 생산실적, 품질 정보 등을 관리하는 데 사용됩니다.

PLC와 MES를 연동하는 이유는 설비에서 발생한 데이터를 생산관리 시스템에 활용하기 위해서입니다. 예를 들어 PLC가 누적 생산량을 제공하고 있다면 수집 프로그램은 일정한 주기로 해당 값을 읽을 수 있습니다. 이후 수집한 값을 데이터베이스에 저장하고 MES 화면에 표시합니다.

[생산설비]
     ↓
[PLC]
     ↓ Modbus TCP
[Python 수집기]
     ↓
[Laravel API]
     ↓
[MySQL]
     ↓
[MES 생산현황]

여기서 주의해야 할 점은 PLC의 누적 생산량과 MES의 작업실적이 항상 같지는 않다는 것입니다. PLC가 제공하는 값이 설비 전체의 누적 생산량이라면 작업지시가 변경되었을 때 기준값을 어떻게 처리할지 결정해야 합니다.

수집 시점 사이에 설비가 재시작되거나 생산량 카운터가 초기화될 수도 있습니다. 이러한 상황을 고려하지 않고 현재 값만 그대로 작업실적으로 저장하면 실제 생산량과 MES 실적 사이에 차이가 발생할 수 있습니다.

따라서 PLC 통신이 정상적으로 동작하는 것과 정확한 생산실적을 계산하는 것은 별개의 문제입니다. MES 개발에서는 통신 구조뿐 아니라 데이터의 의미와 저장 기준까지 함께 설계해야 합니다.


Python으로 가상 PLC를 구현하는 이유?

PLC 학습을 시작할 때 가장 큰 부담 가운데 하나는 실제 장비를 준비하는 과정입니다. 산업용 PLC는 기능과 제조사에 따라 가격 차이가 크며, 실습 목적에 따라 전원 장치, 통신 모듈, 센서, 입출력 장치 등이 필요할 수 있습니다.

교육용이나 중고 PLC를 구매하는 방법도 있지만, 단순히 통신과 레지스터 개념을 익히려는 개발자에게는 초기 준비가 복잡할 수 있습니다.

이러한 문제를 해결하기 위해 이번 시리즈에서는 Python으로 가상 PLC를 구현합니다. 가상 PLC는 실제 기계를 제어하지 않고, PLC가 통신으로 제공하는 데이터를 소프트웨어로 모의합니다.

Python 프로그램에서 레지스터 공간을 생성하고 생산량이나 온도 등의 값을 저장합니다. 이후 다른 Python 프로그램이 Modbus TCP로 접속해 값을 읽도록 구성할 예정입니다.

가상 PLC를 이용하면 실제 설비가 없어도 통신 요청과 응답을 직접 확인할 수 있습니다. 또한 일부 값을 변경하거나 통신 연결을 종료하는 등의 상황을 만들어 데이터 수집 프로그램의 동작을 검증할 수 있습니다.

다만 이러한 실습은 실제 PLC의 모든 기능을 재현하는 것이 아닙니다. 물리적 입출력, 산업용 안전 제어, 실시간 동작 특성, 제조사별 메모리 구조까지 동일하게 구현하는 것은 아닙니다. 가상 PLC는 어디까지나 Modbus 통신과 데이터 수집 원리를 이해하기 위한 학습 환경입니다.


실습 개발환경과 기술 구성

이번 시리즈에서는 다음 개발환경을 기준으로 실습을 진행합니다.

구성 요소사용 기술

Python 3.13.2
PHP 8.2
Laravel 12
데이터베이스 MySQL
통신 프로토콜 Modbus TCP
가상 PLC Python 프로그램
데이터 수집 Python
MES Laravel 웹 애플리케이션

Python에서는 가상 PLC 서버와 데이터 수집 프로그램을 구현합니다. Laravel에서는 설비 정보를 관리하고 수집된 데이터를 저장하거나 조회하는 API를 작성할 예정입니다.

PHP 8.2 환경에서 Modbus 통신을 직접 구현하는 방법도 별도로 살펴볼 수 있지만, 초기 실습에서는 Python 수집기와 Laravel MES를 분리하여 각각의 역할을 이해하는 데 집중합니다.

라이브러리 설치와 실행 명령어는 실제 코드를 작성하는 편에서 안내하며, Python 3.13.2와 호환되는 버전을 기준으로 작성할 예정입니다.


ESP32 실습으로 실제 센서 데이터까지 확장하기

가상 PLC에서는 프로그램이 만든 생산량과 온도값을 읽습니다. 하지만 실제 공장에서는 센서나 장비에서 측정한 값이 중요합니다.

따라서 이후에는 ESP32를 이용해 실제 센서를 연결하는 실습도 진행할 예정입니다.

ESP32는 Wi-Fi와 다양한 입출력 기능을 지원하는 마이크로컨트롤러입니다. 온습도 센서나 스위치를 연결하고 측정한 값을 네트워크를 통해 서버로 전송할 수 있습니다.

예를 들어 ESP32에 온습도 센서를 연결하고 Laravel API로 측정값을 전송하면 실제 데이터가 데이터베이스에 저장되는 과정을 확인할 수 있습니다.

ESP32에서도 구현 방식에 따라 Modbus TCP 통신을 사용할 수 있지만, HTTP API를 이용한 데이터 전송과는 구분해야 합니다. 또한 ESP32는 산업용 PLC를 그대로 대체하는 장비가 아닙니다. 산업 현장의 전기적 환경과 안전 요구사항을 충족하는지는 별도로 검토해야 합니다. 이번 시리즈에서는 저렴한 장비로 실제 센서와 통신을 경험한다는 학습 목적에 맞춰 활용합니다.


마무리

PLC는 산업용 설비를 제어하기 위한 장치이며, 센서 입력과 프로그램 판단, 출력 제어를 반복하여 자동화 작업을 수행합니다. PLC가 관리하는 데이터 가운데 일부는 Modbus TCP 등의 통신을 통해 외부 프로그램에서 조회할 수 있습니다.

 

PLC 프로그래밍 입문: 산업용 제어기 구조와 파이·라라벨 MES 연동 원리

PLC를 이해해야 하는 이유와 MES 개발의 관계제조실행시스템(MES)을 개발하다 보면 생산현황, 작업지시, 공정실적, 설비 가동 상태와 같은 데이터를 다루게 됩니다. 이러한...

www.th-study.com

▲ PLC 입문 : MES 산업용 서비스 적용 원리 ▲

MES 개발에서는 이러한 데이터를 수집해 생산현황이나 설비 상태를 관리할 수 있지만, 통신으로 값을 가져오는 것만으로 정확한 작업실적이 완성되는 것은 아닙니다.

이번 시리즈에서는 Python 가상 PLC를 통해 레지스터와 통신 구조를 학습하고, PHP 8.2와 Laravel 12를 이용해 MES 연동으로 확장합니다.

실제 장비가 없어도 기본적인 데이터 흐름을 이해할 수 있으며, 이후 ESP32를 이용한 센서 실습으로 물리적 데이터 수집까지 경험할 수 있습니다.

반응형