ノンプログラム!?意外と簡単にできる産業用PLCからのデータ取得

2021年03月10日 水曜日


【この記事を書いた人】
笹島 啓史

色々あり2017年IIJに入社。IoTのつながったエッジからクラウドまでつながった感じが好き。趣味はオーケストラ、サッカー観戦など。将棋も好き。

「ノンプログラム!?意外と簡単にできる産業用PLCからのデータ取得」のイメージ

はじめに

はじめまして。IoTビジネス事業部ソリューションインテグレーション課 笹島と申します。普段は、IoTを用いたSI案件に従事しております。
IIJに入社する前までは工場系の案件を担当したことはない素人でした。そんな工場のことを知らないITの人間がどうやって工場からデータを取得しているかということが伝わればと思います。

さて、工場系といえば以前、「Industriai IoTプラットフォーム「WISE-PaaS」概要」という記事をお届けしましたがご存知でしょうか?お時間あれば本記事とあわせてお読みいただけますと幸いです。
今回はこの中から工場設備側に一歩踏み込んで、産業用機械からどのような手法でデータを取得し、取得したデータをどのようにクラウドに届けるかをお話していきます。工場設備のデータ取得はITとは関係なく一見難しそうですが、意外と簡単にできて、ITの領域としてデータを扱える!というイメージになればと思います。

PLCとは?

「工場」という領域は着実にIT化が進んでおり、PLCという機械が生産ラインの軸となっています。(PLCはIT技術者にはあまり馴染みのない言葉かもしれません。私自身も、PLCは聞いたことはあるけど実態は知らない…という状況でした)

PLCは、「Programmable Logic Controller」の略で、プログラムが可能な論理回路を制御する装置になります。ここでいう「プログラムが可能」というのは、みなさんが思い浮かべるようなJava、Python、C言語などのことではなくラダープログラムと呼ばれるリレー回路を制御するプログラムです。

身近なものでは、例えばエレベータなどの制御にも使われています。

・ボタンが押されたら扉を閉める/開ける
・重量が○kgを超えたらブザーを鳴らす

このように、○○があったら、○○を実行するというのが、PLCの考え方です。これを何個もシーケンシャルにつなげて順々に制御していきます。

・10Fのボタンが押される
・一定時間が経つと扉が閉まる
・扉が閉まったらエレベータが動く
・10Fになったら止まる
・扉が開く

実際にはもっと複雑ですが簡略化するとこういった流れとなります。

こういったシーケンシャルに処理するために回路を制御するプログラムがラダープログラムとなります。回路の制御は、いわゆる「IT屋さん」ではなく、「電気工事士」の方が対応されることが多く、ラダープログラムを知らない私のような「IT屋さん」も多いのではないかと思います。

余談ではありますが、よくPLCのことを「シーケンサ」と呼ぶことがあります。この「シーケンサ」は三菱電機製のPLCの商品名であり、使用される会社も大変多かったことから他社のPLCのこともシーケンサと呼ぶ人が出るほどになったようです。検索すること全般を「ググる(Google)」といったり、宅配便全般を「宅急便(ヤマト運輸)」といったりしますし、その業界を牽引している証拠と言えるかもしれません。

PLCからの一般的なデータ取得

PLCから値を取得するには、相応のプログラムが必要です。TCP/IPでPLCから接続した場合でも以下のような処理が必要になります。三菱電機MELSECシリーズからデータを取得する場合、SLMPプロトコル(SeamLess Messageing Protocol)を使って通信します。SLMPはIT関係では聞き慣れない言葉だと思いますが、対応しているPLCであれば汎用Ethernet機器と通信可能とするPLCとITとのつなぎ役になるプロトコルです。

実際に処理の流れを見てみましょう。

①ソケットの作成
②ストリームの作成
③PLCごとに決められた電文の作成
④②で作ったストリームに③で作った電文を引数として、PLCにソケット通信
⑤電文を受信

これだけ見るとただのソケット通信で、ITやってる人ならすぐできそう!と思いますし、JavaでもPythonでも問題なく可能です。しかし、③の電文作成の部分では、

サブヘッダ、要求先のネットワーク番号、要求先局番、要求先ユニットI/O番号、要求先マルチドロップ局番、要求データ長、監視タイマ、リザーブ、コマンド、サブコマンド、要求データ

といった必要情報をもとに電文を並べて、バイナリ形式に変換するといった処理が必要です。ここに何を入力する必要があるかは、SLMPに対応しているPLCでも機種ごとに違いますし、データによって入力する内容も違いますのでそれぞれ作成する必要があります。工場には多種のPLCがあり、そこから大量のデータを取得するといった話になった場合に、技術的にはできるだろうけどそっと逃げたくなる気持ちになるのは私だけではないでしょう…。「要求先マルチドロップ局番」あたりの用語はこのプロトコルでしかないかと思いますので、興味がある方はググってみるとこのあたりの話が詳しくわかるかと思います。様々なITベンダがこの難題に応えるため、各PLCから同じ方法で、かつ楽にできないかと試行錯誤し、各社の強みや工夫を加えたサービス、ゲートウェイ機器を販売しています。

ノンプログラミングによるデータ取得

ITベンダは、ITのことはわかりますが、工場のことは詳しくありません。一方で、工場の方は工場のことは詳しいですがITのことは詳しくありません(もちろん双方とも例外はあります)。Java、Python、Cといったプログラミング言語で話すのではなく、PLCの情報を軸に会話しないと工場側の人と意思疎通することはできません。とはいえ、前述の通り、PLCからデータを取り出す仕組みをイチから構築するのも効率がよくありません。

