今回の記事ではEXOR ex707MにあるCodesysとDelta motion社のRMC200 CPU20LをEthernet/IP接続で構築します。
さ、FAを楽しもう!

前書き
いつも私の技術ブログとYouTubeチャンネルをご覧いただき、心より感謝申し上げます。また、いまFullさん(full@桜 八重 (@fulhause) / X)と共に毎週水曜日の夜にお届けしている「高橋クリス」ラジオ番組を運営しています。
技術は独り占めせず、届けるもの
私たちは工場の生産技術や制御に関する技術情報を、ブログや動画などで無料公開しています。「知識は誰でもアクセスできるべき」という信念のもと、現場で役立つ具体的なノウハウやトラブル事例などを発信してきました。すべて無料で続けているのは、「知らなかったせいで困る人」を少しでも減らしたいからです。
また、もしあなたの現場で…
- 「この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
Paypal
小さな支援が大きな力になります。
https://paypal.me/soup01threes?country.x=JP&locale.x=ja_JP
知ってたら助かること、届けたいだけです
あなたの応援が、知識の共有をもっと自由で持続可能なものにしてくれます。これからもどうぞよろしくお願いします。
soup01threes*gmail.com
技術はひとりじゃもったいない。
Reference Link
http://soup01.com/ja/category/deltamotioncontrol/
http://soup01.com/ja/category/protocol/ethernet-ip/
Ethernet/IP
EtherNet/IPは、ODVAが管理・配布するオープンアプリケーションプロトコルです。EtherNet/IPは、Allen Bradley、Schneider Electric、Omronをはじめとする複数のPLCのEthernetモジュールで使用されています。EtherNet/IPは、DeviceNetがCIPのCAN適応版であり、ControlNetがCIPのCTDMA適応版であるのと同様に、CIP(Control Information Protocol)をEthernet向けに適応させたプロトコルです。
RMCはパッシブ型のEtherNet/IPデバイスです。RMC自身がI/O接続を確立したり、メッセージングトランザクションを開始したりすることはありません。そのため、RMCの制御やデータ取得には、アクティブなEtherNet/IPデバイスまたはクライアントが必要です。
RMC75E、RMC150E、およびRMC200は、EtherNet/IPメッセージングとEtherNet/IP I/Oをサポートしています。

