PLC 데이터를 웹에서 보려는 요구는 대부분 "Modbus로 읽어서 DB에 넣고 그래프로 그린다"로 수렴합니다. 문제는 폴링 주기와 저장 구조 설계입니다.
1초 폴링은 대부분 과합니다. 값의 변화 주기를 먼저 관찰하는 것이 좋습니다.
| 데이터 | 권장 주기 | 이유 |
|---|---|---|
| 온도·압력 | 5~10초 | 물리적으로 급변하지 않음 |
| 모터 전류 | 1초 | 과부하 조기 감지 |
| 카운터·생산수량 | 10~30초 | 누적값이라 손실 없음 |
관계형 DB에 모든 샘플을 넣으면 금방 커집니다. 태그별로 최근 값(현재값 테이블)과 이력(시계열)을 분리하는 것이 실무적입니다.
-- 현재값은 태그당 1행 유지
CREATE TABLE tag_current (
tag_id TEXT PRIMARY KEY,
value REAL, quality INTEGER, ts TEXT
);
-- 이력은 시간 인덱스 필수
CREATE INDEX idx_tag_ts ON tag_history(tag_id, ts);
대시보드는 1초마다 갱신될 필요가 없습니다. 화면 갱신 주기와 수집 주기를 분리하면 부하가 크게 줄어듭니다.