PROFINETとPLCを接続!マスターとスレーブをラズパイで作ってみた

産業用イーサネット

Raspberry piで「PROFINET」のマスター・スレーブを作ってみました。

産業用Ethernet・フィールドバスの高価な機器を購入しなくても、接続テスト程度ならばラズパイで無料で簡単に試せる内容を紹介します。

 

PROFINETとPLCを接続!マスターとスレーブをラズパイで作ってみた

産業用Ethernetの一つである「PROFINET」でPLCとデバイスの接続方法を紹介します。

筆者もですが高価なPLC・ゲートウェイなどは所持していない方が多数だと思いますので、簡単にラズベリーパイ(raspberry pi)で接続テストができる旨を説明していきます。

 

※但し筆者も数万以上する高価な「PROFINET」のデバイスを持っていないので、接続想定してマスター作るまでがメインの記事となっています。

PROFINETとは

概要だけ簡単に「PROFINET」に説明させていただきます。

産業用Ethernetの一つで「EtherNet/IP」「EtherCAT」と同様に高いシェア率を保っています。

 

開発元のドイツのシーメンス(SIEMENS)の機器含めて、多くの場所で使われている産業用Ethernetです。

 

PROFINETとPLCの両方がラズベリーパイ一つで可能

「PROFINET」と「PLC」を本来接続するには専用のPLC・モジュールを購入する必要があると思われますが、なんとラズベリーパイ一つで対応可能です。

EthernetのIFから産業用EthernetのPROFINETを接続します。

PROFINETが無料でテストできるCODESYS

なぜラズベリーパイ一つで対応できるかというと、「CODESYS」というソフトウェアPLCが「PROFINET」含めた産業用Ethernet・フィールドバスに対応しているためです。

 

「CODESYS」は誰でもフリーで使うことができ、簡単にラズベリーパイでPLCのテストできます。以前まとめた記事はこちらから

ソフトウェアPLC「CODESYS」の使い方まとめ
実質フリー(無料)で使えるのソフトウェアPLC「CODESYS」の使い方をまとめました。 「CODESYS」はラズベリーパイでデバッグできるため「自分でPLC(シーケンサ)を色々触ってみたい!」という方におすすめな記事となっています。...

 

通常ならば有料ライセンスが必要なのですが、ラズパイ+CODESYSの組み合わせならば無料でPROFINETのテスト可能です。

30分の時間制限はありますが、再接続・リセットすれば再度利用可能ですのでデバッグ・テストレベルならば実質無料で対応できます。

 

しかもPLC側のマスター(master)だけではなく、デバイス側のスレーブ(slave)にも対応しています。

今回はマスターを作る記事がメインですが、最後には2台のラズパイを使ってマスター・スレーブ間でPROFINETで通信させるまでを説明します。

(スレーブがいないとマスターが動かないため…。またスレーブの作成方法の記事は別途作成予定)

 

また同じ産業用イーサネットのEtherCATのマスターを作成する記事も紹介しています。よろしければご覧ください。

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

 

CODESYSはラズベリーパイ4にも対応済

また最新のRaspberry Pi 4 model Bにも対応していますので、これからラズパイを購入する方も安心してCODESYS使えます。

 

PROFINETと三菱PLC(シーケンサ)を繋げたい場合は…

一応日本で多く使われている三菱PLC(シーケンサ)でも調べたらPROFINETのマスター側は専用のモジュールはありそうです。リンク先はこちらから

(けどあまり力を入れていないのか詳細資料が全く見つからなかった)

 

正直なところ無理やりPROFINETで三菱PLC(シーケンサ)と繋げるよりは、下記のような他IF(Ethernet・シリアル)などで普通に通信した方が楽かもしれません。

 

筆者が産業用Ethernet・フィールドバスの情勢について疎くて申し訳ないです。

いずれにせよ個人レベルでは機器が集めれないのでので今回は三菱PLC(シーケンサ)はパスします

 

PROFINETのmasterとしてラズベリーパイを動かしてみる

今回はラズベリーパイをPROFINTのmaster(マスター)で市販のPROFINETモジュールがスレーブになるイメージで説明します。

(もし本当にラズパイで産業ネットワーク使うとしても、マスター側で使う用途が多いと思われるため…)

 

今回はAMAZONで「PROFINET」の検索で引っかかった下記のPROFINETモジュールを接続する想定で設定していきます。

 

Youtubeの海外の動画ですが、実際にラズパイとデバイスを接続した動画があり、大変参考になりました。(リンク先はこちらから)

 

GSDMLファイルをダウンロードする

PROFINETでスレーブ(デバイス)側と通信するには、GSDMLファイルが必要になります。

GSDMLファイルはデバイスの通信設定が記載されているファイルです。

 

今回のPROFINETモジュールはメーカ名が「DMC Taiwan」、型番が「ADAM-6160PN-AE」のためググってメーカHPに行きます。(リンク先はこちらから)

 

