PythonでIoT!Raspberry Piで産業用のデータ収集してみた

OPC UA

PythonでEtherCAT,PROFINETの産業用データを収集してみました。

ラズパイと無料ソフト環境でテストしていますので誰でも実施可能です。

使用したライブラリからプログラムまで一から紹介します。

 

スポンサーリンク
  1. PythonでIoT!Raspberry Piで産業用のデータ収集してみた
    1. 産業用のデータをPythonで使うにはOPC UAが便利
      1. OPC UAとは
      2. OPC UAの簡単な使い方
    2. OPC UAのPythonのライブラリがフリーで使用可能
  2. ラズベリーパイでOPC UAを使えばIoTになる
    1. メーカーの産業用イーサネット・OPC UA機器は高価
    2. CODESYSで産業用イーサネットとOPC UAサーバーとの環境を作る
    3. PythonとラズパイでOPC UAクライアントを作る
  3. EtherCATをラズパイとPythonでデータ収集
    1. ラズベリーパイをEtherCATのマスターにする方法
    2. EtherCATの情報をOPC UAに設定する
    3. OPC UAクライアント側のPythonのプログラム
    4. EtherCATをラズパイとOPC UAで接続テストする
      1. EtherCATをラズパイとOPC UAで接続テスト動画
  4. PROFINETをラズパイとPythonでデータ収集
    1. ラズベリーパイをPROFINETのマスターとスレーブにする方法
    2. PROFINETの情報をOPC UAに設定する
    3. OPC UAクライアント側のPythonのプログラム
    4. PROFINETをラズパイとOPC UAで接続テストする
      1. PROFINETをラズパイとOPC UAで接続テスト動画
  5. 産業用イーサネットをOPC UAとラズパイでデータ収集
    1. 産業用イーサネットをPythonでまとめてデータ収集する
    2. 産業用イーサネットをラズパイでまとめて接続テストする
      1. 産業用イーサネットをラズパイでまとめて接続したテスト動画
  6. Pythonの勉強会で発表させていただきました
  7. まとめ・感想

PythonでIoT!Raspberry Piで産業用のデータ収集してみた

Pythonとラズパイを使って産業用のデータ収集してみました。

最大ラズベリーパイ3台使って産業用イーサネットの情報をPythonでデータ収集しています。

 

ラズパイだけでテスト環境を作り、EtherCATやPROFINETの情報をPythonでデータ収集できました。

 

ラズパイは無線・有線の両方を搭載しています。IoTのデバイスとして非常に役立つ旨を紹介します。

 

分かりやすくパワーポイントでまとめた資料が下記となります。

最初にご覧になった方が実施内容をイメージしやすいのでぜひご覧ください。

 

産業用のデータをPythonで使うにはOPC UAが便利

AI・機械学習のライブラリが豊富でプログラミング言語として人気のPythonです。

工場などのセンサー・ロボットなどの産業用のデータをPythonで処理したいケースがあると思います。

 

しかし産業システムには多くの機器・様々な通信規格があり、まとめてPythonでデータ解析するにも手間がかかります。

しかしそんな場合はOPC UAを使えばPythonでデータ収集することが可能です

 

OPC UAを使えばTCP/IP上で簡単に産業機器・システムにアクセスできます。

無線でも有線でも簡単にデータを収集することが可能です。

 

OPC UAとは

OPC UAの概要だけ簡単に説明させてもらいます。

産業システムには数多くの産業ネットワークの規格が有ります。

OPC UAは数多くの規格超えて通信・データ収集・機械制御などが可能になる通信規格です。

(下記図はかなり大雑把なイメージ図です)

 

OPC UAの簡単な使い方

OPC UAの環境さえ整っていれば、簡単に産業用のデータを収集できます。

データを確認するだけならばOPC UAのクライアントソフトを使えば一番楽だと思います。

フリーソフトも多数出ており、PCだけでなくスマートフォンからも簡単に確認できました。

 

詳細に関しては下記記事をご覧ください。(リンク先はこちらから)