EtherNet/IPメッセージング
EtherNet/IP明示的メッセージング(Explicit Messaging)は、オリジネータ(PLCまたはHMI)がターゲットデバイス(RMC)に対して個別のサービスを要求する仕組みです。これらの要求は、I/Oのように周期的にスケジューリングされるのではなく、明示的に行われます。I/O接続では交換するI/Oデータを事前に設定する必要があるのに対し、明示的メッセージングはターゲットデバイス上のアクセス対象データやサービスの柔軟性という点でI/Oよりもはるかに優れています。
多くの場合、RMCユーザーはEtherNet/IP明示的メッセージングを使用して、RMC内のレジスタの読み書きを行います。また、上級のEtherNet/IPユーザーの中には、標準CIPサービスおよび属性にアクセスしたい場合もあります。
RMCで利用可能なEtherNet/IP明示的メッセージングサービスには、次の3種類があります。
- Allen-Bradley PCCC/DF1サービスを使用したRMCレジスタの読み書き
- レジスタマップオブジェクト(Register Map Object)を使用したRMCレジスタの読み書き
- 標準CIPサービスおよび属性へのアクセス
EDSファイル
EDS(Electronic Data Sheet)ファイルは、多くのベンダーのEtherNet/IP設定ツールで通信設定を支援するために使用されます。
接続タイプ
RMCは3種類のI/O接続をサポートしています。この3種類の中では、Input/Output接続タイプが圧倒的に多く使用されます。他の2種類は、一般的に複数のI/O接続を使用する場合にのみ利用されます。
Input/Output
この接続は双方向です。オリジネータ(PLCまたはHMI)がRMCに消費されるデータを送信し、ターゲット(RMC)はオリジネータに消費されるデータを送信します。この接続タイプは、Exclusive Owner接続または制御接続とも呼ばれます。
Input Only
この接続タイプでは、ターゲット(RMC)のみがデータを生成し、オリジネータ(PLCまたはHMI)がそれを消費します。オリジネーターはハートビートパケットのみを送信します。このハートビートは、RMCが接続断を検出できるよう、RPI(要求パケット間隔)よりも低い頻度で送信される場合があります。
Listen Only
この接続タイプは入力のみ接続と同一ですが、1つ例外があります。Listen Only接続は、他のI/O接続タイプのいずれかが確立されている場合にのみ存在できます。つまり、Input/OutputまたはInput Only接続が確立されるまでListen Only接続を確立することはできず、逆に最後のListen Only以外の接続が切断またはタイムアウトした場合、Listen Only接続も自動的に切断されます。このタイプは最も使用頻度が低く、RMC75/150のファームウェアバージョン3.40.x以前ではサポートされていません。
最大接続数とデータ量
接続タイプ | RMC75E | RMC150E | RMC200 |
|---|---|---|---|
I/O接続の合計数 | 4 | 4 | 4 |
入出力(Input/Output)接続数 | 1 | 1 | 最大3 |
入力のみ(Input Only)接続数 | 最大4 | 最大4 | 最大4 |
リッスンのみ(Listen Only)接続数 | 最大4 | 最大4 | 最大4 |
接続#1のサイズ | 入力125レジスタ/出力124レジスタ | 入力125レジスタ/出力124レジスタ | 入力360レジスタ/出力360レジスタ |
接続#2のサイズ | n/a | n/a | 入力125レジスタ/出力124レジスタ |
接続#3のサイズ | n/a | n/a | 入力125レジスタ/出力124レジスタ |
要求パケット間隔(RPI)
EtherNet/IP I/Oは、要求パケット間隔(RPI:Requested Packet Interval)で通信デバイス間のデータ送受信を行います。RPIはRMCToolsではなく、EtherNet/IPコントローラ(例:RSLogix 5000)側で設定します。RMCがサポートするRPIは、確立されるI/O接続の同時接続数に応じて異なります。
I/O接続数 | 最小RPI RMC75/150 | 最小RPI RMC200 CPU20L | 最小RPI RMC200 CPU40 | 標準RPI | 最大RPI |
|---|---|---|---|---|---|
1 | 2 ms | 1ms | 1ms | 20 ms | 10,000 ms |
2 | 3 ms | ||||
3 | 4 ms | ||||
4 | 4 ms |
RPIは、ミリ秒単位の整数値であり、かつRMCのループタイムの倍数である必要があります。例えば、ループタイムが2 msまたは4 msの場合、9 msのRPIは使用できませんが、ループタイムが1 ms以下であれば使用可能です。
Deltaは、ネットワーク負荷を軽減するため、アプリケーションの要件を満たす範囲で最も遅いRPIを使用することを推奨しています。
Loop Time
RMCは決定性コントローラです。特定のインターバルで入力を読み取り、制御アルゴリズムを演算し、出力を更新します。このインターバルは、コントローラが繰り返しコードを「ループ」する動作にちなんで、コントローラループタイムと呼ばれます。
RMCは常に設定されたループタイムで動作します。1ループ分のすべての演算が完了すると、次のループタイムまで待機してから再び演算を実行します。
マルチキャストとポイントツーポイント(ユニキャスト)
RMCはマルチキャストとユニキャスト(ポイントツーポイント)の両方のI/O接続をサポートしています。ネットワークトラフィックを削減するため、EtherNet/IP I/OコントローラがサポートしているときはほぼすべてのケースでユニキャストI/O接続を選択してください。
RMC75/150がマルチキャストI/O接続を必要とするのは、複数のI/O接続を同時に確立する場合のみであり、これは非常にまれなケースです。RMC200は複数のユニキャストI/O接続をサポートしています。
入力データ
入力データは、RMCが生成してPLCに送信するデータです。デフォルトでは、入力データのソースはインダイレクトデータマップ(Indirect Data Map)であり、インダイレクトデータマップのアイテム0から始まります。
まず、転送したいRMCレジスタにマッピングするため、RMCTools上でインダイレクトデータマップを設定する必要があります。一般的には、各制御軸の実位置、ステータスおよびエラービット、PLCがどのユーザープログラムが実行中かを判別するためのタスクステータスレジスタ、およびその他の任意のレジスタを含めます。
入力データのソースは後述のとおりインダイレクトデータマップ以外に変更することも可能ですが、ほぼすべてのEtherNet/IP I/Oアプリケーションではインダイレクトデータマップが使用されます。
入力データのサイズは、EtherNet/IP I/O接続を設定する際にPLC側で指定します。
EtherNet/IP I/O接続が確立されると、入力データはRPIごとにRMCからPLCへ自動的に送信されます。PLCは必要なときにいつでもそのデータを使用できます。
出力データ
出力データは、PLCから送信されRMCが消費するデータです。デフォルトでは、出力データの宛先はインダイレクトデータマップです。これにより、PLCは変数や軸コマンドレジスタなど、インダイレクトデータマップにマッピングされた任意のレジスタに容易に書き込むことができます。
出力データの宛先はインダイレクトデータマップ以外に変更することも可能ですが、ほとんどのアプリケーションではインダイレクトデータマップが適切に機能します。
出力データのサイズは、EtherNet/IP I/O接続を設定する際にPLC側で指定します。出力データのサイズは、書き込みたいレジスタ数に、同期レジスタ(Sync Register)を使用する場合はそれを加えた数に設定する必要があります。
EtherNet/IP I/O接続が確立されると、出力データはRMCへの書き込みに使用されます。
注意-ユニキャストI/O接続
可能な限り、マルチキャストではなくユニキャストI/O接続を使用してください。Allen-Bradley製品では、RSLogix 5000 v18以前はマルチキャスト接続のみサポートしていた点に注意してください。
注意-適切なRPI
必要以上に低いRPIを使用しないでください。通常、10 msまたは20 msのRPIで十分です。RPIを下げるとシステム内のすべてのEthernetコンポーネントの負荷が増加しますが、ある一定以上は効果がありません。例えば、RPIが制御PLCのスキャンタイムよりも低い場合、追加パケットはシステムに何ら利益をもたらしません。
注意-スイッチ関係
ハブや半二重スイッチギアは絶対に使用しないでください。これらはコリジョン(衝突)を引き起こし、ネットワークのスケーラビリティと決定性を大幅に低下させます。
マルチキャスト接続を使用する場合、ルーター経由を除き、EtherNet/IP I/Oネットワークを
Ethernetの汎用ネットワークに接続しないでください。EtherNet/IP I/Oネットワーク上のマルチキャストトラフィックはIT部門に検知される可能性があります。逆に、汎用ネットワーク上の障害がファクトリネットワークに影響を与える恐れがあります。ユニキャストI/O接続のみを使用する場合は、スイッチを介して汎用ネットワークに接続することが一部のアプリケーションで許容される場合があります。
負荷問題
EtherNet/IP I/Oコントローラの帯域幅の90%を超える総帯域幅が必要な場合は、以下のいずれかの対策を検討してください:
1つまたは複数のRMC接続のRPIを増加させる
RPIを増加させることで、必要な帯域幅を削減できます。例えば、RPIを2倍にすると帯域幅は半分になります。多くの場合、PLCがRPIと同じ頻度でラダーロジックをスキャンできないため、RPIを増加させてもシステムパフォーマンスに影響を与えないことに注意してください。
EtherNet/IPコントローラをより高速なモデルに交換する
同一プラットフォームでより高い帯域幅を持つEtherNet/IPコントローラが利用可能な場合、EtherNet/IPコントローラのアップグレードが可能です。
複数のEtherNet/IPモジュールを使用してネットワークを分割する
PLCに1つ以上のEtherNet/IP通信モジュールを追加し、それぞれより少ない台数のRMCを持つ独立したネットワークを構成することで、各デバイスの帯域幅要件を削減できます。個々のネットワークを直接またはスイッチを介して相互接続すると、ネットワーク分割の効果が大幅に損なわれるため、これは重要な注意点です。
ネットワークパフォーマンス
100 Mbps Ethernetが一方向で伝送できる最大情報量は、毎秒1億ビットです。ネットワーク上のすべてのパケットがRMCでサポートされる最大サイズのEtherNet/IP I/Oパケット(125個の4バイトREAL値)であった場合、最大21,600パケット/秒となります(この推定値にはヘッダーやフレーム間隔などのパケットオーバーヘッドが含まれます)。ネットワーク使用率はこの最大値を大幅に下回るように維持する必要があります。使用率が最大値に近づくにつれ、パケットが送信待ちになる可能性が高まり、わずかな遅延が発生します。
パケット処理
伝送路自体の限界に加え、多くのデバイスにはパケット処理が追いつかずパケットを廃棄することなく受信できる最大持続レートがあります。RMCもその一つであり、パケット処理よりもモーション制御が優先されます。現時点では所定の最大レートは規定されていませんが、デバイスのEthernet统計情報を確認することで、パケットが廃棄されていないかどうかを確認できます。
EtherNet/IPマルチキャストI/O接続
EtherNet/IPマルチキャストI/O接続は、Ethernetネットワークのパフォーマンスに大きな影響を与える可能性があることに注意してください。ユニキャストパケットが単一のデバイスに直接送信されるのとは異なり、マルチキャストパケットはデフォルトでネットワーク上のすべてのデバイスに送信されます。これにより、スイッチを含むすべてのデバイスおよび各ネットワークセグメントの負荷が増加します。
ネットワーク使用率が高い場合、またはネットワーク機器がパケットレートの高さによりパケットを廃棄している場合は、ネットワーク使用率を削減する方法を検討する必要があります。ネットワーク使用率を削減する方法は3つあります。
マルチキャストI/O接続をユニキャストに変更する
マルチキャストI/O接続はネットワーク負荷を大幅に増加させる可能性があります。多くのアプリケーションではマルチキャストI/O接続は不要で、すべてのI/O接続をユニキャストとして設定してください。
1つまたは複数のEtherNet/IP I/O接続のRPIを増加させる
ネットワーク使用率を削減する最も簡単な方法は、EtherNet/IP I/O接続のRPIを増加させることです。もちろん、これはRPIが不必要に低い場合にのみ有効です。
複数のEtherNet/IPモジュールを使用してネットワークを分割する
PLCに1つ以上のEtherNet/IP通信モジュールを追加し、それぞれより少ない台数のRMCを持つ独立したネットワークを構成することで、各サブネットワークの使用率を削減できます。
Implementation
Delta Motion Side
Download EDS File
Delta Motion社のHPからEDS FILEををDownloadしてください。

