PLCデータをWebで見たいという要望は、ほとんどが「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秒ごとに更新される必要はありません。画面更新周期と収集周期を分離すれば負荷が大きく減ります。