16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python】PLC/SCADA学習環境を自作する:PLC・デバイス・自作ラダー言語のシミュレータとCLIの実装まとめ

16
Last updated at Posted at 2025-12-26

これまでWebシステムや業務アプリケーションの開発を中心に仕事をしてきましたが、
最近「AI時代において価値のあるエンジニアとは何か」を考えるようになり、

SCADAというキーワードを知り、触ってみたいと思い立ったときに立ちはだかった、
PLCというキーワード。。。

これを理解するために、シミュレーターを作って理解してみたことの整理・アウトプットのリンク集です。

このシミュレータを使って複数PLCでの環境実行をした記事のまとめはこちらです。

なぜ、シミュレータを作ったのか?

PLC(プログラマブルロジックコントローラ)やSCADA(監視制御システム)の世界は、実機が高価であったり、独自の作法があったりと、ソフトウェアエンジニアにとっては少し敷居が高い分野です。

「実機がないなら、Pythonで作ればいいじゃないか」

そんな思いつきから始まりました。

このアウトプットでは、PLCのメモリモデルの実装から、独自のラダー言語パーサー、Modbus通信、さらには現場の通信遅延を再現する仕組みなど、
想像・妄想範囲で思いついたあったほうが楽しいかも!という 「産業用制御システムのミニチュア」 をフルスクラッチで構築しました。

本記事は、その全ステップを俯瞰するためのインデックス(目次)です。

システム構成図

今回の開発で実装した機能の全体像です。

コード類はこちらに公開しています。

遊んでみたい方がいらっしゃれば使ってみてください。

各記事の紹介

SCADA開発学習のために、PLCシミュレータへ「freeze障害」を入れた理由

  • PLCがフリーズする状況を再現した話です。
  • この記事まででいったん、PLCシミュレータの作成はFixさせてSCADA学習を本格化させます。

【激ハマり&大反省】PLCシミュレータ自作:Modbus標準アドレス対応と「入力注入(SIM_INJECT)」機能の対応

  • 作ったシミュレータを本格的に使ったときに発生した modbus仕様理解の甘さが招いた仕様バグと対峙した話です。

1. WebエンジニアがSCADAに興味を持ち、PLCを理解するために自作シミュレータを作った話

  • なんでシミュレータを作ろうと思ったかの初めの記事です。

2.Pythonで自作したPLCシミュレータを「Docker風」にオーケストレーションしてみた 〜カオスエンジニアリングを添えて〜

  • 複数のシミュレーターを個別に実行することに疲れたときに作ってみた機能の話です。

3.WebエンジニアのためのPLC入門:自作エミュレータの実装でわかった「通信」と「スキャン」の正体

知識ゼロベースのWebエンジニアがPLCシミュレートして理解したことの話です。

4. 全体の司令塔:Orchestrator編

  • 複数のPLCやシミュレータをYAML定義から一括起動する「オーケストレータ」の実装の話です。

5. Larkパーサーで作る「俺々ラダー言語」の実装編

  • Larkライブラリを使い、テキスト形式のラダー図を抽象構文木(AST)へ変換するパーサーの自作の話です。

6. Modbusメモリマッピングと意図的な「遅延」を生むカオス・コンテキスト編

  • Pymodbusを使った通信の実装と、ラッパーによる「意図的な通信遅延(カオス注入)」の仕組みの話です。

7.現場を模倣する:デバイスシミュレータ編

  • センサーのON/OFFパターン再現と、ハートビート監視による安全な停止制御の実装の話です。

最後に:この開発を通じて得られたもの

「PLCとは何か?」というゼロベースの問いから始まり、自作を通じて 「産業用制御は、いかに泥臭い時間の制御とメモリの奪い合いで成り立っているか」 を肌で感じることができました。

次にやりたいこと

今後はこのシミュレータをバックエンドに、htmxでのリアルタイム監視画面の作成や、時系列データとしてのロギング基盤構築にも挑戦してみたいです。
また、pythonのmodbusライブラリを活用してplcから受信するデータをイベント化して、扱いやすくする機能にも挑戦してみたいです。

16
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?