「資料&ダウンロード」→「ドライバ」をクリックしていけば「ダウンロードサイト」がありましたのでダウンロードします。

詳細まで興味ある方は詳細の資料が「Manual」の方にありましたので参考にしてみてください。6chのリレー出力モジュールのようです

 

ダウンロードしたら開いて「~~.xml」ファイルがあればOKです。大体の場合アイコンの絵と一緒にファイルが入っています。

 

CODESYSをダウンロード・インストールする

今回使うソフトウェアPLC「CODESYS」のダウンロード・インストール方法は下記を参考にお願いします

PLC(シーケンサ)・ラダーがフリーで使える!おすすめ入門ソフト
ラズベリーパイをPLC(シーケンサ)として使う準備編で「PLC(シーケンサ)・ラダーがフリーで使える!おすすめ入門ソフト」を紹介します フリーでラダーのプログラムを実際に動かす手順を紹介しています。「自分でPLC(シーケンサ)...

 

ラズベリーパイ用のパッケージをインストールする項目まで完了してもらえれば大丈夫です

 

PROFINETのデバイスをインストールする

先ほどダウンロードしたGSDMLファイルをCODESYSのインストールします。

CODESYSを開いて「ツール」→「デバイス リポジトリ」を選択します。

 

「デバイス リポジトリ」の画面に入ったら「インストール」を選択します。

 

右下の選択項目を「PROFINET~」を選択して、今回ダウンロードしたファイルを選びます

 

無事に市販のPROFINETモジュールがPROFINETのスレーブデバイスとして登録されました。

 

PROFINETのマスターをCODESYSで作ってみる

PROFINETのデバイスも登録できたのでCODESYSでマスターを作っていきます。

 

CODESYSでプロジェクトを作る

CODESYSを開いて左上の「ファイル」⇒「新規プロジェクト」を選択します。

どのプロジェクトを作るか聞かれるので「標準プロジェクト」を選択後に名前を付けてあげます(筆者は「profinet_test_master」としました)

 

今回筆者は下記内容でプロジェクトを作りましたが、他ST言語などで作りたい場合はそちらを選択してもらえれば大丈夫です

・デバイス…「CODESYS Control for Raspberry Pi MC SL」

・PLC_PRGの言語…「ラダーロジックダイアグラム(LD)」

 

プロジェクトにEthernetのデバイスを追加していく

プロジェクトが作成できましたら、「Device~」の項目で右クリックして「デバイスの追加」を選択します。

 

何のデバイス追加するか選択できますので「イーサネットアダプター」の「Ethernet」を選択します。

 

EthernetにPROFINETのマスターとスレーブを追加する

その後「Ethernet(Ethernet)」ができますので項目を選択して、「Profinet IO」→「Profinet IO マスター」→「PN_Controller」を選択します。

 

「Ethernet(Ethernet)」の下に「PN-Controller」が出来ますので、そこを選択して「PROFINET IO スレーブ」→「ADAM~」を選択します。

 

最後に「ADAM~」を選択して、今回の6chのリレー出力の型番である「ADAM-6160PN」を選択します

 

これで先ほど登録したPROFINETモジュールまでプロジェクトに追加できました。

これでラズパイの「Ethernet」経由で「PROFINETのマスター」「PROFINETのスレーブ」「PROFINETのモジュール」までプロジェクトに登録することができました。

 

PROFINETのIPアドレス・サブネットマスク・ゲートウェイ

今回筆者の想定環境は下記イメージです。設定は皆さまの使用環境に応じて適宜修正してもらえれば構いません。

マスターのラズパイのEthernetのIPアドレス「192.168.0.10」、サブネットマスク「255.255.255.0」、デフォルトゲートウェイ「192.168.0.1」としています。

またスレーブのIPアドレスは「192.168.0.20」でサブネットマスク・デフォルトゲートウェイはマスターと同じです。

 

今回筆者のラズパイの無線IPアドレスは「192.168.100.102」です。EthernetのIFをPROFINETで使いますのでラズパイへのプログラムダウンロードは通信は無線にしています。

 

環境設定する前に

環境設定する前にラズベリーパイと無線で通信してインストール・接続を完了していることをおススメします。

 

その方が環境設定が楽になります。インストール方法に関しては下記記事を参照してもらえればよいと思います。

IPアドレスを無線のを打ち込めば、有線LANでなくでもインストール・接続ができます。

ラズベリーパイでPLC(シーケンサ)・ラダーの使い方を学んでみた
ラズベリーパイをPLC(シーケンサ)として使う実践編で「ラズベリーパイでPLC(シーケンサ)・ラダーの使い方を学んでみた」を紹介します ラズベリーパイでラダーのプログラムを実際に動かす手順を紹介しています。「自分でPLC(シーケンサ)...

 

マスターの環境設定

