今回の記事ではDelta Motion社のRMC200とECATモジュールを使用しEtherCATで接続し、また、軸を制御するためのプログラム作成・Default Axis変数の使用について説明します。
さ、FAを楽しもう。

Reference Link
http://soup01.com/ja/category/deltamotioncontrol/
http://soup01.com/ja/category/yaskawa%e5%ae%89%e5%b7%9d%e9%9b%bb%e6%a9%9f/
前書き
いつも私の技術ブログと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
技術はひとりじゃもったいない。
Delta Motion ECATモジュールx安川電機 Sigm-X
EtherCATドライブは一般的にRMC200との統合が容易で、CiA 402プロファイル準拠のドライブを推奨します。RMC200はCSP(位置)、CSV(速度)、CST(トルク)モードに対応しており、必要なPDO設定もプリセット済みです。
また、安川電機の場合は、
- 内部ギア比設定に注意(誤設定で混乱の恐れ)
- CSPモードでは、内部速度フィードフォワードを有効にするために専用のチューニング手順が必要です
Implementation
Sigm-X side
Sigm-X側のScaling設定は少しややこしいところがありますので、ここでもう一度説明します。まず例からみてみまみましょう。
一回転=6mm
- ボールねじリード:6mm
- エンコーダ:26bit = 67108864 カウント
- Reference Unit = 0.001mm
変換流れ
- 1回転あたり6mm動く → 0.001mm単位では 6000 unit
- A = 67108864
- B = 6000
- ギア比考慮なし → Electronic Gear Ratio = 67108864 / 6000 × 1/64
- Position User Unit = Numerator / Denominator = 1048576 / 6000
下図の設定を先ほどの計算に合わせて設定しましょう。
一回転=10mm
- 機械1回転 = 10 mm
- ユーザー単位(Reference Unit)= 0.001 mm(=1μm)
- → 1回転で進む距離 = 10 mm ÷ 0.001 mm = 10000 unit
これが 回転1回での移動距離 になります。
変換流れ
項目 | 値 |
A(エンコーダ) | 67108864(26 bit) |
B(1回転 = 何unitか) | 10000 |
電子ギア比(B/A × 1/64) | 10000 / 67108864 × 1/64 |
Position User Unit | Numerator = 1048576 Denominator = 10000 |
Delta Motion RMC200 Side
Add EtherCAT Module
まずはRMCプロジェクトにECATモジュールを追加してください。
Install ESI File
次はTools>EtherCAT ESI ManagerをクリックしEtherCAT ESI Fileをインストールしましょう。
Add Folderをクリックします。
各メーカーのHPからDownloadしたESI FileをImportしましょう。
Done!ESI FileがImportされました。
EtherCAT
次はRMCツールからEtherCATネットワークを構築します。
こちらはRMCツールのEtherCATネットワーク構築画面です。
Scan
下図のScanボタンをクリックし、ネットワークにあるEtherCATスレーブを検索します。
Done!今回記事で使用する安川電機のSigm-X Servoを検索できました。
PDO Mapping
次はアプリケーションに合わせて安川電機 Sigm-XのPDO Mappingを変更してください。今回の記事では現在速度・エラーコード・電流もPDO Mappingに追加しました。
Axis Definition
RMC200上で安川電機のSigm-Xを使用するには、Axis Definitionでリモート軸を追加してください。
Remote Axi追加
RMC ToolsからEtherCAT Servo 軸を追加するため、Axes>Axis Definitionsをクリックします。
こちらはRMC Toolsの軸設定画面です。Newをクリックし新しい軸を追加します。
Control ModeをRemoteにし、OutputとFirst FeedbackをECAT[Slot 2]に設定してください。
Virtual Axis
RMC200は仮想軸にも対応し、追加するにはNewボタンをクリックします。
軸の追加画面が表示され、Virtual Axisを選び、Next>で進みます。
Finishで仮想軸を追加します。
Done!
Parameters Configuration
今度は安川電機のSigm-X 軸パラメータを設定するために、Axis Toolsを開きます。
こちらはRMCツールの軸設定パラメータ画面です。
RMCツールの下にあるAll Tabを開きます。
RMCツールにすべての軸のすべてのパラメータを表示できるようになります。
Position Scale
最初に設定するのはPosition Scaleです。それはServoモータの移動量とエンコーダーの比例を設定する場所です。
Positon/Countsを選び、Next>で進みます。
今回はLinear Transducerを選び、Next>で進みます。
Desired Position unitsをmmに設定します。
次は安川電機のツールを使用し、二箇所の場所を移動します。そして1箇所ことに、”Use Current Value”ボタンをクリックし同時のCounts値を記録すれば、ツールが勝手に計算します。
Next>で進みます。
Finishで設定を完了します。
Input SubDevice
次はInput SubDeviceを設定します。
Drop-ListからEtherCATと接続してる安川電機のServoを設定してください。
Counts Index
Counts Indexを設定します。
Drop-ListからEtherCATと接続してる安川電機のServoに現在位置PDOを設定してください。
Absolute/Incremental
Servoのエンコーダタイプを設定します。今回記事で使用したのはIncrementになります。
Output Subdevice
Drop-ListからEtherCATと接続してる安川電機のServoにを設定してください。
Contro Word Index
Drop-ListからEtherCATと接続してる安川電機のServoにあるControl Word Index 0x6040を設定してください。
Status Word Index
Drop-ListからEtherCATと接続してる安川電機のServoにあるStatus Index 0x6041を設定してください。
Mode of Operation Index
Drop-ListからEtherCATと接続してる安川電機のServoにあるMode Operation Index 0x0600を設定してください。
Target Position Index
Drop-ListからEtherCATと接続してる安川電機のServoにある指令位置 Index 0x607Aを設定してください。
Position Error Index
Drop-ListからEtherCATと接続してる安川電機のServoに Index 0x60F4を設定してください。
Velocity Offset Scale
今回の記事ではOffset Scaleを使用しないので、下図のパラメータを必ず0にしてください。
Variable Table
RMC200でプログラムを作成するための変数を定義します。
Programming>Variable Tableを開きます。
今回の記事ではいくつかの変数を定義します。
- EtherCATの状態をアクセスできる変数
- 各Servoに送信するコマンド
- コマンドを送信するときに必要なパラメータ群
RMCツールは配列の定義にも対応しています。また、配列の各Elementにも個別のコメントが可能です。
そしてDWORD変数を定義した場合は、該当する変数の32Bitを個別アクセス・コメント設定も可能です。
配列を定義するにはVariable Typeの画面からSizeの欄で配列の長さを設定すればOKです。
Program
今度はプログラムを作成します。
OB1
OB1は周期的に実行するプログラムで、EtherCATの状態を確認したり、軸のコマンドを受け取たりします。
Network0・Network1
Network0はLife Counterで、現在Taskが正常に動いてるときを確認できます。
Network1はEtherCATネットワークの状態を常に監視し、OKならdEtherCATを1に書き込みます。
Network2・Network3
Network2はServoONのコマンドを受け取ります。
もし軸1ならdiServoON=1で軸2ならdiServoON=2になります。
Network3はServoOFFのコマンドを受け取ります。
もし軸1ならdiServoOFF=1で軸2ならdiServoOFF=2になります。
この2つのレジスタは後ほどで活用する”Default Axis”で使用します。
Network4・Network5
Network4は相対位置決めのコマンドを受け取ります。
もし軸1ならdiServoMovRel=1で軸2ならdiServoMoveRel=2になります。
OB101
OB101はRMC200がRUNモードになったとき一回のみ実行するプログラムです。
p02ServoON
こちらは軸のServoONプログラムです。流れとしては、
- Network0、Servo ONしたい軸番号を受け取り、Default Axis値を転送します。
- Network1、もしEtherCAT状態OKならServoONします、NGなら直接Network3に飛びます。
- Network2、ServONするコマンドを発行します。
- Network3、ENDです。
p03ServoOFF
こちらは軸のServoOFFプログラムです。流れとしては、
- Network0、Servo OFFしたい軸番号を受け取り、Default Axis値を転送します。
- Network1、もしEtherCAT状態OKならServoOFFします、NGなら直接Network3に飛びます。
- Network2、ServOFFするコマンドを発行します。
- Network3、ENDです。
p04MotorRel
こちらは軸のServoの相対位置決めコマンドを発行するプログラムです。流れとしては、
- Network0、移動したいしたい軸番号を受け取り、Default Axis値を転送します。
- Network1、もしEtherCAT状態OKならパラメータを転送します、NGなら直接Network4に飛びます。
- Network2、パラメータを転送するプログラムです。
- Network3、相対位置決めのコマンドを発行します。
- Network4、ENDです。
Program Trigger
最後はProgram Triggerを定義します。
- OB101はFirst SCAN Triggerし、実行完了したらもう2度実行しません。
- OB1はFirst SCAN Triggerし、そのあとずっとLoopします。
- SERVO ON/SERVO OFF/ SERVO相対位置決めプログラムは変数の状態によって起動します。
Result
こちらの動画から動作を確認してください。