今回の記事ではBeckhoffのEL6731を使用しProfibus Masterを立ち上げ、SiemensのS7-315とProfibus 通信します。
さ、始めよう!

前書き
いつも私の技術ブログとYouTubeチャンネルをご覧いただき、心より感謝申し上げます。また、いまFullさん(full@桜 八重 (@fulhause) / X)と共に毎週水曜日の夜にお届けしている「高橋クリス」ラジオ番組を運営しています。
https://open.spotify.com/show/6lsWTSSeaOJCGriCS9O8O4
技術は独り占めせず、届けるもの
私たちは工場の生産技術や制御に関する技術情報を、ブログや動画などで無料公開しています。「知識は誰でもアクセスできるべき」という信念のもと、現場で役立つ具体的なノウハウやトラブル事例などを発信してきました。すべて無料で続けているのは、「知らなかったせいで困る人」を少しでも減らしたいからです。
また、もしあなたの現場で…
- 「このPLCとデバイスの組み合わせ、ちゃんと動くのかな?」
- 「EtherCAT通信でうまくいかない部分を検証してほしい」
- 「新しいリモートI/Oを試したいけど社内に検証環境がない」
など、困っている構成や試してみたいアイデアがあれば、ぜひお知らせください。機器の貸出や構成の共有が可能であれば、検証し、記事や動画で発信します(ご希望に応じて匿名対応も可能です)。
支援のかたち
現在、私達の活動はほぼ無償で続けており、記事や動画の制作には、時間と検証環境の整備が必要です。この活動を継続的にコンテンツを提供するためには、皆様の温かいご支援が大変重要です。
メンバーシップ(ラジオの応援)
Fullさんとのラジオをより充実させるための支援プランです。
https://note.com/fulhause/membership/join
Amazonギフトリスト
コンテンツ制作に必要な機材・書籍をリストにしています。
https://www.amazon.co.jp/hz/wishlist/ls/H7W3RRD7C5QG?ref_=wl_share
Patreon(ブログ・動画活動への応援)
月額での小さなご支援が、記事の執筆・検証環境の充実につながります。
https://www.patreon.com/user?u=84249391
Palpay
小さな支援が大きな力になります。
https://paypal.me/soup01threes?country.x=JP&locale.x=ja_JP
知ってたら助かること、届けたいだけです
あなたの応援が、知識の共有をもっと自由で持続可能なものにしてくれます。これからもどうぞよろしくお願いします。
soup01threes*gmail.com
技術はひとりじゃもったいない。
Reference Link
EL6731-0010?
PROFIBUSスレーブターミナルEL6731-0010は、EtherCATとPROFIBUS間のシンプルなデータ交換を可能にします。EL6731-0010はPROFIBUSスレーブとして設定されているため、スレーブデバイスとしてPROFIBUSネットワークに組み込むことができます。
- PROFIBUS DP, PROFIBUS DP V1
- スレーブ最大12MBit/s
ステートマシン
EL6731-0010はいくつかの方法で構成できます:
- StartUp SDOを使用したEL6731-0010のコンフィグレーション [} 168]:StartUp SDOはEtherCATコンフィグレータで計算され、TwinCATシステムマネージャなどと同じ方法でEtherCATマスタに転送されます。
- EL6731-0010のコンフィギュレーションとバックアップ・パラメータ・ストレージ :ここで、PROFIBUSスレーブのコンフィギュレーションはEL6731-0010のフラッシュメモリに保存されます。
今回の記事では方法1です。
フロー
こちらはStartUp SDOを使用したときEL6731-0010の動作FLOWです。
INIT
電源投入後、EL6731-0010 は INIT 状態となり、DP の設定はありません。EL6731-0010はPROFIBUS上でアクティブではありません。
PREOP-DP slave configuration
DP のコンフィギュレーションは、PREOP 状態で SDO ダウンロードにより実行される。ロードされるオブジェクトは、コンプリートアクセスまたは一貫性ネスティング(最初にSubIndex 0を0に設定し、次にSubIndex 1-nを書き込み、次にSubIndex 0をnに設定する)で送信されなければならない。
そのため、常にオブジェクト 0xF800 から開始するように注意する必要がある。DP CfgData はオブジェクト 0x8002 で転送される。オブジェクト 0x8000 を受信すると、EL6731-0010 は PROFIBUS 上でアクティブになります(FDL のみ、DP はなし)。EL6731-0010は自動ボーレート検索をサポートしているので、ボーレートを設定する必要はありません。
PREOP-PDO Mapping
EtherCAT RxPDO (DPスレーブがDP入力を持つ場合 (DPマスタへ送信)) とEtherCAT TxPDO (DPスレーブがDP出力を持つ場合 (DPマスタから受信)) があります。
EtherCATのPDOマッピングは0x8yyzオブジェクトのダウンロード後にEL6731-0010が自動的に計算し、読み出すことができます。PDOマッピング・オブジェクトは、EL6731-0010が自分で計算した値しか書き込めません。PDOマッピングの書き込みはEtherCATコンフィグレータが計算したPDOマッピングをチェックするためだけであり、省略できます。
SAFEOP-PDO Assign
実に更なるステータス情報を含むEtherCAT PDOがあります。このPDOはPDO Assignで選択します。PDOアサインのPDOの順番に関しては、対応するPDOアサインオブジェクトの各エントリで割り当てられたEtherCAT PDOのインデックスが増加するようにすることが重要です。EtherCATマスターがPDO AssignをStartUp SDOsに転送しない場合、PDO 0x1A7Fがステータスに割り当てられます。
OP-Cyclic DP communication
SAFEOP に移行する間、EL6731 は Sync Manager のチャンネル 2 と 3 で設定された長さを PDO Mapping と PDO Assign で計算された長さと照合します。
SAFEOP 状態は、これらの長さが一致した場合にのみ採用される。EL6731-0010のDP機能はSAFEOP状態でアクティブになります。EL6731-0010がSAFEOP状態である限り、DPマスターに送られるDP入力データは0に設定されます。
その時点でEL6731-0010をOPに切り替えると、EtherCAT出力のデータがDPマスターに送信されます。EL6731-0010はEtherCATサイクルとは独立して動作します。
Implementation
TwinCAT3側
最初にBeckhoff TwinCAT3側を構築します。
EtherCATマスタの追加
最後はEtherCATネットワークを構築します。I/O>Devices>Add New Itemをクリックします。
EtherCAT>EtherCAT masterをクリックし、OKで進みます。
Configure Ethernet Adapter
先ほど追加したEtherCATマスターをダブルクリックし、AdapterのTabでSearchボタンをクリックしてください。
EtherCAT Masterとして使用するEthernet Adapterを選択し、Okで進みます。
Done!
スキャンEtherCATスレーブ
先ほど追加したEtherCAT Masterを右クリックし>Scanでネットワーク内のEtherCAT スレーブを検索します。
Done!TwinCAT3がEL6731-0010 PROFIBUS DP Slave Terminalを検索でき、Yesで進みます。
出力スロットの設定
次にTwinCAT3のInsert Module画面が表示され、ここで直接各Slotを挿入できます。
最初に1WORD Slave-Out/Master-In Slotを挿入します。そのSlotはEL6731-0010がPROFIBUSマスターに1WORDを転送する意味になります。
また、複数のSlotを同時に追加したい場合はMultiple欄に同時追加するSlot数を入力します。
下図の例では4を入力すれば、1WORD Slave-Out/Master-Inは一気に4SLOT分まで追加してくれます。
Done!
入力スロットの設定
今度は1 WORD Slave-In/Master-Out スロットを6回分を一気に追加します。
Done!
結果
こちらはEL6731-0010のSlot構成になります。この構成はPROFIBUSマスターが合わせる必要があります。
EL6731-0010の設定
次はEL6731-0010のパラメータを設定します。
こちらはEL6731-0010のパラメータ設定画面です。
ステーション番号
Station No.はEL6731-0010のPROFIBUSアドレスになります。PROFIBUSマスターがこのアドレスに一致する必要があります。
GVL
次はGlobal Variable ListにProcess入出力とMappingする変数を定義します。
{attribute ‘qualified_only’} VAR_GLOBAL OutDataToSiemenS71500 AT %Q*:ARRAY[0..3]OF WORD; InDataFromSiemensS71500 AT %I*:ARRAY[0..5]OF WORD; inDpState AT %I*:USINT; inPDOState AT %I*:BOOL; END_VAR |
マッピング
今度はGVLに定義したPROCESS変数とEL6731-0010の入出力とMAPPINGしましょう。
最初に出力データをMAPPINGしたいので、Outputs>右クリック>Change Linkをクリックします。
先程定義した出力PROCESS変数とMAPPINGしましょう。そして他の出力にも同じ操作でMAPPINGしてください。
次はEL6731-0010の入力データをMAPPINGしたいので、Inputs>右クリック>Change Linkをクリックします。
先程定義した入力PROCESS変数とMAPPINGしましょう。そして他の入力にも同じ操作でMAPPINGしてください。
Active Cofiguration
Active ConfigurationをクリックしプロジェクトのHard構成をTwinCAR RuntimeにDownloadします。
ログイン
プログラムをTwinCAR RuntimeにDowloadします。
Yesですすみます。
スタート
TwinCAR Runtimeをスタートします。
シーメンス側
次はシーメンスS71500側を構築します。
GSDファイルのダウンロード
BeckhoffのHPからEL6731-0010のGSD FILEをDownloadしてください。
GSDファイルのインストール
Options>Manage general station description Fileをクリックします。
次はTIAからEL6731-0010のGSD FILEをインストールしてください。
すべてのGSD FILEを選択し、Installで進みます。
Done!
Profibus ネットワークの設定
次はPROFIBUSネットワークを構築するため、Devices and Networkをクリックします。
EL6731-0010の追加
先ほど追加したEL6731-0010をネットワークに引っ張って行きましょう。
Done!これでEL6731-0010が追加されました。
プロフィバスネットワークの割り当て
EL6731-0010のアイコンにあるNot Assignedをクリックします。
S71516Fと同じPROFIBUSネットワークに設定します。
Done!
プロフィバスアドレスの設定
EL6731-0010のPROFIBUSアドレスを設定するために、下図のICONをクリックします。
TIAのNetwork ViewにはすべてのPROFIBUS デバイスのアドレスが表示されます。
下図のようにEL6731-0010のPROFIBUSアドレスを変更しましょう。
このアドレスはTwinCAT3で設定したEL6731-0010と一致してください。

