식품공장 세척수 유량 이력, 세척 공정을 비교하는 기준

세척 완료보다 과정이 궁금할 때가 있어요
식품공장에서 세척 완료 표시만 남으면 다음 회차와 무엇이 달랐는지 설명하기 어려워요. 세척수 유량이 어느 시각에 오르기 시작했고, 얼마나 이어졌으며, 중간에 값이 비었던 구간은 없었는지를 함께 봐야 해요. 유량 이력은 위생 상태를 자동 판정하는 값이 아니라 작업 기록과 현장 확인 순서를 더 선명하게 만드는 운영 자료예요.
식품의약품안전처의 HACCP 관리 표준기준서 안내는 모니터링 체계, 검증 방법, 문서화와 기록 유지를 관리 요소로 제시해요. 선행요건에는 위생관리와 용수관리, 점검 양식도 포함돼요. 다만 공정별 유량 기준은 사업장의 HACCP 기준, 설비 제조사 지침과 실제 검증 결과를 따라야 해요.
회차와 시간을 먼저 맞춰요
순간 유량 하나만 저장하면 세척 한 회의 흐름을 복원하기 어려워요. 배치 ID, 세척 시작·종료 시각, 현재 유량, 누적량, 측정 시각과 수신 상태를 같은 회차에 묶어야 해요. 그래야 실제 무유량과 통신 공백을 구분하고, 세척 조건이 같은 회차끼리 추세를 비교할 수 있어요.
먼저 “정상인가요?”보다 “어느 설비의 어느 회차인가요?”를 물어야 해요. 제품 종류, 세척 방식, 밸브 상태와 작업 변경 시각이 다르면 곡선도 달라질 수 있어요. 숫자 하나로 세척 적합 여부를 확정하지 않고, 현장 기록과 함께 판단하는 이유예요.
EASY LOGGER MySQL 예제
세척수 유량이 LS PLC에 들어온다면 EASY-LINK는 LS XGT 값을 읽어 MySQL로 전달하는 연결 계층을 맡을 수 있어요. 한 유량계의 값을 이미 운영 중인 외부 DB에 남기는 목적이라면 이 구성으로 작게 시작할 수 있어요. EASY-LINK는 센서 배율이나 세척 기준을 정하지 않고, 현장 데이터를 목적지까지 연결해요.
여러 라인의 수집 주기와 저장 이력, 전달 상태를 한곳에서 운영하려면 EASY LOGGER를 함께 검토할 수 있어요. EASY LOGGER는 통합 수집·저장·전달 운영 계층이며, 아래 SQL은 EASY LOGGER 내부 스키마가 아니라 수신 측이 관리하는 외부 MySQL 테이블 예시예요. cleaning_flow_history에는 회차 흐름, 시작·종료 시각과 수신 상태를 함께 남겨요.
SELECT
h.batch_id,
MIN(h.measured_at) AS cleaning_started_at,
MAX(h.measured_at) AS cleaning_ended_at,
ROUND(AVG(h.flow_lpm), 2) AS average_flow_lpm,
(
SELECT h2.receive_state
FROM cleaning_flow_history AS h2
WHERE h2.line_id = h.line_id
AND h2.batch_id = h.batch_id
AND h2.measured_at >= '2026-07-28 09:00:00'
AND h2.measured_at < '2026-07-28 10:00:00'
ORDER BY h2.measured_at DESC, h2.receive_state DESC
LIMIT 1
) AS latest_receive_state
FROM cleaning_flow_history AS h
WHERE h.line_id = 'CIP_LINE_01'
AND h.measured_at >= '2026-07-28 09:00:00'
AND h.measured_at < '2026-07-28 10:00:00'
GROUP BY h.line_id, h.batch_id
ORDER BY cleaning_started_at;
latest_receive_state는 각 회차에서 measured_at가 가장 늦은 행의 수신 상태예요. 같은 측정 시각이 겹치면 receive_state DESC를 보조 정렬로 써 결과를 고정해요. DB History에서 batch_id와 시간 범위로 검색해 회차가 한 묶음으로 보이는지 확인해요. 보존 기간을 바꾸기 전에는 필요한 비교 기간과 백업 정책을 먼저 합의해요. 수집 시각과 DB 도착 시각을 나누면 실제 흐름이 멈춘 것인지 늦게 받은 것인지도 구분하기 쉬워요.