工場のコントローラであるPLCの情報をスマートフォンで確認しています

工場の見える化の事例を試してみた!OPC UAで簡単にデータ収集
工場のコントローラであるPLCのデータを見える化してみました。 OPC UAを使えばスマートフォン・タブレットから簡単にデータ収集することが可能です 環境整えてアプリ一つダウンロードすれば見える化できる事例を紹介します ...

 

OPC UAのPythonのライブラリがフリーで使用可能

PythonでもOPC UAを使いデータを収集することができます。

簡単に説明しますとPythonのライブラリ「FreeOpcUa」でOPC UAを簡単に使えます。

使い方例は下記記事で紹介しています。(リンク先はこちらから)

PythonでOPC UAを実装!クライアントを作ってサーバーに接続
PythonでOPC UAのクライアントを作成してPLCと接続テストしてみました。 Github上で公開されている無料のオープンソースのライブラリを使用しています。 Examplesも豊富で誰でも簡単にプログラム出来ることを紹介...

 

「FreeOpcUa」はGithubにて無料でダウンロード可能です。

FreeOpcUa/python-opcua
LGPL Pure Python OPC-UA Client and Server. Contribute to FreeOpcUa/python-opcua development by creating an account on GitHub.

 

サンプルプログラムのExamplesも豊富かつ無料で使えるという非常に便利なライブラリです。

 

プログラムを仕事で使わない筆者でもテストレベルならば簡単にプログラムできました。

 

ラズベリーパイでOPC UAを使えばIoTになる

PythonでOPC UA使えることを前章まで紹介させていただきました。

さらにOPC UAをラズベリーパイで実装させれば産業用のIoTのデバイスとなる旨を紹介していきます。

 

上記例のように有線ではEtherCATで産業機器を制御して、無線のOPC UAでデータを送ることも可能です。

今回のテストでは最大3台のラズベリーパイの無線・有線使ってIoTっぽくデータ収集してみました。

 

メーカーの産業用イーサネット・OPC UA機器は高価

今回ラズベリーパイとPythonでテストしている訳として大きな理由がもう一つあります。

本来工場などで使うメーカーの機器でテストするのが一番ですが、個人のお財布レベルでは購入できないためです。

 

Amazonの末端価格のため正直あまり参考になりませんが、とあるメーカーのOPC UA機器の一例を下記に載せておきます。

正直な所、機能・機種によって値段が全く違ってきます。この辺りはオープン価格みたいなイメージだと思っています。

 

CODESYSで産業用イーサネットとOPC UAサーバーとの環境を作る

本格的な実動作のテストは無理ですが、通信テストレベルならばラズベリーパイで対応可能です。

詳細は下記記事をご確認ください。(リンク先はこちらから)

OPC UAでPLC(シーケンサ)と接続!サーバーの環境構築してみた
OPC-UAでPLCと接続して、クライアント側からデータ取集まで試してみました。無料で対応可能です。 汎用的なラズベリーパイで「OPC UAサーバー」かつ「PLC(シーケンサ)」にする手順を紹介します。 OPC UAでPLC...

 

ラズパイとCODESYSというソフトウェアで産業用イーサネットも無料でテストできます。

 

今回使う下記機能以外にも多くの機能を使えますが省略します。詳細のリンク先はこちらから

  • ソフトウェアPLC
  • 産業用イーサネット(EtherCAT,PROFINET,EtherNet/IP…など)
  • OPC UAサーバー

※時間制限がありますが再接続すればまた無料でテストできます。(テストレベルでは実質無料)

 

PythonとラズパイでOPC UAクライアントを作る

今回のテストではクライアント側(データを収集・解析する側)もラズベリーパイで対応します。

ラズベリーパイはデフォルトでPythonのプログラミングが可能です。

「FreeOpcUa」のライブラリを使えば20~30行のコードでテスト出来ました。

 

EtherCATをラズパイとPythonでデータ収集

最初に産業用イーサネットの人気物であるEtherCATの情報をOPC UAでデータ収集してみます。

 