Configuration
次はRMC Toolsを起動し、Modules→CPU→右クリック→Propertiesをクリックします。

Ethernet/IP Menuを開きます。

3つのConnectionの入出力データの先頭アドレスを設定してください。

そのアドレスは実際にAddress Mapsから確認できます。

下図のようにReg#から確認できます。

Codesys Side
次はCodesys側を構築します。
Install EDS File
RMC200のEDS FILEをインストールするために、Tools→Device Repositoryをクリックします。

Installボタンをクリックします。

先程DownloadしたEDS FILEを選択します。

Done!RMC200のEDS FILEがインストールできました。

Ethernet インタフェース追加
Deviceを右クリック→Add Deviceします。

Etherent Adapter→EthernetをクリックしEthernet インタフェースを追加します。

Ethernet/IP Scanner追加
次はEthernet インタフェースを右クリック→Add Deviceします。

Ethernet/IP Scannerを選び→Add Deviceします。

Add RMC200
最後は今回記事で使用するDelta Motion RMC200を追加するために、Ethernet/IP Scanner→右クリック→Add Deviceします。

RMC200を選択します。

Done!

IP
先程追加したRMC200をクリックし、General→IP addressでRMC200のIPアドレスに合わせます。

Connection
次はConnection Tabを開きます。

Add Connectionで新規接続を追加します。

