
HMI 없는 현장에서 PLC IO를 핸드폰으로 본다 — PLCLink 시작 이유
PLC(Programmable Logic Controller, 공장 자동화 설비를 제어하는 산업용 컴퓨터) 설치 현장에서 이런 상황 경험해보신 적 있으신가요?
*"배선 확인 좀 해줘요" 한 마디에 제어 담당자가 노트북 들고 옆에서 대기해야 하는 상황.*
저는 이게 너무 비효율적이라고 느꼈고, 그게 이 프로그램을 만들게 된 시작이었습니다.
어쩌다 이걸 만들게 됐나
현장 셋업을 하다 보면 비슷한 상황이 반복됩니다. 처음엔 당연한 줄 알고 넘겼는데, 쌓이다 보니까 "이건 아닌데"라는 생각이 들었습니다.
크게 세 가지 불편함이 있었습니다.

불편함 1 — 배선 확인하는데 제어 인원이 계속 붙어야 한다
PLC 설치는 됐고, 배선도 어느 정도 끝났는데 HMI(Human Machine Interface, 터치스크린처럼 PLC 상태를 보여주는 조작 화면)가 아직 연결이 안 된 상태.
이럴 때 전장 담당자나 기구 담당자가 배선이 제대로 들어왔는지 확인하려면 어떻게 해야 하냐고요?
제어 담당자가 옆에서 엔지니어링 툴(GX Works, KV Studio 같은 PLC 프로그래밍 전용 소프트웨어)을 켜서 IO 상태를 직접 보여줘야 합니다.
배선 확인이라는 단순한 작업인데, 제어 인원이 자리를 지켜야만 진행이 됩니다.
불편함 2 — 검사기가 없으면 PLC 통신 로직을 확인할 수 없다
PLC와 PC 검사기(부품을 검사하거나 측정하는 전용 프로그램)가 TCP/IP(네트워크를 통해 데이터를 주고받는 통신 방식)로 연결되는 구조입니다.
PLC 쪽 통신 로직은 이미 만들었는데, 검사기가 아직 설치 전이면?
"내가 만든 통신 로직이 제대로 동작하는가"를 확인할 방법이 없습니다. 검사기 개발팀이 올 때까지 기다리거나, 될 거라 믿고 다음 단계로 넘어가야 합니다.
이게 나중에 검수 단계에서 문제가 되면 원인 추적이 처음부터 다시 됩니다.
불편함 3 — 알람이 울렸는데 "뭔지 모르겠다"
검수가 끝나고 라인이 돌아가다가 알람이 발생했습니다. HMI 화면에는 텍스트 한 줄만 뜹니다.
[알람 0023] 실린더 A 전진 완료 신호 없음
운전원(Operator, 설비를 운영하는 작업자)이나 CS 인원은 이게 뭔지, 어떻게 조치해야 하는지 별도 매뉴얼을 찾아야 합니다. 매뉴얼이 있으면 다행이고, 없으면 담당 엔지니어한테 바로 전화가 옵니다.
알람 하나 해결하는 데 엔지니어가 현장에 와야 하는 상황. 이게 반복되면 모두가 지칩니다.
세 가지 불편함의 공통점
상황은 달랐지만 문제의 뿌리는 같았습니다.
"PLC 상태를 확인하고 대응하기 위한, 엔지니어링 툴 없이 독립적으로 쓸 수 있는 수단이 없다."
엔지니어링 툴은 PC 한 대에 설치된 소프트웨어입니다. 한 명이 보고, 그 사람이 자리를 비우면 끝입니다. 전장 담당자, 외주 작업자, 운전원에게 GX Works나 KV Studio 사용법을 가르치는 건 현실적으로 어렵습니다.
PLCLink — 이렇게 해결하기로 했다
한 줄로 정리하면 이렇습니다.
HMI나 엔지니어링 툴 없이, 같은 네트워크의 브라우저 하나로 PLC를 모니터링하고 검증하고 운영할 수 있는 웹 기반 도구

핵심은 두 가지입니다.
첫 번째, 앱 설치 없이 URL로 접속
서버가 실행 중인 PC와 같은 네트워크(같은 공유기에 연결된 WiFi 포함)에 있으면, 브라우저에 주소를 입력하는 것만으로 접속됩니다. PC든 핸드폰이든 상관없습니다.
예를 들어, 현장 PC에 서버를 올려두고 공유기에 WiFi를 연결해두면, 전장 작업자가 자기 핸드폰으로 바로 볼 수 있습니다. 노트북을 들고 다닐 필요가 없습니다. 심지어 외주 작업자도 WiFi 범위 안에서 혼자 배선 연결하고 결과를 바로 확인할 수 있게 됩니다.
두 번째, 사용자를 두 그룹으로 나눈다
- 엔지니어 모드: IP 설정, IO 배치, 알람 등록 등 모든 설정을 다루는 화면
- 확인 모드: 설정된 화면을 그대로만 보는 화면. PLC 지식이 없어도 됩니다.
엔지니어가 한 번 구성해두면, 이후에는 전장 담당자, 기구 담당자, 운전원 누구든 브라우저 주소 하나로 접속해서 필요한 걸 확인할 수 있습니다. 수정 버튼 자체가 보이지 않습니다.
어떤 기술로 만들었나 (초보자도 이해할 수 있게)

