KEYENCE KV-8000のデータをPythonで収集し、Googleスプレッドシートに自動記録する
製造現場のDXにおいて、「PLCのデータをいかに手軽に、かつ安価に収集するか」は非常に重要な課題です。今回は、KEYENCEのPLC KV-8000 と大容量ネットワークユニット KV-XLE02 を使用し、Pythonを介してGoogleスプレッドシートへリアルタイムにロギングするシステムを構築しました。
1. ネットワークとユニットの構成
今回はKV-XLE02の PORT2 をデータ収集専用ポートとして使用しました。制御系(PORT1)と情報系(PORT2)を物理的に分けることで、制御通信に負荷をかけない安定した収集が可能です。
PLC側の設定(KV STUDIO)
- IPアドレス:
192.168.1.10 - サブネットマスク:
255.255.255.0 - MCプロトコル/SLMP通信: 有効
- ポート番号(TCP):
5000 - 交信コード: バイナリ
PC側の設定
- IPアドレス:
192.168.1.100(PLCと同じセグメントに設定) - サブネットマスク:
255.255.255.0
2. クラウド側(Googleスプレッドシート)の準備
データの受け皿としてGoogleスプレッドシートを使用します。Google Apps Script(GAS)をWebアプリとして公開し、Pythonからのデータを受け取る「API」を作成します。
GASコード
スプレッドシートの「拡張機能」→「Apps Script」に以下のコードを実装します。
JavaScript
function doPost(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var jsonData = JSON.parse(e.postData.contents);
var rowData = [jsonData.timestamp].concat(jsonData.values);
sheet.appendRow(rowData);
return ContentService.createTextOutput("Success");
}
※デプロイ設定:実行ユーザーは「自分」、アクセス権は「全員」で公開し、ウェブアプリURLを取得します。
3. Python環境の構築
PC側に必要なライブラリをインストールします。MCプロトコル通信用と、クラウド送信用の2つを使用します。
PowerShell
pip install pymcprotocol requests
4. 実装コード
PLCからDM(データメモリ)0~10を取得し、1分ごとにGoogleドライブへ送信するメインスクリプトです。
Python
import pymcprotocol
import time
import requests
from datetime import datetime
# 設定
PLC_IP = '192.168.1.10'
PLC_PORT = 5000
GAS_URL = 'https://script.google.com/macros/s/YOUR_URL/exec'
def main():
while True:
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
mc = pymcprotocol.Type3E()
mc.setaccessopt(commtype="binary")
try:
mc.connect(PLC_IP, PLC_PORT)
# DM0~DM10(11点)を読み出し
data = mc.batchread_wordunits(headdevice="D0", readsize=11)
# スプレッドシートへ送信
payload = {"timestamp": now, "values": data}
requests.post(GAS_URL, json=payload)
print(f"[{now}] 記録成功: {data}")
except Exception as e:
print(f"エラー: {e}")
finally:
mc.close()
time.sleep(60) # 1分待機
if __name__ == "__main__":
main()
5. 運用と成果
このシステムを稼働させることで、以下のメリットが得られます。
- リアルタイムな遠隔監視: 工場に行かなくても、スマホやPCからGoogleスプレッドシートを開くだけで稼働状況が確認可能。
- 拡張性: Pythonを使用しているため、将来的にデータベース保存やAIによる異常検知への発展も容易。