筆者がEtherCATのスレーブ機器を所持していないのでラズパイのマスターのみでテストします。

マスターの「起動」,「メッセージ」の情報をOPC UAクライアントのラズパイとPythonで確認します

 

ラズベリーパイをEtherCATのマスターにする方法

ラズパイとCODESYSでEtherCATのマスターとして動かせます。

詳細の記事は下記にありますので参考ください(リンク先はこちらです)。

EtherCATのマスターの作り方 市販のスレーブ機器と接続を想定
EtherCATのmasterをラズベリーパイで作ってみました。CODESYSを使って簡単にスレーブ機器と接続する方法を説明します。 特殊なマイコン・開発環境なくとも、簡単なマスターを作る程度ならばラズパイ1台で可能です。 ...

 

EtherCATの情報をOPC UAに設定する

OPC UAサーバーへの設定方法は色んなパターンが考えられます。

(直接OPC UAに設定できるEtherCATの変数、一度何かに置き換える必要がある変数など色々あると思います…)

CODESYSが何処まで対応しているか筆者も分かっていないので一番簡単な方法で対応します。

 

今回は一度PLCプログラムのデータに置き換えてEtherCATの情報をOPC UAに置きました。

CODESYSではEtherCATの変数をPLCプログラムに設定できます。

 

筆者はPLCの変数の設定で「IoConfig_Globals」→「EtherCAT_Master」で使いたい変数を選択しました。

 

PLCのデータをOPC UAからアクセスするにはシンボルコンフィグレーションから設定できます。

詳細は下記記事をご参考ください。(リンク先はこちらから)

OPC UAでPLC(シーケンサ)と接続!サーバーの環境構築してみた
OPC-UAでPLCと接続して、クライアント側からデータ取集まで試してみました。無料で対応可能です。 汎用的なラズベリーパイで「OPC UAサーバー」かつ「PLC(シーケンサ)」にする手順を紹介します。 OPC UAでPLC...

 

OPC UAクライアント側のPythonのプログラム

Python側のプログラムとしては「FreeOpcUa」のライブラリを使ったシンプルな物です。

OPC UAサーバに接続⇒While文で20秒分EtherCATのマスターの情報を表示⇒OPC UAサーバーと切断となっています。

一応プログラムを貼り付けておきます。

(サーバー環境、欲しいデータが違えば内容も異なってきます。参考までにお願いします)

 

変数(ノードID)の調べ方例などについては下記記事をご参考ください。(リンク先はこちらから)

PythonでOPC UAを実装!クライアントを作ってサーバーに接続
PythonでOPC UAのクライアントを作成してPLCと接続テストしてみました。 Github上で公開されている無料のオープンソースのライブラリを使用しています。 Examplesも豊富で誰でも簡単にプログラム出来ることを紹介...

 

EtherCATをラズパイとOPC UAで接続テストする

EtherCAT起動前はマスターの「Enable…Flase」「Message…無し」の情報をPythonで確認できました。

 

EtherCAT起動後はマスターの「Enable…True」「Message…有り」を確認できています。

(もちろんスレーブは無しのため、EtherCATマスターは実行できない「Start…False」状態です。)

 

無事EtherCATの情報をラズパイとPythonでデータ収集することができました。

 

EtherCATをラズパイとOPC UAで接続テスト動画

テスト動画をYoutubeにアップしています。

動画の方がテストの一連の流れが分かりやすいと思います。ぜひご覧ください。

EtherCATにPythonとOPC UAで接続してみた

 

PROFINETをラズパイとPythonでデータ収集

産業用イーサネットでシェア率の高いPROFINETでもOPC UAでデータ収集してみます。

 

PROFINETに関してはラズベリーパイでマスター・スレーブも作成できます。

そのためわざとスレーブを停止をさせて内部の状態(ステータス)を移行させます。

その動作をラズパイとPythonで確認しました。

 

ラズベリーパイをPROFINETのマスターとスレーブにする方法

ラズパイとCODESYSでPROFINETのマスターとスレーブを作ることができます。

詳細は下記記事をご覧ください(リンク先はこちらから)

