AIエージェントからPLCにアクセスしてみた【第1回:全体の概要】
AIのプロンプトからPLCのデバイスメモリを読み出す。

「AIのプロンプトからPLCのデバイスメモリを読み出してみたい?」そんな単純な思いつきと、「生成AIに関するセキュリティについて考察したい」という自身のスキルアップのために、PLCと通信するMCPサーバを作成してみました。

その第1回では、全体の概要を話します。

PLC:Programmable Logic Controller(工場の機械設備などを自動で動かすための制御コントローラ)
MCP:Model Context Protocol(AIと外部のデータソースやツールを安全かつ統一的に接続するための標準規格)


そもそもの経緯

ここ最近、ISMS(ISO/IEC 27001)の審査員として、AI関連のスタートアップ企業を審査する機会が増えました。審査対象の企業が使用しているAIサービスなどで、名前は聞いたことがあるが、自分が使ったことのないものが急激に増えました。また、新しいサービスがどんどん増えていくのと、名前さえ知らないサービスもあります。
特にクラウドサービスの開発現場では、Cursor(AIコーディングプラットフォーム)が広く使われています。そこでは、バイブコーディング(AIによるコード生成)が行われており、自身がプログラマーとして活躍していた時代とは、ソフトウェア開発の環境がとても大きく変わっています。しかし、私もマイクロソフトのVisual Studioなどを使っていた経験から、なんとなくエディターツール的な画面のインターフェイスにはなじみがあり、Cursorを使ってソフトウェアの開発をしてみたくなりました。
また、私は若いころからPLCとの通信プログラムを、C言語、C++、Java、Pythonなどで開発してきたので、このようなプログラミングには大変興味があります。

AIエージェントの普及が急速に進む中、
「もしかして、AIのプロンプトからローカル接続したPLCにアクセスできるのでは?」
そんな単純な思いつきから、PLCと通信するMCPサーバを作成し、それを実装し、テストしてみました。もちろん、本業のセキュリティコンサルタントとして、AIセキュリティの知見を深めたいのは言うまでもありません。

MCPサーバとは?

最初に疑問だったのが、AIエージェントがいろいろなサービスと、どのようにAPI(Application Programming Interface:プログラム同士が連携する仕組み)で接続しているのかという点です。ここで、MCPという標準規格を知ることになります。MCPの詳しい説明は今回省きますが、ざっと下図のようなイメージになります。

MCPの全体イメージ

 

なので、PLCと通信する「MCPサーバ」を作成してAIエージェントに実装すれば、「プロンプトから問い合わせすることができそう・・・」だと、わくわくした気持ちになりました。

OTセキュリティ対策のご相談はこちら

開発や実装、テストまでの全体像

「MCPサーバ」のプログラミング言語は、pythonを使いました。もちろん、Cursorでのバイブコーディングです。

作成したMCPサーバのソースコード

 

作成した「MCPサーバ」は、Cursorに実装しました。

MCPサーバをAIエージェントに実装する。

 

プロンプトで「D0から5点データを読み出して、10進数で表示して。」と入力すると、

AIのプロンプトからPLCのデバイスメモリを読み出す。

ちゃんと結果が返ってきます!
この5点のデータは、工程ラインの温度や圧力、流量などの値を示します。
D0:30.954 kg/h(○○工程△△装置の処理流量)
D1:27.326 ℃(○○工程□□機械の原料温度)

なお、それぞれの詳しい話は、続く個別の回とさせてください。

次回(第2回)の話は

次回は、pythonで「MCPサーバ」のプログラミングをどのように行ったかを話します。もちろん、バイブコーディングです。

  • pythonで作成するMCPサーバのソースコード
  • PLCとの通信を実現するpythonのライブラリ
  • PLC側の通信設定

などを具体的に話すつもりです。

よくある質問(FAQ)

PLCとは?

工場の生産ラインなどを運転制御するコントローラ(コンピュータ)です。「シーケンサー」とも呼ばれます。いわゆるOT(Operational Technology:制御技術)の分野で汎用的に数多く使われている制御機器です。

PLC通信とは?

ここでは、PLCとパソコンが Ethernet経由(ローカルLAN)で通信することを示しています。PLCの「CPUユニット」や「Ethernetユニット」がLANケーブルでネットワークスイッチに接続し、上位レイヤー(パソコン機器等)との通信を行います。その他の通信として、PLC同士をつなぐPLCネットワークや、PLCと下位の計測機器等を接続するフィールドネットワークなどがあります。

PLCのデバイスメモリとは?

PLC内部のプログラム(ラダープログラム等)や外部機器(センサー等を含めた入出力機器)とのやり取りで用いる記憶領域です。たとえば、"D0"だと、"D" というデバイスの名称で、アドレスが "0" の16ビットメモリを示します。デバイスメモリの仕様は、PLC機器のメーカごとに異なることが多いです。

おすすめの記事