기술적인 내용인데, 최대한 쉽게 설명해볼게요.
| 구성 | 선택 | 한 마디 설명 |
|---|---|---|
| 백엔드(서버) | FastAPI (Python) | PLC와 실제 통신하는 엔진 역할 |
| 프론트엔드(화면) | React + Vite | 브라우저에 보이는 화면 |
| 통신 방식 | MC Protocol SLMP 3E Frame | PLC에서 데이터를 읽어오는 방식 |
| 저장 방식 | SQLite | 별도 서버 없이 파일로 저장 |
백엔드(서버 쪽 프로그램)는
Python의 FastAPI라는 프레임워크를 썼습니다.
PLC와 통신을 주고받는 부분이 비동기 처리(여러 작업을 겹쳐서 처리하는 방식)에 적합합니다.
프론트엔드(브라우저에서 보이는 화면)는
React로 만들었습니다.
한 번 만들어두면 PC 브라우저, 핸드폰 브라우저 둘 다 동작합니다.
통신 방식은
MC Protocol SLMP(Mitsubishi Communication Protocol, 미쓰비시 PLC와 통신하는 표준 규격)를 기반으로 시작했습니다.
Mitsubishi Q/R 시리즈뿐만 아니라 Keyence KV 시리즈도 이 프로토콜을 지원합니다.
설계할 때 중요하게 생각한 것 — PLC 부담을 주지 않는다
PLC는 프로그램을 일정 주기(스캔타임, 보통 수 ms~수십 ms)로 반복 실행합니다. 외부에서 통신 요청이 많이 들어오면 이 주기가 늘어나고, 기존 제어 신호에 영향이 생길 수 있습니다.
그래서 두 가지 원칙을 잡았습니다.

배치 읽기: 주소를 하나씩 반복해서 읽지 않고, 연속된 주소를 한 번에 묶어서 요청합니다.
MC Protocol은 한 번에 최대 480워드(Word, 16비트 데이터 단위)까지 읽을 수 있습니다.
비동기 폴링: 폴링 주기(반복 읽기 간격)를 PLC 스캔타임보다 길게 유지합니다. 기본값 200ms~500ms.
기능이 늘어날수록 영향이 아예 없다고 보장하기는 어렵습니다.
그래서 기능별로 스캔타임 영향을 측정해서, 어떤 기능을 켰을 때 얼마나 늘어나는지 사용자에게 알려주는 것도 계획에 포함되어 있습니다.
"이 기능을 켜면 이 정도 부담이 생긴다"를 알고 선택할 수 있게요.
처음 생각보다 쓰임새가 넓어졌다
만들면서 느낀 건데, 처음 생각보다 사용할 수 있는 타이밍이 많습니다.