「Ethernet」の項目でマスターのIPアドレスなどの環境設定を入力します。

 

ラズパイに電源入って通信できている状態ならば、インターフェイスの右をクリックすれば手入力不要で選択するだけでいいので、そちらをおススメします。

マスターとスレーブのポートの環境設定

「PN_Controller」の箇所でマスターから繋がるスレーブに関しての設定ができます。

IPパラメータ、ラズベリーパイのEthernetのIF(controllerのPort-001)から何処につながるかを設定します。

 

※一応入力していますが、ケーブル長、MAUタイプまでは入力必要ないかもしれません。(そこまで厳密なのか…?不明です。)

 

またトポロジーの箇所で繋がるスレーブのポートも入力します。今回はPROFINETモジュールに2つのEthernetのIFがありますが「port-001」を選択。)

 

スレーブの環境設定

「ADAM~」の箇所でスレーブ環境設定を行います。

 

IPパラメータ箇所だけでなく、縮小率に関してはデバイス・接続構成で変えていく必要があると思います。(すみません、筆者が完全に理解できておらず上手く説明できないので省略させてください)

 

モジュールの環境設定

特にモジュールの環境設定は無いと思います。

あえて言うならばID番号とかIOマッピング見て接続したいものが繋がっているか確認しときます。

 

 

ラズパイがPROFINETを使えるようにEthernetを設定する

今まではCODESYSの設定をしてきましたが、ラズパイ側にもPROFINETを使えるように設定します。

(CODESYSのオンラインヘルプにも記載がありました。リンク先はこちら)

 

Ethernetのプロトコルフィルターを外しておく

PROFINETのリアルタイム性を対応するためにIPプロトコルのフィルターを外しておく必要があるということです

ラズベリーパイのetcフォルダにある「CODESYSControl_User.cfg」を修正します。

 

好きなエディタで修正してもらえれば良いと思います。(筆者は下記のようにコンソールからviエディタで修正しました)

sudo vi /etc/CODESYSControl_User.cfg

 

追記・修正する箇所は[SysEthernet]箇所です。

 

おそらくプロトコルフィルターの記述は最初から入っていて、QDISCのバイパスを追記すればよかった記憶です。

[SysEthernet]
QDISC_BYPASS = 1
Linux.ProtocolFilter=3

 

Ethernetの固定IPアドレスを設定する

当たり前ですが固定IPアドレスを構成する必要があるということです

筆者は何時ものように、「/etc」フォルダを開き「dhcpcd.conf」ファイルを開いて「static domain~」の行の頭「#」を消しただけです

 

# Example static IP configuration:
interface eth0
static ip_address=192.168.0.10/24
static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1

 

ここも各個人の好きな環境に設定すれば良いかと思います

 

VLANをインストールする

VLANがインストールされていない場合はする必要があるということです。

一応下記コマンドをコンソールで打って確認しましたが、ラズパイに既にインストールされていました。

sudo apt-get install vlan
sudo modprobe 8021q

 

 

PLCとProfinetが接続できているかテストする

おそらく今までの内容でラズパイをPROFINETのマスターとして市販のPROFINETモジュールとも通信できるまでは進めれると思います。

とはいえ、せっかくPROFINETのマスターを作りましたので、スレーブもラズパイで作って接続テストをします。

(スレーブの作成方法はまた何時か記事書く予定…)

 

PRFOINETとPLCのテストプログラム内容

内容としてはPROFINETのマスターが動作してスレーブと正常に通信できましたらPLC・ラダー出力してLEDをONさせます。

 

「PROFINETのマスターが正常起動…黄LED_ON」「PROFINET(のマスター)がスレーブと通信できたら…赤LED_ON」する仕様です

ラダープログラムとしては下記形と簡単な形になります。

 

実際にテストするとPROFINET通信してマスター・スレーブともに動作していました

 

PRFOINETとPLCのテスト動画の流れ

ラズベリーパイ2台でPROFINET通信+PLC出力するテスト動画は簡単に紹介すると下記感じです。

 

5秒辺り…マスター側のラズパイのプログラム開始(既にスレーブ側のラズパイは起動済)

5秒直後…PROFINETのマスターが起動→Y001を出力(TRUE)→左下動画の「黄色LED」がON

8秒辺り…PROFINETのマスター・スレーブが接続。→Y002を出力(TRUE)→左下動画の「赤色LED」がON

28秒辺り…マスター側のステータスを確認。Connections(接続数)が「1」になってスレーブのラズパイと接続できていること確認

43秒辺り…フレーム・リアルタイム(RT)フレームが飛んでいることを確認

Raspberry PIでPROFINET通信してPLC出力してみた

まとめ

少し長い記事なってしまいましたが、ラズパイでもPROFINETのテスト・接続できることを分かってもらえれば幸いです。

またCODESYSならばテスト動画のようにPLC側とも接続することができます。もし皆さまも興味あれば試してみてください。

コメント