【Blog】ChatGPTで三菱PLC FX5を解析・ST言語化する方法|GX Works3対応例
- 河野譲二

- 1 日前
- 読了時間: 5分
数か月前にChatGPTでST言語を生成できるデモを行ったのですが、その第2弾を!
今回は三菱電機製FX5シリーズ×ChatGPTでお届けします!またST言語を生成するだけでなく、プログラムの解析ができるか検証してみたいと思います!
ChatGPTで三菱PLC FX5のラダープログラムを解析する
自分以外の人が設計したラダー・・・よく意味が分からないことありますよね?・・・ね?
そんな時は一度、プログラムをスクショしてAIに投げかけて見てください!
例えば↓のようなプログラム。

このプログラムをスクリーンショットし、生成AIに貼り付けた上で「この画像は三菱FX5シリーズを使用したラダープログラムです。内容を読み解き、日本語でプログラム内容を説明してください。」とプロンプトを打ち込みます。 すると、このように回答が↓↓↓
--------------------
画像のラダープログラムは、自動運転中の「生産時間」を秒・分・時で積算し、表示用データとして正規化する処理です。三菱 FX5 シリーズ(GX Works3)でよく使われる、運転時間カウンタの定番構成になっています。
以下、回路の流れに沿って説明します。
① 回路の前提条件(左側の接点)
M503:運転中
装置が「自動運転中」であることを示す内部リレー
SM412:1秒クロック
FX5 の特殊リレー
1秒周期でON/OFFするパルス
👉**「自動運転中かつ1秒ごと」**に、時間カウント処理が実行されます。
② 秒(s)のカウント処理:D2068
INC D2068
1秒ごとに D2068 を +1
D2068 = 「生産時間(秒)」
比較命令:K60 ≤ D2068
D2068 が 60秒以上になったかを監視
条件成立時の処理:
INC D2066 → 分を +1
MOV K0 → D2068 → 秒を 0 にリセット
👉60秒で1分に繰り上げる処理です。
③ 分(m)のカウント処理:D2066
INC D2066
秒が60になったタイミングで分を +1
比較命令:K60 ≤ D2066
分が 60分以上になったかを監視
条件成立時の処理:
INC D2064 → 時を +1
MOV K0 → D2066 → 分を 0 にリセット
👉60分で1時間に繰り上げる処理です。
④ 時(h)のカウント処理:D2064
INC D2064
分が60になったタイミングで時間を +1
比較命令:K24 ≤ D2064
時間が 24時間以上になったかを監視
条件成立時の処理:
MOV K0 → D2064 → 時を 0 にリセット
👉**24時間で0に戻す(1日周期)**構成です。
⑤ デバイス割り当てまとめ
デバイス | 内容 |
D2068 | 生産時間(秒) |
D2066 | 生産時間(分) |
D2064 | 生産時間(時) |
いずれもコメントから、「TP 自動運転画面 生産時間 表示用」として、GOT(タッチパネル)表示に使われる想定です。
⑥ このプログラムの特徴・評価
FX5 標準の SM412(1秒クロック)を使った堅実な構成
秒 → 分 → 時 の 多段カウンタ
表示用として扱いやすい(60進・24進)
異常に複雑なFBやタイマを使っていないため、
保守性が高い
トラブル時に原因を追いやすい
一言でまとめると
自動運転中だけ、生産時間を1秒単位で積算し、秒・分・時に正規化してタッチパネルに表示するプログラム
です。
もし次に
「停止中は止めたい/積算したくない」
「電源OFF後も保持したい」
「稼働率計算に使いたい」
などの発展用途があれば、そこも具体的に解説できます。
--------------------
このように日本語でわかりやすく解説してくれます!
理解しにくいプログラムがあったら、試しにAIに聞いてみると教えてくれるかもしれませんね!
キーエンスだけではない!三菱電機もST言語対応している!
KV-Xが発売されて、ST言語に興味をもった方もいるかと思いますが
実は三菱電機では以前より、ラダーとSTの両方記述が可能でした。
そこで・・・今回はスクショしたラダーをChatGPTが解説したものをST言語で生成し直してみます!
手順1:プロンプトを打ち込んでみる
私「先ほどの解説を基に、GXW3で使用できるST言語を三菱電機仕様に則り作成してください」
やはりこのプロンプトだけでは、構文エラー等の不具合がでましたので、エラーの内容を2~3回ほど指摘した結果、このようなプログラムが完成しました! ----------------------
// ------------------------------------------------------------
// 生産時間(秒/分/時)積算 + リセット
// M503 : 運転中
// SM412 : 1秒クロック
// D2068 : 秒, D2066 : 分, D2064 : 時
// M5100 : SM412前回値(内部使用)※未使用番号に変更可
// M5101 : 立上りパルス(内部使用)※未使用番号に変更可
// M504 : 生産時間リセット(外部/画面ボタン等)※未使用番号に変更可
// ------------------------------------------------------------
// --- リセット優先 ---
IF M504 THEN
// 表示用(時分秒)をクリア
D2068 := 0;
D2066 := 0;
D2064 := 0;
// 立上り検出内部もクリア(誤カウント防止)
M5100 := FALSE;
M5101 := FALSE;
ELSE
// --- 1秒クロック立上り検出 ---
M5101 := SM412 AND (NOT M5100);
M5100 := SM412;
// --- 運転中のみ積算 ---
IF M503 AND M5101 THEN
// 秒 +1
D2068 := D2068 + 1;
// 60秒で分へ繰上げ
IF D2068 >= 60 THEN
D2068 := 0;
D2066 := D2066 + 1;
END_IF;
// 60分で時へ繰上げ
IF D2066 >= 60 THEN
D2066 := 0;
D2064 := D2064 + 1;
END_IF;
// 24時で0へ
IF D2064 >= 24 THEN
D2064 := 0;
END_IF;
END_IF;
END_IF;
----------------------
※途中でリセットの条件も加えてます。
動作は以下の通り↓↓↓



このように、少しずつAIによって制御設計の仕事も変化していくことでしょう!
私はまだまだAIを使いこなせていないので、是非こんな使い方あるよ!と情報交換出来たらうれしいです!






コメント