셋업 초기 단계에서는 전장 담당자가 배선을 연결하고 핸드폰 브라우저로 바로 신호 확인. 제어 담당자가 옆에 있을 필요 없습니다.
디버깅 단계에서는 여러 주소를 동시에 추적하고, 특정 신호가 들어오는 타이밍과 같이 다른 값들이 어떻게 되는지 기록할 수 있습니다. 검사기가 아직 설치 전이라면, 이 프로그램이 검사기 역할을 흉내내서 PLC 통신 로직을 미리 검증할 수도 있습니다.
운영 단계에서는 알람이 발생했을 때 텍스트 한 줄이 아니라, 매뉴얼이 화면에 뜨도록 구성할 계획입니다. 어떤 알람이 언제 떴는지 이력도 쌓이고, 조치 방법도 바로 확인할 수 있는 구조로 만들고 싶습니다.
서버는 어디에 올리나
현장 PC가 이미 PLC와 같은 네트워크에 연결되어 있다면, 거기에 서버를 올리는 게 가장 현실적입니다.
여건이 안 되면 미니 PC나 라즈베리 파이를 셋업 때 들고 다니는 방법도 생각해봤습니다. 어쨌든 PLC망에 하나 접속만 되면 됩니다.
주의할 점은 망 분리입니다. 현장 PC가 PLC 네트워크와 MES(Manufacturing Execution System, 생산 관리 시스템) 네트워크에 동시에 연결된 경우, PLCLink 서버가 MES 쪽으로 영향을 주면 안 됩니다.
서버 실행 시 PLC 네트워크 NIC(Network Interface Card, 네트워크 카드)의 IP에만 바인딩(Binding, 특정 네트워크 카드에만 서버를 연결하는 것)하면, 다른 네트워크 인터페이스로는 트래픽이 나가지 않습니다.
# PLC망 NIC IP에만 바인딩 예시
uvicorn main:app --host 192.168.1.50 --port 8765
앞으로 만들 것들
- MC Protocol 하나만으로는 한계가 있다 (일부 내부 변수 접근 불가)
- Modbus, OPC-UA 같은 다른 통신 방식으로 확장이 필요
- 알람에 매뉴얼을 연동해서 운전원이 혼자 조치할 수 있는 구조
- HMI 없이 운영 가능한 실시간 모니터링 화면
최초 설계보다 범위가 늘어난 건 맞습니다. 하지만 그게 이 프로젝트를 만드는 이유이기도 합니다.
앞으로 Phase별로 구현 내용을 이 블로그에 올릴 예정입니다.
PLCLink가 HMI랑 다른 점이 뭔가요?
HMI(Human Machine Interface)는 PLC 제조사나 전용 소프트웨어로 만드는 터치스크린 화면입니다.
전용 툴을 익혀야 하고, 화면에 뭔가를 넣으려면 제조사 방식을 따라야 합니다.
PLCLink는 웹 기반입니다.
브라우저만 있으면 됩니다.
추가로 설치할 것도 없고, 핸드폰으로도 됩니다.
HMI를 완전히 대체하는 것보다는, HMI가 없는 단계나 HMI만으로 부족한 부분을 채우는 역할을 생각하고 있습니다.
핸드폰으로 정말 볼 수 있나요?
네, 됩니다.
서버 PC와 핸드폰이 같은 네트워크(같은 공유기에 연결된 WiFi)에 있으면, 핸드폰 브라우저에서 IP 주소를 입력하는 것만으로 접속됩니다. 앱 설치 없이요.
현장에서 공유기에 WiFi를 연결해두면, 작업자들이 각자 핸드폰으로 IO 상태를 확인할 수 있습니다.
실제로 "이게 되네?"라고 했던 반응이 제일 기억에 남습니다.
기존 PLC 프로그램에 영향이 있지 않나요?
PLC는 프로그램을 일정 주기로 반복 실행합니다. 외부 통신 요청이 많으면 이 주기에 영향이 생길 수 있습니다.
PLCLink는 배치 읽기(여러 주소를 한 번에 묶어서 읽기)와 폴링 주기 조절(기본 200ms~500ms)로 이 영향을 최소화하도록 설계했습니다.
기능별로 영향을 측정해서 사용자가 미리 알고 선택할 수 있도록 하는 것도 계획 중입니다.
Mitsubishi PLC 말고 다른 제조사도 됩니까?
현재는 Mitsubishi Q/R 시리즈와 Keyence KV 시리즈를 지원합니다.
두 제조사 모두 MC Protocol(SLMP)을 지원합니다.
다만 Keyence KV는 주소 체계와 비트 읽기 방식에 세부적인 차이가 있어서, 그 부분을 별도로 대응했습니다.
이 내용은 보족 글에서 자세히 다룹니다.
향후에는 Modbus, OPC-UA 등 다른 통신 방식으로도 확장할 계획입니다.
PLC를 잘 모르는 사람도 쓸 수 있나요?
쓰는 목적에 따라 다릅니다.
설정하고 등록하는 건 엔지니어가 합니다.
어느 주소를 볼지, 어떤 이름으로 표시할지 이런 건 PLC를 아는 사람이 한 번만 해두는 것들입니다.
한 번 설정이 끝나면, 확인 모드 URL로 접속하는 사람은 PLC 지식이 없어도 됩니다.
"초록이면 신호 들어온 것, 회색이면 안 들어온 것" 정도만 알면 배선 확인이 가능합니다.
외주 작업자나 운전원도 쓸 수 있게 만드는 게 목표입니다.
현장에서 반복되는 불편함에서 시작한 프로젝트입니다.
비슷한 경험이 있으신 분들이 공감해주셨으면 합니다.
'(개인Project)_개발 > PLC-PC 연결' 카테고리의 다른 글
| [Program][Phase1.5] PLC 껐다 켜도 데이터 남기는 방법 (SQLite 전환으로 이력 관리 시작) (0) | 2026.05.12 |
|---|---|
| [Program][보족] Mitsubishi MC Protocol로 Keyence PLC 연결하기 ( 주의할 것들) (0) | 2026.05.02 |
| [Program][보족] 등록한 포인트가 새로고침하면 사라지는 버그 (원인과 해결 한 줄) (0) | 2026.05.01 |
| [Program][보족] GitHub 몰라도 괜찮다 (PLCLink 다운받는 법 단계별 정리) (0) | 2026.04.30 |
| [Program][Phase_0] HMI 없어도 브라우저로 PLC IO 본다 (PLCLink Phase 0 구현기) (0) | 2026.04.29 |