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. 運用と成果

このシステムを稼働させることで、以下のメリットが得られます。

  1. リアルタイムな遠隔監視: 工場に行かなくても、スマホやPCからGoogleスプレッドシートを開くだけで稼働状況が確認可能。
  2. 拡張性: Pythonを使用しているため、将来的にデータベース保存やAIによる異常検知への発展も容易。

\ 最新情報をチェック /