세척수 유량과 세척 시간을 LS PLC에서 읽어 MySQL과 연동 경로로 전달하는 흐름이에요.
EASY LOGGER MQTT 예제
같은 값을 여러 서비스가 실시간으로 받아야 한다면 MQTT가 잘 맞아요. MAIN 설정의 PLC 이름을 CIP_PLC, 설정 이름을 CIP_FLOW로 둔 예시에서 Automatic Topic Preview는 아래 READ Topic과 WRITE Topic을 만들어요. 실제 이름과 주소는 반드시 현장 주소 맵과 대조해야 해요.
READ Topic: CIP_PLC/CIP_FLOW/READ
WRITE Topic: CIP_PLC/CIP_FLOW/WRITE
READ payload는 EASY LOGGER 공식 필드인 plc_name, config_name, data_type, timestamp, values를 사용해요. 여기서 D0300은 유량계 배율 적용값과 대응하는 예시 주소예요.
{
"plc_name": "CIP_PLC",
"config_name": "CIP_FLOW",
"data_type": "float",
"timestamp": "2026-07-28T09:12:30",
"values": {
"D0300": 12.4
}
}
WRITE는 읽기 검증과 분리해야 해요. 아래 D0999는 실제 밸브나 펌프 출력에 연결하지 않고, 현장 주소 문서에서 검증 전용 WORD로 승인한 뒤 사용하는 시험용 주소 예시예요. 주소가 실제 CONFIG 범위에 있는지 확인한 뒤 values 형식으로 보내요.
{
"data_type": "word",
"values": {
"D0999": 0
}
}
- Subscribe to the WRITE Topic.
- 시험용 주소만 사용합니다.
- 최소 권한만 부여합니다.
- 허용 주소 범위를 제한합니다.
- PLC 인터록을 확인합니다.
- 수동 복구 절차를 준비합니다.
수락 기준도 화면 이름에 맞춰 두면 원인을 빨리 좁힐 수 있어요. Automatic Topic Preview에서 두 Topic을 확인하고, Runtime Status에서 연결·SUBSCRIBED·DROPPED WRITES·LAST ERROR를 봐요. Subscribed Payload Log에서는 수신 시각, WRITE Topic과 JSON이 남는지 확인해요. HTTP API는 정해진 서버의 요청·응답이 중요할 때 대안이 되고, MQTT와 병행한다면 주소·단위·시각 정의는 하나로 유지해요.
EASY LOGGER 대시보드 예제
Dashboard는 수집한 값을 한눈에 확인하는 운영 화면이에요. batch total 위젯에는 회차 누적량을, current value 위젯에는 현재 유량을 놓아요. last receive time과 missing interval은 최신성과 누락 구간을, delivery state는 MySQL·MQTT 전달 상태를 보여줘요. history 그래프에는 같은 조건의 세척 회차를 겹쳐 비교해요.

반복되는 세척 회차의 유량·시간 이력과 전달 상태를 한 운영 기준으로 비교하는 모습이에요.
대시보드는 HACCP 적합 여부를 결정하거나 세척 밸브를 임의로 제어하지 않아요. 승인된 제어 로직과 인터락은 기존 PLC에 유지하고, 화면은 이력·추세·전달 상태를 관찰하는 데 써요. MES나 CIM 같은 상위 시스템은 MQTT, HTTP API 또는 DB 인터페이스 범위에서 필드와 권한을 합의해 연계해요.
한 세척 구간부터 확인해요
처음에는 유량계 한 대와 세척 구간 하나만 연결해요. 현장 표시값, PLC 원시값, MySQL 기록과 MQTT payload를 같은 시각에 대조하고, 통신을 잠시 끊었다가 복구했을 때 누락·중복·지연 표시가 의도대로 남는지 살펴봐요. 읽기 흐름이 안정된 뒤에만 WRITE 시험 범위를 열어요.
저장 구조는 EASY LOGGER DB 설정 가이드, 관련 활용 글은 기술 블로그 목록에서 이어서 볼 수 있어요. 설비 모델, 유량계 출력, LS PLC 주소와 원하는 보존 기간을 정리했다면 HT Automation 홈페이지에서 현재 구성의 현장 연결 가능 여부를 부담 없이 확인해 보세요. EASY-LINK만으로 충분한지, 여러 회차의 저장·전달 상태와 대시보드까지 운영하려면 EASY LOGGER가 필요한지 연결 범위부터 나눌 수 있어요.