ベンダの異なるPLCからデータを取得するための1つの例として、Edgelinkというソフトウェアを使った方法を紹介します。Edgelinkは、WISE-PaaSを展開しているAdvantech社が提供するソフトウェアで、Advantech製のEdgelink搭載PCを購入すると無償で使うことができます。PCへの設定は、「Edgelink Studio」というソフトウェアを使って行います。Edgelink Studioを使用して、Edgelink対応機器に設定を反映するといった使い方になります。Edgelink Studioはインターネットからも無償で入手可能ですので、どういった流れで設定できるかは事前に確認することができます。

手元にPLCがあるという方はいないと思いますので雰囲気をつかんでいただくために、Edgelink Studioを設定してPLCからデータを取得するための設定部分、および、仮のデータを扱ってクラウドにUploadする部分を紹介します。

構成のイメージはこのような形です。

では、実際に設定してみます。
なんとなく流れを見てみると、プログラム作成と似ていてIT屋さんが扱いやすそうというイメージになるのではないかと思います。実際に機器が手元になくても設定可能ですので、試しに触ってみることも可能です。

1.Edgelink対応機器の選択

「プロジェクト」を作成して、左側のメニューから使用するEdgelink対応の機器を選択します。(プログラム開発でも似たような流れ!)

2.新しいデバイスの追加

Edgelinkが導入された機器とPLCが接続されたポートを右クリックし、デバイスの追加を選択します。(プログラム開発でも似たように階層化されていくな…)これは1.と違い、実際のPLCを指定します。Edgelinkは多くのPLCに対応してますので、選択欄から取り扱うPLCを選択します。(PLCが選べるのも便利!)

3.タグの設定

左にIOタグというメニューができるので開きます。「タグ」というのはEdgelinkの概念で、「≒取得したデータ」と考えても大きな問題ありません。簡単な計算ができる計算タグなどもあるのですが、今回はデータを取得するという雰囲気を感じていただきたく割愛いたします。

IT視点では馴染みのあるような無いような設定ですが、PLCに入っているデータがPLCの「どのアドレス(レジスタ)」に格納され、「どういうデータ」で、「どのくらいのデータ長」かなどを設定します。この情報は工場側の方が持っていますので、Excelなどでデータをもらうことが多いです。これをデータ数分繰り返します。

4.データをクラウドに送信

せっかくなので取得したデータをクラウドに送信します。(ここまで来ると工場とは関係ないデジタルの世界として扱える!)自前でプログラムを作成してクラウド上に送信する場合は送信のことも考える必要があるのですが、ここにもソフトウェアを使う利点があります。取得したデータをそのままクラウド上に送信する仕組みがありますのでそれを利用します。

EgelinkはAWSやAzureなどにも送信可能ですが、せっかくですので以前紹介したWISE-PaaSへ送信してみましょう。WISE-PaaSはMQTTでデータを受信しますので、MQTTとして送信の設定を行います。「送信先」、「ユーザ」、「パスワード」、「送信するデータ(タグ)」を設定して反映するのみで自動的にデータがクラウドに送信されます。

私の手元にもPLCはないのですが、Edgelink対応のECU1051というハードウェアがあるので、そちらのシステムデータを送ってみることにします。クラウド側の設定は割愛しますが、無事データが届いているようです。

このような形で、PLCのアドレス情報と、クラウド側の接続情報があれば、ほぼひとつのソフトウェア上のみで完結できることがわかるかと思います。多少の知識は必要なものの、「PLCの仕組みがわからないといけない」、「プログラムしないといけない」といったことは必要なく、「設定をしていく」イメージでPLCからデータを取得し、クラウドに向けて送信するというのが可能になっています。工場のデータを外部に保管したくないというお客様も数多くいらっしゃいますので、その場合には取得したデータを、クラウドではなく、ローカルのデータベースに書きこむといったことも可能です。

おわりに

いかがだったでしょうか。実際にデータを取得しているわけではありませんので、「ほんとにこれだけ?」といった疑問がわくかもしれません。実際の現場では、途中で入力したアドレス情報がとても大事でこの情報がきちんとまとまっていれば、必要な操作は設定する程度の難易度でできるようになっています。

① 工場の人はアドレス情報をIT屋さんに渡す
② IT屋さんはそれを元に自社のオフィスでEdgelink対応機器に設定を仕込む
③ Edgelink対応機器を実際の工場に送付してつなぐ

これだけでデータが取得できているので、工場の人は工場の作業のみ、ITの人はITの作業のみといったイメージで役割分担が明確になるのも仕事をする上ではありがたいところですね。

Industrial 4.0の中で言われている「完全自働化」のフェーズまではいかないものの、「プログラム」をあまり意識しなくてもデータを取得できる段階までは来ているという雰囲気だけでも伝わっていれば幸いです。また、冒頭ではPLCの「Programmable」は、「Pythonではなくラダープログラムを動かす」と書いたのですが、現実にはPythonを動作させることができるPLCも出てきています。これによってPLC自体で学習して、より自働化に近い仕組みが生まれたりなんていう想像もできたりします。
今回紹介したEdgelinkもまた一つ先のステップに向けて進化したり、もしかしたらPLCに組み込まれる時代がくるかも!?といった妄想も膨らんできます。
いずれにせよ、工場設備からのデータ取得は今後も進化していくのは間違いないので、また遠くないうちに紹介したいと思います。

笹島 啓史

2021年03月10日 水曜日

色々あり2017年IIJに入社。IoTのつながったエッジからクラウドまでつながった感じが好き。趣味はオーケストラ、サッカー観戦など。将棋も好き。

Related
関連記事