PROFINETとPLCを接続!マスターとスレーブをラズパイで作ってみた
Raspberry piで「PROFINET」のマスター・スレーブを作ってみました。 産業用Ethernet・フィールドバスの高価な機器を購入しなくても、接続テスト程度ならばラズパイで無料で簡単に試せる内容を紹介します。 P...

 

PROFINETの情報をOPC UAに設定する

PROFINETのテストでは「スレーブの状態(status)」の情報をOPC UAで送ります

(「マスターのEnable」「スレーブのEnable」も一緒に確認しています)

 

OPC UAサーバーへの設定方法はEtherCATと同じため省略します。

 

OPC UAクライアント側のPythonのプログラム

ここも先述したEtherCATとほぼ同じテストプログラムです。

PROFINETで変更した箇所は「変数箇所(サーバー・ノードID)」と「print文の表記」だけです。

一応参考までに貼り付けておきます。

 

 

PROFINETをラズパイとOPC UAで接続テストする

PROIFINETが正常の場合「スレーブの状態(Status)…0」であることをPythonで確認できました。

 

PROIFINETがわざと異常の場合「スレーブの状態(Status)…0以外」であることをPythonで確認できました。

 

無事PROFINETの情報をラズパイとPythonでデータ収集することができました。

 

PROFINETをラズパイとOPC UAで接続テスト動画

テスト動画をYoutubeにアップしています。

動画の方がテストの一連の流れが分かりやすいと思います。ぜひご覧ください。

PROFINETにPythonとOPC UAで接続してみた

 

産業用イーサネットをOPC UAとラズパイでデータ収集

最後にEtherCATとPROFINETの産業用イーサネットをまとめてPythonでデータ収集します。

OPC UAを使えば通信規格を超えて、IoTっぽくでデータを取得できることを実践してみます。

 

ラズベリーパイ3台でPROFINETのマスター・スレーブ、EtherCATのマスターを用意しました。

EtherCATのマスターとしたラズパイでPROFINETのデータを取集します。

そしてローカルホストの接続でEtherCATの情報もまとめて一緒にPythonで確認します。

 

産業用イーサネットをPythonでまとめてデータ収集する

OPC UAへのデータ登録方法に関してはEtherCATとPROFINET箇所で実施した内容と同じです。省略します。

Pythonのプログラムの変更点としてはクライアント接続を増やしています。

PROFINET側にはIPアドレスで、EtherCATはローカルホストで接続しています。

 

産業用イーサネットをラズパイでまとめて接続テストする

最初に「EtherCATのEnable…False」「PROFINETのスレーブ状態(Status)…0」であることをPythonで確認できました。

 

次にEtherCATを起動して「EtherCATのEnable…True」「PROFINETのスレーブ状態(Status)…0」を確認しています。

 

途中でわざとPROFINETを停止させ「EtherCATのEnable…True」「PROFINETのスレーブ状態(Status)…0以外」を確認しました

 

無事EtherCATとPROFINETの情報をラズパイとPythonでデータ収集することができました。

 

産業用イーサネットをラズパイでまとめて接続したテスト動画

テスト動画をYoutubeにアップしています。

動画の方がテストの一連の流れが分かりやすいと思います。ぜひご覧ください。

産業用イーサネットにPythonとOPC UAで接続してみた

 

Pythonの勉強会で発表させていただきました

今回の記事をネタにして名古屋開催のPython東海 第41回勉強会に参加させていただきました。

その際の資料が冒頭でも紹介していた下記スライドです。

 

Python東海の管理者様・運営者様、そして参加者様には深く御礼を申し上げます。

今回のような発表の機会をいただきありがとうございました。

 

まとめ・感想

ラズベリーパイ(raspberry pi)とPythonを使うことで産業用データを収集することができました。

ラズパイは無線・有線兼ね備えていますので、産業用のIoTデバイスとしても活躍できます。

産業用イーサネット・OPC UA含めて簡単に通信テストも可能です。

皆様もぜひ試してみてください。

コメント