スロットの設定
今回はEL6731-0010のSLOT構成を設定するために、EL6731-0010をダブルクリックします。
TIAをDevice Viewに切り替えました。
EL6731-0010のSlotを構築するには、右のCatalogに必要なモジュールを追加しましょう。
Done!
TIA側のSLOT設定をTwinCAT3と一致してください。

タグ
PLC TagsでEL6731-0010と交換する変数を定義します。
プログラム
次はプログラムを作成します。
fcSwapFeedback
TwinCAT3 RuntmeとSiemensをデータ交換するにはByte SWAPする必要があります。今回の通信確認するために、SWAP関数を作成し、wAddというパラメータで入力したデータとそのパラメータを加算し、EL6731-0010にReturnします。
こちらはプログラムです。
OB1
先程作成した関数を呼び出し、EL6731-0010の入出力を割り付けましょう。
ダウンロード
最後はHardware ConfigurationとプログラムをSiemensのPLCにDownloadします。
結果
下図のように、Siemens S71516FとBeckhoff EL6731-0010両方とも正常RUN状態になります。
PROFIBUSネットワークにも通信エラーがありません。
TwinCAT3側にもinDPStateとInPDOStateが0とFalseなので、エラーがないことがわかります。
先ほど作成した関数にもEL6731-0010の入力データを加算し、EL6731-0010に出力する動作もできました。