식품공장 릴레이 입력을 MySQL에 기록하고 대시보드에서 확인하는 방법

입력 상태를 남겨야 운영 판단이 쉬워집니다
식품공장에서는 설비의 입력 상태를 현재 화면에서 보는 일과, 언제 바뀌었는지 다시 확인하는 일을 구분해야 합니다. 현재 값만 있으면 가동 중 확인에는 도움이 되지만, 교대 후 특정 시점의 상태를 되짚기 어렵습니다. 따라서 릴레이 입력의 수신 시각과 저장 이력을 한 흐름으로 묶어 관리합니다. 한국식품안전관리인증원 자료도 공정 자료의 자동 추출·전송·기록관리 흐름을 소개합니다.
식품의약품안전처 안내는 스마트 HACCP의 중요관리점 모니터링 데이터를 실시간으로 자동 기록·관리하는 방식을 설명합니다. 이 글의 예제는 한 공정의 릴레이 입력을 받아 MySQL에 남기고, 화면에서 최근 값과 과거 기록을 확인하는 구성입니다. 여기서 릴레이 입력은 온도나 압력 같은 연속 측정값이 아니라 장치가 발행하는 상태값으로 다룹니다. 이 상태값만으로 식품안전 기준의 적합 여부를 판정하지는 않습니다.

입력 상태를 받아 기록과 화면 조회로 연결하는 순서입니다.
기록 범위부터 정합니다
처음에는 어떤 입력을 보고, 메시지가 올 때마다 남길지, 정해진 간격의 최신값을 남길지 결정합니다. 이 선택에 따라 같은 상태라도 이력의 행 수와 해석 방식이 달라집니다. 값 자체뿐 아니라 수신 여부와 저장 성공 여부를 함께 살피면, 상태가 계속 유지된 것인지 새 메시지가 들어오지 않은 것인지 구분하는 데 도움이 됩니다.
식품공장 모니터링에서는 설비 데이터 수집 범위를 작게 시작하는 편이 점검하기 쉽습니다. 릴레이 입력 한 대의 통신과 기록을 먼저 확인하고, 같은 설정 절차를 검증한 뒤 범위를 넓힙니다. 이 글은 입력 기록과 조회를 다루며, 릴레이 출력 제어는 예제 범위에 넣지 않습니다.
현장 장치에서 운영 화면까지 잇습니다
현장의 EASY-LINK RELAY 장치가 입력 상태를 MQTT로 보내고, EASY LOGGER가 그 값을 구독해 수집하는 흐름으로 구성합니다. MQTT는 장치가 브로커에 발행한 메시지를 다른 장치가 구독해 받는 방식입니다. 이 예제에서 EASY-LINK는 연결 역할을 맡으며, RELAY 입력의 ROOT KEY는 매뉴얼에 적힌 STATUS를 사용합니다.
EASY LOGGER는 현장 값을 받는 산업용 IoT 게이트웨이이자 저장·표시를 맡는 운영 계층입니다. 장치가 센서처럼 직접 상태를 측정한다고 가정하지 않고, 들어온 값을 수집해 MySQL에 남기고 대시보드에서 조회합니다. EASY LOGGER 대시보드에서 저장 이력과 전달 상태를 함께 확인하도록 화면을 구성합니다.
연결은 MAIN 설정의 CONNECTION PROTOCOL에서 EASY-LINK를 선택해 등록합니다. PRODUCT는 RELAY로 고르고, 자체 브로커라면 Self · 관리자 MQTT 재사용, 현장 브로커를 사용한다면 External · 장치 브로커를 선택합니다. External에서는 BROKER HOST, PORT, USERNAME, PASSWORD, CLIENT ID, TLS를 실제 브로커 설정에 맞춰 입력합니다.

