前回に引き続き、Python NumPy ライブラリを使った例とその手順を紹介したいと思います。
(前回の記事 「Python を使ったデータ分析(1)」はこちら)。
前回はダミーデータを使用しましたが、今回はAXC F 3152 で取得した実データを利用します。
「既存の産業機器、センサー等から取得したデータの分析を行いたい」などをお考えの方にご覧いただければ幸いです。
以下にサンプルコードを紹介します。こちらのサンプルでは、AXC F 3152 の CPU 使用率の相関係数を求めています。
AXC F 3152 では 2 core の CPU が使用されているので、各 core の使用率を使い相関係数を求めました。
import numpy as np
from pyPLCn import pyPLCn
import time
if __name__ == ‘__main__’:
Plc = pyPLCn()
Plc.set_var_names([‘DEVICE_STATE.CPU_LOAD_PER_CORE[1]’,’DEVICE_STATE.CPU_LOAD_PER_CORE[2]’])
Plc.connect(‘192.168.1.10’, login=”, password=”, poll_time=100)
x = np.array([], dtype=int)
y = np.array([], dtype=int)
time.sleep(3)
while True:
print(‘#####################################’)
print(‘CPU_core1_load – {}’.format(Plc.get_var(‘DEVICE_STATE.CPU_LOAD_PER_CORE[1]’)))
print(‘CPU_core2_load – {}’.format(Plc.get_var(‘DEVICE_STATE.CPU_LOAD_PER_CORE[2]’)))
print(‘#####################################’)
x = np.append(x, Plc.get_var(‘DEVICE_STATE.CPU_LOAD_PER_CORE[1]’))
y = np.append(y, Plc.get_var(‘DEVICE_STATE.CPU_LOAD_PER_CORE[2]’))
print(x)
print(y)
coef = np.corrcoef(x, y)
print(coef)
time.sleep(10)
サンプルコードの解説を行います。
import numpy as np from pyPLCn
import pyPLCn
import time
まず、必要なライブラリをインポートします。
1 行目は、NumPy ライブラリをインポートしています。NumPy ライブラリのインストール方法は、前回の投稿記事をご覧ください(前回の記事 「Python を使ったデータ分析(1)」はこちら)。
2 行目は、PyPLC ライブラリをインポートしています。PyPLC ライブラリとは、AXC F 3152 のデータを REST API で取得するためのライブラリです。PyPLC ライブラリのインストール方法・使用方法は、こちらの投稿記事(「PLCnext で Python を始める」の <PLCnext Runtime 変数を Python 上で扱いたい>)をご覧ください。
3 行目は、標準ライブラリ time をインポートしています。ウェイト機能を使用するためにインポートします。
if __name__ == ‘__main__’:
Plc = pyPLCn() Plc.set_var_names([‘DEVICE_STATE.CPU_LOAD_PER_CORE[1]’,’DEVICE_STATE.CPU_LOAD_PER_CORE[2]’])
Plc.connect(‘192.168.1.10’, poll_time=100)
ここから、実際の処理となります。
まずは、PyPLC ライブラリを使い、AXC F 3152 からデータを取得するための準備をします。
2 行目は、PyPLC ライブラリ内の関数を使用するため、インスタンス化を行います。
3 行目は、アクセスしたい変数名を指定します (AXC F 3152 内で PLC 処理を行う PLCnext Runtime 内で使用されている変数)。ここでは、各 core の CPU 使用率を保存している変数を指定しています。
4 行目は、AXC F 3152 へ REST API でセッションを確立します。引数として IP アドレス、ユーザー名、パスワード、データアクセスのポーリング間隔(ms 単位)を指定します。
x = np.array([], dtype=int)
y = np.array([], dtype=int)
AXC F 3152 から取得したデータを保存する配列を用意します。
配列 x に core 1 の CPU 使用率を、配列 y に core 2 の CPU 使用率を保存します。
print(‘CPU_core1_load – {}’.format(Plc.get_var(‘DEVICE_STATE.CPU_LOAD_PER_CORE[1]’))) print(‘CPU_core2_load – {}’.format(Plc.get_var(‘DEVICE_STATE.CPU_LOAD_PER_CORE[2]’)))
AXC F 3152 から取得した 各 core の CPU 使用率を表示します。
x = np.append(x, Plc.get_var(‘DEVICE_STATE.CPU_LOAD_PER_CORE[1]’))
y = np.append(y, Plc.get_var(‘DEVICE_STATE.CPU_LOAD_PER_CORE[2]’))
print(x)
print(y)
AXC F 3152 から取得した各 core の CPU 使用率を配列 x, y に保存します。
coef = np.corrcoef(x, y)
print(coef)
time.sleep(10)
NumPy ライブラリの関数 corrcoef() へ配列 x, y を渡して、相関係数を求めます。
求めた相関係数を表示します。10秒間のウェイトを挿入し、同じ処理を繰り返します。
以下が実行結果です。
以上のように、PLCnext では Python などの高級言語のライブラリを利用し、データ分析を実現することができます。さらに、PLCnext は従来 PLC の定周期実行処理であったり、従来の産業機器やセンサからのデータ取得なども行えます。これら PLCnext の機能を活用し、今まで複数台のハードウェアで実現していたことが、PLCnext 1台で実現可能となります。
このような機能を利用し、PLCnext で解決できそうな課題などお持ちであれば、 ぜひ一度お問い合わせください。