【実機解説まとめ】Keyence PLC+FANUCロボットのデータをGrafanaで監視するまでの全4ステップ
導入:結論から先に
FANUCロボットの電流値や位置座標を自動で取り続けて、パソコンの画面で数秒ごとに更新される監視グラフにする。
ここまでを、追加で買うのはEthernetユニット1つだけで作れます。データを溜める・見せるためのソフトは、すべて無料のものです。
私はこれを、実際に自分の手元で動かしながら4本の記事に分けて書いてきました。ただ、1本ずつ読むと「で、これは全体のどのへんの話なんだろう?」と分かりにくかったと思います。
この記事は、その4本を作る順番に並べ直した案内図です。
「設備のデータを取りたいけれど、何から手をつければいいのか分からない」という方は、まずここを読んでください。自分がどこから始めればいいかが分かります。
全体像:何をどうつなぐのか
作るものは、こういう流れです。
やっていることを一言でいうと、「散らばっているデータを、1か所に集めて、見える形にする」だけです。
大事なのは、この4つがそれぞれ別の仕事だということです。
| 段階 | やること | ここでつまずくと |
|---|---|---|
| ①取る | ロボットのデータをPLCに集める | そもそもデータが存在しない |
| ②取る | PLCのデータをパソコンに持ってくる | データはあるが手が届かない |
| ③溜める | 持ってきたデータを保存する | 今の値は見えるが、過去が残らない |
| ④活かす | 保存したデータを画面にする | データはあるが誰も見ない |
よくある失敗は、いきなり④から考えてしまうことです。
「かっこいいダッシュボードを作りたい」から入ると、そこに流し込むデータがないことに後で気づきます。①から順に、一段ずつ進めるのが結局いちばん早いです。
かかる費用のこと
先にお金の話をしておきます。
| 使うもの | 費用 | 使うステップ |
|---|---|---|
| Keyence PLC(KV-8000など)/FANUCロボット | すでにある設備を使用 | 全体 |
| KV-XLE02(Ethernetユニット) | 別途購入が必要 | ステップ1 |
| KV STUDIO・PROTOCOL STUDIO | キーエンス製のソフト | ステップ1・2 |
| Python | 無料 | ステップ2・3 |
| SQL Server 2022 Express | 無料 | ステップ3 |
| SSMS(データベースの管理ツール) | 無料 | ステップ3 |
| Grafana | 無料 | ステップ4 |
唯一の追加購入:KV-XLE02
ステップ1で使うPROTOCOL STUDIOは、KV-XLE02というEthernetユニットがないと使えません。PLC本体だけでは動かないので、ここは買い足しが必要です。
先にお伝えしておきたいのは、このユニットが必要なのはステップ1だけだということです。
ロボットのデータではなく、PLCが持っているデータ(生産数・稼働状態など)だけで良い場合は、ステップ2から始められます。その場合はKV-XLE02も不要で、追加の購入はゼロです。
「溜める・見せる」は追加費用ゼロ
一方、ステップ3・4で使うソフトはすべて無料です。
ここが個人的にいちばん驚いたところでした。この手の仕組みは専用パッケージを買うものだと思っていたのですが、無料のソフトの組み合わせで、現場で使えるレベルのものができます。
ステップ1:取る① ロボットのデータをPLCに集める
まず、FANUCロボットが持っている情報をPLC側に引っ張ってきます。
Keyenceの PROTOCOL STUDIO という機能を使います。
先に注意点:ここだけハードの買い足しが必要です
PROTOCOL STUDIOは、KV-XLE02(Ethernetユニット)がないと使えません。PLC本体だけでは動かないので、持っていない場合は購入が必要です。
ロボットのデータが必要かどうかで判断してください。不要であれば、このステップは飛ばしてステップ2から始められます。
ここでできるようになること
- ロボットの現在位置(X・Y・Z・W・P・R)
- 各軸の角度(J1〜J9)
- 電流値(Q_CURRENT)
- アラーム情報
- 稼働時間
これらが、放っておいても自動でPLCのデバイス(DM11100番台)に入り続ける状態になります。プログラムを書く必要はありません。
つまずきやすい所
設定画面で「基本的な通信コマンドを追加する」にチェックを入れるだけで、上記のデータが一式そろいます。ここを知らないと、コマンドを1つずつ手作りすることになります。
一方で、FANUCロボット側は通信機能の有効化とIP設定に加えて、システム変数の設定が必要です。ここは機種によって変わるため、キーエンスの担当者さんに確認するのが確実です。
▶ 詳しい手順はこちら
【実機解説】Keyence PLCでFANUCロボットの電流値・位置座標を常時取得する方法(プロトコルスタジオ)
ステップ2:取る② PLCのデータをパソコンに読み出す
次に、PLCに集まったデータをパソコン(Python)から読み出します。
上位リンク通信という、キーエンスPLCに標準で入っている通信方法を使います。特別な機器は要りません。LANケーブルでつなぐだけです。
ここでできるようになること
Pythonから1行コマンドを送ると、PLCの好きなデバイスの値が返ってきます。
RDS DM100.U 5 → DM100から5個ぶんの数値をください、という意味
これができると、PLCの中身がパソコン側で自由に扱えるようになります。ここが設備IoTの入口です。
つまずきやすい所
意外と多いのが、通信の設定より手前の話です。PLCとパソコンのIPアドレスの組み合わせが合っていないと、そもそも届きません。先にpingで疎通を確認してからPythonを書き始めると、原因の切り分けが楽になります。
▶ 詳しい手順はこちら
PythonでKeyence PLCのデバイスを読み出す方法|上位リンク通信による設備IoT化
ステップ3:溜める データベースに自動保存する
読み出したデータを、SQL Serverに保存していきます。
ここまでの状態だと「今の値」は見えますが、画面を閉じたら消えてしまいます。過去と比べられないと、異常かどうかの判断ができません。
ここでできるようになること
数秒ごとの値が、時刻とセットでどんどん溜まっていきます。「先週の同じ時間はどうだったか」が後から確認できるようになります。
設計の勘所(ここがいちばん伝えたい所)
テーブルを2つに分けます。
| テーブル | 役割 |
|---|---|
equipment | 設備の一覧(設備名・設置場所など) |
robot_log | 実際のデータ(時刻・電流値・設備ID) |
データ側には設備IDだけを持たせます。
こうしておくと、設備が増えたときにequipmentに1行足すだけで済みます。設備ごとにテーブルを作ってしまうと、3台目・4台目で必ず行き詰まります。
これは現場で似たような仕組みを見てきた経験からの判断です。最初にここを決めておくかどうかで、後の手間がまったく変わります。
▶ 詳しい手順はこちら
【実機解説】PythonでKeyence PLCのデータをSQL Serverに自動保存する方法|設備IoTの土台づくり
ステップ4:活かす Grafanaで監視画面にする
最後に、溜めたデータを Grafana でグラフにします。
ここでできるようになること
- 数秒ごとに自動更新されるグラフ
- 「これを超えたら異常」というしきい値を赤い線で表示
- 設備ごとに色分けして並べる
数字を読まなくても、色と線の位置だけで状態が分かる画面になります。現場のモニターに映しておく使い方ができます。
つまずきやすい所(実際に全部ハマりました)
ここは罠が多いので、先に挙げておきます。
- 時刻が9時間ズレる
Grafanaは世界標準時(UTC)で問い合わせます。日本時間で保存していると、かみ合わずに「No data」と出ます。原因が分かりにくい割に、これが一番よく起きます。 $__timeFilter()の中に関数を入れてはいけない
カッコの中の最初のカンマまでしか読んでくれないため、SQLが壊れます。しかもエラーが出ずに0件になるので、間違いに気づけません。先に別の場所で変換して、列名だけ渡します。- 暗号化の設定は
disable(無効)
日本語表示だとfalseが「間違い」と訳されていて、選ぶ手が止まります。 - しきい値の赤線は、設定しただけでは出ない
「Show thresholds」を「As lines」に変える必要があります。
▶ 詳しい手順はこちら
【実機解説】SQL Serverに溜めたPLCデータを、Grafanaでリアルタイム監視ダッシュボードにする方法
あなたはどこから読めばいいか
全部を順番にやる必要はありません。今の状況に合わせて、途中から入ってください。
| 今の状況 | 読むところ | 買い足し |
|---|---|---|
| 設備のデータが何も取れていない | ステップ2(まずPLCの値を読めるように) | なし |
| ロボットの電流値・座標がほしい | ステップ1 | KV-XLE02 |
| データは取れているが、CSVが散らかって管理できていない | ステップ3 | なし |
| データは溜まっているが、誰も見ていない | ステップ4 | なし |
いちばん多いのは、たぶん3つ目だと思います。
「とりあえずCSVに落としている」状態は、データを取れてはいるものの、活かせていない状態です。ファイルが増えるほど扱いづらくなるので、早めにデータベースに移すことをおすすめします。
4本を通して分かったこと
その1:一番の落とし穴は、通信ではなく「時刻」だった
始める前は、PLCやロボットとの通信でつまずくと思っていました。実際に苦労したのは、UTCと日本時間のズレです。通信は手順どおりにやれば繋がりますが、時刻のズレはエラーが出ないぶん厄介です。
その2:無料のソフトでも十分に実用になる
SQL Server ExpressにもGrafanaにも制限はありますが、設備数台ぶんのデータを扱うには十分でした。まず無料の組み合わせで作ってみて、足りなくなってから考えれば良いと思います。
その3:データを「溜める形」を最初に決めておく
後から変更するのが一番しんどい部分です。ステップ3のテーブル設計だけは、手を動かす前に少し考える時間を取る価値があります。
この先やろうと思っていること
「取る→溜める→活かす」はこれで一通りつながりました。次に取り組みたいのはこのあたりです。
- しきい値を超えたら通知する(画面を見ていなくても気づけるように)
- 電流値の変化から、故障の予兆をつかむ
進んだらまた記事にします。
関連記事
- PythonでKeyence PLCのデバイスを読み出す方法|上位リンク通信による設備IoT化
- 【実機解説】Keyence PLCでFANUCロボットの電流値・位置座標を常時取得する方法(プロトコルスタジオ)
- 【実機解説】PythonでKeyence PLCのデータをSQL Serverに自動保存する方法|設備IoTの土台づくり
- 【実機解説】SQL Serverに溜めたPLCデータを、Grafanaでリアルタイム監視ダッシュボードにする方法
お問い合わせ
設備のIoT化について「自社でもやってみたいが、どこから手をつければいいか分からない」という段階でのご相談も承っています。

