AIエージェントからPLCにアクセスしてみた【第3回:プロンプトからPLCを停止する?】

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

第2回でバイブコーディングしたMCPサーバは、PLCのワードデバイスとビットデバイスの読み書きしかできませんでした(4つのツールのみ)。今回(第3回)は、接続先PLC(IPアドレス)の変更と、PLCをメンテナンス(CPUを停止)するツールをバイブコーディングで追加してみます。

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

TCPコネクションを再確立するAPIとツールを追加

第2回で作成したMCPサーバ(plc-controller)は、「mcp.json」に設定したIPアドレス(192.168.200.2)のPLCに対して、起動時にTCPコネクションを確立しています。これを、IPアドレスとポート番号を指定して、コネクションを再確立できるようにプログラムをバイブコーディングで改修します。

plc-controllerの接続先IPアドレスとポート番号の設定

 

それでは、Cursorプロンプトから『IPアドレスとポート番号を指定して、TCPコネクションを再接続できるようAPIを追加して。』と指示します。

Cursorプロンプトからコードの改修を指示

 

そうすると、追加するAPIとツールなど改修内容の説明が出力され、プログラムの自動コーディングが終わりました。

追加したAPIやツールなど改修内容の説明

 

追加したAPIとツールの「reconnect」をコードレビューで確認します。ブルーの四角線で囲った部分が該当箇所です。

追加したAPI:reconnect(右側のブルー枠内)
追加したツール:reconnect(右側のブルー枠内)

 

MCPサーバへ追加した新しいツールを使うために、「plc-controller」を再起動します。そうすると、「reconnect」のツールが表示されました。

MCPサーバの設定に追加した新しいツール「reconnect」

 

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

PLCのCPUを停止するAPIとツールを追加

続いて、ちょっと危険そうなツールを追加してみます。PLCとの通信プロトコルであるSLMP(Seamless Message Protocol)には、PLCをメンテナンスするための通信仕様も備わっています。その一例として、PLCのCPUをストップできるように改修してみましょう。

Cursorプロンプトから『PLCのCPUをストップできるようAPIを追加して。』と指示します。

Cursorプロンプトからコードの改修を指示

 

追加するツールなど改修内容の説明が出力され、プログラムの自動コーディングが終わりました。

追加するツールなど改修内容の説明

 

追加したツールの「stop_cpu」のコードを確認すると、「安全上の重要警告」のコメント(ブルーの四角線で囲った部分が該当箇所)が入っています。こうしたコメントの内容は、AIエージェントがプロンプトから指示を受けた際に用いられるはずです(ガードレールや意図しない誤操作の防止)。

追加したツール:stop_cpu の警告コメント(右側のブルー枠内)

 

MCPサーバの「plc-controller」を再起動し、「stop_cpu」のツールが表示されることを確認します。

MCPサーバの設定に追加した新しいツール「stop_cpu」

次回(第4回)の話は

次回は、今回新規にバイブコーディングで追加したツールを含め、実際にAIエージェントのプロンプトからPLCに対して指示を出し、正しく動作することをテストします。また、こうしたMCPサーバに関するセキュリティリスクもあわせて考察します。

よくある質問(FAQ)

今回のプログラム改修はどのように行われていますか?

Cursorのプロンプト機能を用いたバイブコーディングによって実装されています。人が自然言語で「IPアドレスとポート番号を指定して再接続できるようAPIを追加して」「PLCのCPUをストップできるようAPIを追加して」と指示し、AIが自動でコード生成や説明を行っています。

「stop_cpu」ツールを使用する際、プログラム上にはどのような配慮がされていますか?

コードレビューの画面で確認できるように、「安全上の重要警告」のコメントがプログラム内に組み込まれています。このような警告コメントは、AIエージェントがプロンプトから指示を受け取って動作する際の安全性(ガードレールや意図しない誤操作の防止)に寄与します。

SLMPとはどのような通信プロトコルですか?

Seamless Message Protocolの略で、主に三菱電機のPLCなどで使用される通信プロトコルです。Ethernetのネットワーク経由で、PLCのデバイスメモリの読み書きだけでなく、今回追加したようなメンテナンス機能(CPUの停止・起動など)の制御もサポートしています。

おすすめの記事