はじめに
これまでWebシステムや業務アプリケーションの開発を中心に仕事をしてきましたが、
最近「AI時代において価値のあるエンジニアとは何か」を考えるようになりました。
AIやデータ分析が一般化する中で、
単にデータを「使う側」だけでなく、
データを「生む側」に近いシステムを理解していることが重要になるのではないか
と感じるようになりました。
その中で興味を持ったのが SCADA(監視制御システム) です。
1. なぜSCADA開発に携わりたいと思ったのか
SCADAは、工場設備やセンサーなどから直接データを収集し、
現場の「事実」を扱うシステムです。
Webシステムとは違い、
- 常に動き続ける
- 正確さより安定性が重視される
- データが欠損・遅延することが前提
といった、まったく異なる設計思想を持っています。
AI時代において価値を生むのは
「どんなモデルを使うか」よりも
「どんなデータを、どのように取得しているか」 だと考えています。
その入口にあるSCADAを理解できれば、
長期的にも“つぶしの効く”エンジニアになれるのではないかと思い、
この領域に興味を持ちました。
2. PLCに関する理解整理(Webエンジニア視点)
SCADAを調べる中で、必ず出てくるのが PLC です。
PLCについて学び始めて、最初に戸惑ったのは
Webシステムとは設計思想がまったく違う という点でした。
- イベント駆動ではなく、スキャン方式
- 入力(X) / 出力(Y) / 内部リレー(M) / データレジスタ(D)
- 「1回取れればOK」ではなく、常に値が揺れ続ける世界
特に印象的だったのは、
PLCでは「今この瞬間の値」よりも
状態の変化や継続性 が重要になる点です。
この感覚は、実際に値が流れる様子を見ないと理解しづらいと感じました。
3. 実機が触れないので、PLCシミュレータを作ってみた
PLCを理解するには、実際に触るのが一番だと思いました。
しかし、個人でPLC実機を用意するのはコスト的に現実的ではありません。
そこで、
「お金はないが、PLCには触れてみたい」
という理由から、
PLCの最低限の振る舞いを再現する 簡易PLCシミュレータ を
Pythonで自作してみることにしました。
目的は以下です。
- PLCのスキャンモデルを理解する
- PLCメモリ(X/Y/M/D)の役割を体感する
- SCADAが「PLCからデータを取得する」とはどういうことかを掴む
4. シミュレータの構成
シミュレータは、以下の3要素で構成しています。
PLCシミュレータ
- X / Y / M / D メモリを保持
- スキャンサイクルでラダー風ロジックを評価
- Modbus TCPで外部と通信
デバイスシミュレータ
- センサーを模した値の変動
- ON/OFFパターン
- パルス信号(瞬断)
通信
- Modbus TCP(pymodbus使用)
設定はすべてYAMLで定義し、
コードを書き換えずに構成を変更できるようにしています。
5. 作って分かった「PLCデータ取得」の本質
シミュレータを作ってみて強く感じたのは、
「PLCからデータを取得する」とは、
単に値を読むことではない
という点です。
- 値は常に変わる
- 一瞬しか立たないビットがある
- 通信が途切れる前提で考える必要がある
SCADAは、
こうした 不完全で揺らぐデータ を前提に設計されているシステムだと実感しました。
先輩から
「まずはPLCからデータを取得する箇所を理解することが重要」
と言われた意味が、ようやく腑に落ちました。
6. 今後やりたいこと
次のステップとして、以下を考えています。
- 状態遷移(OFF→ONなど)をイベントとして切り出す
- メッセージングによる上位システム連携
- SCADA的なタグ管理・履歴管理
PLC → SCADA → データ活用
この流れを一通り理解できることを目標にしています。
おわりに
本記事は、
「SCADAに興味はあるが、PLCがよく分からない」
というWebエンジニア視点での試行錯誤の記録です。
同じような立場の方の参考になれば幸いです。