アプリケーションに合わせて接続タイプ・そしてデータの交換サイズを設定しましょう。

今回の記事ではInput Only1を追加し、サイズを800Bytesにします。

Mapping
今度はEthernet/IP I/O Mapping Tabを開き、接続先のAddressを固定アドレスに設定します。

Program
DUT
stRMC300Real
stRMC300Real はREAL型の値を200個格納できる配列を持つ構造体です。インダイレクトデータマップ経由でRMCとのEtherNet/IP I/Oデータ交換の定義です。
TYPE stRMC300Real :
|
|---|
stRMC300Real_2
stRMC300Real_2 は、8軸分の軸データ(stRMC1AxisData型)と40要素の予備REAL配列を持つ構造体です。各軸のデータを軸ごとにまとめて管理するための型定義で、stRMC300Realのフラット配列に対し、軸単位でアクセスしやすい構造になっています。
TYPE stRMC300Real_2 :
|
|---|
uRMCInputs300Real
uRMCInputs300Real はUNION型であり、rawとstDataは同一メモリ領域を共有します。これにより、同じデータに対して2通りのアクセス方法が可能です。
TYPE uRMCInputs300Real :
|
|---|
stRMC1AxisData
stRMC1AxisData は1軸分のRMCデータを格納する構造体です。20個のREAL型メンバーで構成され、stRMC300Real_2のdutArrAxis配列の要素型として使用されます。8軸 × 20要素 = 160レジスタ、残り40要素がArraySpareとなり、合計200レジスタです。
TYPE stRMC1AxisData :
|
|---|
GVL
conn1IN はグローバル変数として宣言されたUNION型変数で、%ID1000はEtherNet/IP I/Oの入力アドレスに直接マッピングされています。RMCから受信した200レジスタ分の入力データに対し、以下の2通りでアクセスできます。
- フラット配列アクセス:conn1IN.raw.rArray[0]
- 軸別構造体アクセス:conn1IN.stData.dutArrAxis[0].ServoRPM
VAR_GLOBAL
|
|---|
Download
最後はプロジェクトをCodesys RuntimeにDownloadしましょう。

結果
Done!Codesys RuntimeとRMC200のEthernet/IP通信確立できました。

RMC200からのデータを受け取りました。