메시지 수신 뒤 저장 상태와 화면 표시를 확인하는 구조입니다.
수집 조건과 MySQL 저장을 설정합니다
PLC 연결 설정에서 PLC NAME을 정하고 연결 테스트를 실행한 뒤 PLC 저장을 누릅니다. 이어 수집 조건 설정에서 CONFIG NAME과 PLC SELECT를 지정합니다. EASY-LINK는 시작 번지와 디바이스 수 대신 SUBSCRIBE TOPIC, ROOT KEY, ADDRESSES를 사용하므로, 현장에서 토픽 스캔으로 실제 발행 토픽과 키를 확인해 입력합니다.
RELAY 입력의 ROOT KEY는 STATUS로 둡니다. ADDRESSES에는 토픽 스캔에서 확인한 주소키만 넣고, 메시지마다 한 행을 남기려면 TRIGGER를 On message로 선택합니다. 일정 주기마다 최신값 한 행을 남겨야 할 때는 Timer를 선택합니다. WRITE TOPIC을 비워 두면 읽기 전용이므로 이 예제에서도 비워 둡니다.
DB 설정에서는 저장 방식을 MySQL로 정하고 ENABLE을 켭니다. DB Name, Host Address, Port, User, Password를 채운 다음 연결 테스트와 설정 저장을 순서대로 실행합니다. 자체 DB를 쓰는 경우 Host Address는 매뉴얼의 127.0.0.1이며, 이 예제에서는 현장의 실제 DB 주소를 사용합니다. DB와 로컬 CSV 저장은 동시에 켤 수 없습니다.
설정 뒤에는 저장 PLC 목록의 STATUS와 저장 설정 목록의 STATUS를 확인합니다. 브로커가 끊기면 해당 EASY-LINK 설정만 SKIPPED가 되고, 연결이 복구되면 재개됩니다. DB 이력 로그에서 전체 처리 건수, 성공률, 마지막 오류 시각을 보고, DB 조회의 Timestamp, Config, Address, Value에 실제 기록이 생기는지 확인합니다.
EASY LOGGER 대시보드 예제
Dashboard/대시보드는 받은 상태를 한눈에 보고, 기록 화면에서 같은 구간을 다시 찾기 위한 표시 화면으로 구성합니다. 매뉴얼에 있는 게이지와 그래프를 이용하되, 여기의 영문 표기는 운영자가 정하는 화면 설명이며 제품의 기본 필드명으로 가정하지 않습니다.
첫 widget/위젯에는 가장 최근 Value를 current value로, 옆에는 그 행의 Timestamp를 last reception time으로 배치합니다. 아래에는 저장 설정의 STATUS와 화면 하단 MQTT·DB 상태 표시등을 근거로 delivery state를 설명하고, 그래프에는 history를 배치합니다. 현재 표시와 이력 그래프를 나란히 두면 수신·저장·표시의 어느 단계까지 확인했는지 읽기 쉽습니다.
확인할 때는 먼저 상태 표시등의 MQTT와 DB를 보고, 저장 설정 목록의 RUNNING 또는 SKIPPED를 읽습니다. 이어 DB 조회에서 기간을 지정해 기록을 찾고, 필요한 구간은 조회 후 CSV 출력으로 내려받습니다. 수신이 멈춘 경우 STALE AFTER (MS)를 설정했다면 값이 null로 저장되고 결함으로 표시되는지도 확인합니다.
전달 대상을 비교하고 적용 범위를 정합니다
이 구성의 주 전달 대상은 MySQL입니다. MySQL은 수집값을 데이터베이스에 쌓아 DB 조회와 기간별 기록 확인에 쓰며, DB 서버 접속 정보와 저장 공간을 관리해야 합니다. MQTT는 현장 장치의 값을 구독하는 연결 경로이고 외부 발행에도 쓸 수 있지만, 브로커 연결 상태를 따로 확인해야 합니다. HTTP API는 외부 시스템으로 값을 전달하는 경로로 매뉴얼에 제시되어 있으며, 이 예제의 저장 이력은 MySQL의 DB 조회에서 확인합니다.
다른 설비의 데이터 연동이나 센서 데이터 수집을 넓힐 때는 MAIN 설정의 통신 방식부터 확인합니다. 예를 들어 LS PLC를 붙이는 경우 매뉴얼의 LS F-NET / XGT TCP 항목에 IP와 Port, XGT 계열을 넣어 별도 등록합니다. 릴레이 입력 예제의 MQTT 구독과 PLC 직접 읽기는 등록 방식이 다르므로, 화면의 STATUS를 각각 확인합니다.
제품 개요와 블로그 목록에서 적용 범위를 살펴볼 수 있습니다. 다른 식품 설비의 저장 사례는 살균기 기록 구성을 참고합니다. 우선 토픽 스캔 결과와 DB 접속 정보로 현장 연결 가능 여부를 확인하고, 필요한 입력만 정해 상담하면 됩니다.