こちらは新しい記事シリーズで三菱電機の最新のMXRコントローラーを使用し様々な検証を行います。第3話は、MXRコントローラーから仮想軸をMOTION CONTROL FBから動かしてみます。こちらは今回記事で使用する機器リストです。
- 三菱電機製MXR300-64
- ワイドミュラー製UR20-FBC-CC-TSN
- 三菱電機製NZ2GN2S1-32D
さ、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/mitsubishi-jp/mxr/
Implementation
こちらは今回の記事の構成です。

仮想軸
Virtual axisとはネットワーク上のデバイスとリンクされていない軸を示しています。
MOTION CONTROL FB
モーション制御FBには、PLCopenが策定したFBが含まれています。入出力信号の基本仕様はPLCopenモーション制御FBに準拠しています。
モーション制御FBの種類
モーション制御FBは、動作内容と実行方法によって分類されます。
種類 | 動作内容 |
|---|---|
管理FB | 軸または軸グループを引数として取り、実行によって軸ステータスや軸グループステータスを変更しないモーション制御FB(一部例外あり)。ほとんどの場合、同一の軸または軸グループに対して複数インスタンスを同時実行できる。複数インスタンスが同一軸または軸グループに対して同時実行される場合、モーション制御FBの実行優先度が高いものから優先的に処理される。 |
モーション関連FB | 軸または軸グループを引数として取り、実行によって軸ステータスや軸グループステータスを変更するモーション制御FB。ほとんどの場合、1つの軸または軸グループに対して1つのインスタンスのみ実行可能(同時実行可能なものも一部存在)。モーション関連FB実行中に管理FBを実行しても、ほとんどの場合は軸ステータスや軸グループステータスは変更されないが、特定の状態遷移を引き起こすものも存在する。複数インスタンスが同時実行される場合、優先度が高いものから優先的に処理される。 |
標準FB | 軸または軸グループを引数として取らないモーション制御FB。複数インスタンスを同時実行可能。軸に関係しないため、モーション関連FBおよび管理FBのいずれにも影響を与えない。 |
実行コマンド(Execute)タイプ モーション制御FBの基本動作
- 実行コマンド(Execute)の立ち上がりエッジで入力パラメータを読み込み、動作を開始します。動作開始後は、ExecuteがFALSEになっても動作完了まで継続されます。
- 動作開始後は、実行中(Busy)・実行完了(Done)・エラー(Error)・実行中断(CommandAborted)のうち、いずれか1つの出力変数のみがTRUEになります。
- 実行コマンド(Execute)の立ち下がりエッジで、実行完了(Done)・エラー(Error)・エラーコード(ErrorID)・実行中断(CommandAborted)がリセットされます。実行中(Busy)および制御中(Active)はリセットされません。
- 動作中に入力パラメータを変更した場合、その変更は実行コマンド(Execute)の再起動(retrigger)時、または連続更新(ContinuousUpdate)による連続更新時に反映されます。
- 解析中(AxisName.Md.Analyzing/AxesGroupName.Md.Analyzing)は、実行中(Busy)の立ち上がりエッジからTRUEになり、動作開始後にFALSEになります。
- 実行コマンド(Execute)をパルスで使用した場合、実行完了(Done)は1スキャンのみTRUEになります。
実行コマンド(Execute)タイプ モーション制御FBのタイミングチャートを以下に示します。

軸データ型
メンバー名 | データ型 | 説明 |
|---|---|---|
AxisRef | AXIS_REF | モーション制御FBの入出力用データ構造体。軸タイプに関わらず型は固定。 |
PrConst | AXIS_□_PRM_CONST | 軸パラメータデータ(定数)を格納。軸変数の初期化時に設定値を開く。軸変数の初期化後はコントロールへの再ロードは実行されない。 |
Pr | AXIS_□_PRM | 軸パラメータデータを格納。軸変数の初期化時にデフォルト値を開く。軸変数の初期化後はコントロールへの再ロードが実行される。コントロールへのフェッチタイミングはパラメータによって異なる。 |
Md | AXIS_□_MON | 軸モニタデータを格納。各モニタデータを固定周期でリフレッシュする。 |
Cd | AXIS_□_CMD | 軸制御コマンドデータを格納。制御演算周期ごとに最新値を取得し、制御に使用する。 |
MC_POWER
このFBは、指定された軸を動作可能状態に切り替えます。
- 本FBは指定した軸の情報を初期化し、軸を動作可能状態に切り替えます。
- Enable(Enable)およびサーボON要求(ServoON)の入力がいずれもTRUEのとき、選択した軸が動作可能状態に切り替わります。
- 処理が開始されると、実行中(Busy)がTRUEになります。
- ドライブユニットが動作可能状態に切り替わると、動作可能(Status)がTRUEになります。
- MC_Power(Operation Available)でエラーが発生した場合、エラー(Error)がTRUEになり、エラーコード(ErrorID)にエラーコードが格納されます。エラーコードの詳細については該当のマニュアルを参照してください。

VAR_IN_OUT
I/O変数 | データ型 | 説明 |
|---|---|---|
Axis | AXIS_REF | 軸を指定します。使用する変数(AxisName.AxisRef.)については各軸情報を参照してください。※ 軸情報はFBが初めて呼び出された時点(「PLC Ready」(MotionSystem.Cd.SequenceReady)がONになった時)に確定します。 |
VAR_INPUT
入力変数 | データ型 | 説明 |
|---|---|---|
Enable | BOOL | TRUEに設定すると、指定した軸の制御が有効(動作可能状態)になります。FALSEに設定すると、指定した軸の制御が無効になります。 |
ServoON | BOOL | TRUEに設定すると、指定した軸に対してサーボONが要求されます。 |
VAR_OUTPUT
出力変数 | データ型 | 説明 |
|---|---|---|
Status | BOOL | 軸が動作可能状態になるとTRUEになります。 |
ReadyStatus | BOOL | ドライバのREADYがONになるとTRUEになります。 |
Busy | BOOL | MC_Power(Operation Available)が実行されるとTRUEになります。 |
Error | BOOL | エラーが発生するとTRUEになります。 |
ErrorID | WORD(UINT) | エラー発生時にエラーコードを返します。 |
MC_RESET
このFBは、軸のエラーと警告をリセットします。
- 実行コマンド(Execute)がTRUEに設定されると本FBが実行されます。処理開始時に実行中(Busy)がTRUEになり、対象軸の軸エラーリセット(AxisName.Cd.ErrorReset)もTRUEになります。
- エラーおよび警告のクリアが完了すると、実行中(Busy)がFALSEになり、実行完了(Done)がTRUEになります。
- 軸ステータス(AxisName.Md.AxisStatus)が「1:エラーによる停止(ErrorStop)」以外の状態で実行した場合、警告クリア後に実行中(Busy)がFALSEになり、実行完了(Done)がTRUEになります。
- エラーや警告の原因が残存したままの状態で実行コマンド(Execute)をTRUEに設定しても、エラーおよび警告はクリアされません。命令実行から1秒以内にエラーがクリアされない場合、実行中断(CommandAborted)がTRUEになります。その場合は実行コマンド(Execute)を一旦FALSEにしてエラーおよび警告の原因を解消した後、再度Executeをに設定してください。
- MC_Reset(軸エラーリセット)でエラーが発生した場合、エラー(Error)がTRUEになり、エラーコード(ErrorID)にエラーコードが格納されます。

VAR_IN_OUT
I/O変数 | データ型 | 説明 |
|---|---|---|
Axis | AXIS_REF | 軸を指定します。使用する変数(AxisName.AxisRef.)については各軸情報を参照してください。※ 軸情報はFBが初めて呼び出された時点(「PLC Ready」(MotionSystem.Cd.SequenceReady)がONになった時)に確定します。 |
VAR_INPUT
入力変数 | データ型 | 説明 |
|---|---|---|
Execute | BOOL | TRUEに設定すると、MC_Reset(軸エラーリセット)が実行されます。 |
Options | DWORD(HEX) | 「00000000H」を設定してください。※「00000000H」以外の値を設定した場合、オプション範囲外エラー(エラーコード:1BC3H)が発生します。 |
VAR_OUTPUT
出力変数 | データ型 | 説明 |
|---|---|---|
Done | BOOL | エラーリセットが完了するとTRUEになります。 |
Busy | BOOL | MC_Reset(軸エラーリセット)が実行されるとTRUEになります。 |
CommandAborted | BOOL | MC_Reset(軸エラーリセット)がタイムアウトにより中断されるとTRUEになります。実行コマンド(Execute)がFALSEになるとFALSEになります。 |
Error | BOOL | エラーが発生するとTRUEになります。 |
ErrorID | WORD(UINT) | エラー発生時にエラーコードを返します。 |
MC_HOME
本FBは、指定した軸のホーミング(原点復帰)を実行します。Homingでは、機械原点が確立されます。モーションシステムおよびドライバに格納されているアドレス情報はこの処理中には使用されません。ホーミングによって機械的に確立された位置が、位置決め制御における始点、すなわち「ホームポジション」となります。


VAR_IN_OUT
I/O変数 | データ型 | 説明 |
|---|---|---|
Axis | AXIS_REF | 軸を指定します。使用する変数(AxisName.AxisRef.)については各軸情報を参照してください。※ 軸情報はFBが初めて呼び出された時点(「PLC Ready」(MotionSystem.Cd.SequenceReady)がONになった時)に確定します。 |
VAR_INPUT
入力変数 | データ型 | 説明 |
|---|---|---|
Execute | BOOL | TRUEに設定すると、MC_Home(OPR)が実行されます。 |
Position | LREAL | 原点位置アドレスを設定します。以下の範囲内で設定してください。-10000000000.0 ≤ 設定値 < 10000000000.0 ※リングカウンタが有効な場合はリングカウンタの範囲が使用されます。 |
AbsSwitch | MC_INPUT_REF | ドライバホーミング方式において、デバイスに伝達される近点ドグ信号を設定します。 |
Options | DWORD(HEX) | MC_Home(OPR)の機能オプションを指定したビット位置に設定します。 |
VAR_OUTPUT
出力変数 | データ型 | 説明 |
|---|---|---|
Done | BOOL | ホーミングが完了するとTRUEになります。 |
Busy | BOOL | MC_Home(OPR)が実行されるとTRUEになります。 |
Active | BOOL | MC_Home(OPR)が軸を制御している間TRUEになります。 |
CommandAborted | BOOL | エラーまたは多重起動によりMC_Home(OPR)の実行が中断されるとTRUEになります。 |
Error | BOOL | エラーが発生するとTRUEになります。 |
ErrorID | WORD(UINT) | エラー発生時にエラーコードを返します。 |
MCv_JOG
本FBは、指令速度に従ってJOG運転を実行します。
- MCv_JOGは、正転JOGコマンド(JogForward)または逆転JOGコマンド(JogBackward)がTRUEに設定されると、対象軸を指定方向に移動させます。
- JOG運転中の軸ステータス(AxisName.Md.AxisStatus)は「6:連続運転中(ContinuousMotion)」になります。
- 正転JOGコマンド(JogForward)または逆転JOGコマンド(JogBackward)がFALSEになると、減速停止を開始します。
- 減速停止完了時の軸ステータス(AxisName.Md.AxisStatus)は「4:待機中(Standstill)」になります。
- 正転JOGコマンド(JogForward)または逆転JOGコマンド(JogBackward)がFALSEになる際の減速中にエラー(Error)がTRUEになった場合、正転JOGコマンド(JogForward)または逆転JOGコマンド(JogBackward)が再びTRUEになるまでエラー(Error)はTRUEのままとなります。
- JOG運転中に別の動作FBが起動された場合、起動済みFBのバッファモード(BufferMode)の設定に基づいて動作します。
- 別の動作FBが実行中にJOG運転を起動した場合、起動要求は無視され、起動時動作警告(イベントコード:00D01H)が発生します。軸ステータス(AxisName.Md.AxisStatus)が「4:待機中(Standstill)」の場合にJOG運転を開始してください。
- JOG運転中に速度を変更する場合は、オーバーライド機能を使用して速度変更を行ってください。

VAR_IN_OUT
I/O変数 | データ型 | 説明 |
|---|---|---|
Axis | AXIS_REF | 軸を指定します。使用する変数(AxisName.AxisRef.)については各軸情報を参照してください。※ 軸情報はFBが初めて呼び出された時点(「PLC Ready」(MotionSystem.Cd.SequenceReady)がONになった時)に確定します。 |
VAR_INPUT
入力変数 | データ型 | 説明 |
|---|---|---|
JogForward | BOOL | TRUEに設定すると、MCv_Jog(JOG)が正転方向に実行されます。 |
JogBackward | BOOL | TRUEに設定すると、MCv_Jog(JOG)が逆転方向に実行されます。 |
Velocity | LREAL | 指令速度を設定します。 |
Acceleration | LREAL | 加速度を設定します。 |
Deceleration | LREAL | 減速度を設定します。 |
Jerk | LREAL | ジャークを設定します。 |
Options | DWORD(HEX) | MCv_Jog(JOG)の機能オプションを指定したビット位置に設定します。 |
VAR_OUTPUT
出力変数 | データ型 | 説明 |
|---|---|---|
Done | BOOL | JOGコマンドをOFFにした後、減速停止が完了した1スキャンのみTRUEになります。 |
Busy | BOOL | MCv_Jog(JOG)が実行されるとTRUEになります。 |
Active | BOOL | MCv_Jog(JOG)が軸を制御している間TRUEになります。 |
CommandAborted | BOOL | MCv_Jog(JOG)の実行が中断されるとTRUEになります。 |
Error | BOOL | エラーが発生するとTRUEになります。 |
ErrorID | WORD(UINT) | エラー発生時にエラーコードを返します。 |
MC_MoveAbsolute
MC_MoveAbsoluteは、目標位置(Position)・速度(Velocity)・加速度(Acceleration)・減速度(Deceleration)・ジャーク(Jerk)・方向選択(Direction)・バッファモード(BufferMode)・オプション(Options)を設定し、起動時の現在位置(始点位置)から目標位置(Position)に設定された指定位置(終点位置)までの位置決めを実行します。

VAR_IN_OUT
I/O変数 | データ型 | 説明 |
|---|---|---|
Axis | AXIS_REF | 軸を指定します。使用する変数(AxisName.AxisRef.)については各軸情報を参照してください。※ 軸情報はFBが初めて呼び出された時点(「PLC Ready」(MotionSystem.Cd.SequenceReady)がONになった時)に確定します。 |
VAR_INPUT
入力変数 | データ型 | 説明 |
|---|---|---|
Execute | BOOL | TRUEに設定すると、MC_MoveAbsolute(絶対値位置決め)が実行されます。 |
ContinuousUpdate | BOOL | 目標位置(Position)・速度(Velocity)・加速度(Acceleration)・減速度(Deceleration)の連続変更を有効または無効にします。FALSE:無効、TRUE:有効。 |
Position | LREAL | 絶対値位置決めの目標位置を設定します。設定可能範囲は設定内容によって異なります。 |
Velocity | LREAL | 速度を設定します。 |
Acceleration | LREAL | 加速度を設定します。 |
Deceleration | LREAL | 減速度を設定します。 |
Jerk | LREAL | ジャークを設定します。 |
Direction | INT(MC_DIRECTION) | ソフトウェアストロークリミットが無効の場合、現在位置から目標位置へ移動する方向を設定します。1:正転方向(mcPositiveDirection)、2:逆転方向(mcNegativeDirection)、3:最短経路(mcShortestWay)。※省略した場合、方向選択範囲外エラー(エラーコード:1AA5H)が発生します。 |
BufferMode | INT(MC_BUFFER_MODE) | バッファモードを設定します。0:中断(mcAborting)、1:バッファ(mcBuffered)、2:ブレンディングLow(mcBlendingLow)、3:ブレンディングPrevious(mcBlendingPrevious)、4:ブレンディングNext(mcBlendingNext)、5:ブレンディングHigh(mcBlendingHigh)。 |
Options | DWORD(HEX) | MC_MoveAbsolute(絶対値位置決め)の機能オプションを指定したビット位置に設定します。 |
VAR_OUTPUT
出力変数 | データ型 | 説明 |
|---|---|---|
Done | BOOL | 目標位置に到達するとTRUEになります。 |
Busy | BOOL | MC_MoveAbsolute(絶対値位置決め)が実行中にTRUEになります。目標位置到達後にFALSEになります。 |
Active | BOOL | MC_MoveAbsolute(絶対値位置決め)が軸を制御している間TRUEになります。目標位置到達後にFALSEになります。 |
CommandAborted | BOOL | MC_MoveAbsolute(絶対値位置決め)の実行が中断されるとTRUEになります。実行コマンド(Execute)がFALSEになるとFALSEになります。 |
Error | BOOL | エラーが発生するとTRUEになります。 |
ErrorID | WORD(UINT) | エラー発生時にエラーコードを返します。エラーコードの詳細については、使用するコントローラのユーザーズマニュアルを参照してください。 |
使用例
始点位置(現在の停止位置)が「1000.0」、目標位置(Position)が「8000.0」に設定されている場合、移動量「7000.0(8000.0-1000.0)」の正転方向への位置決めが実行されます。

MC_MoveRelative
MC_MoveRelativeは、相対位置の移動量を設定し、位置決めを実行します。移動量(Distance)・速度(Velocity)・加速度(Acceleration)・減速度(Deceleration)・ジャーク(Jerk)・バッファモード(BufferMode)を設定し、起動時の現在位置(始点位置)からDistanceに設定した移動量で位置決めを実行します。移動方向は移動量の符号によって決定されます。実行中の軸ステータス(AxisName.Md.AxisStatus)は「5:位置決め運転中(DiscreteMotion)」になります。

VAR_IN_OUT
I/O変数 | データ型 | 説明 |
|---|---|---|
Axis | AXIS_REF | 軸を指定します。使用する変数(AxisName.AxisRef.)については各軸情報を参照してください。※ 軸情報はFBが初めて呼び出された時点(「PLC Ready」(MotionSystem.Cd.SequenceReady)がONになった時)に確定します。 |
VAR_INPUT
入力変数 | データ型 | 説明 |
|---|---|---|
Execute | BOOL | TRUEに設定すると、MC_MoveRelative(相対値位置決め)が実行されます。 |
ContinuousUpdate | BOOL | 移動量(Distance)・速度(Velocity)・加速度(Acceleration)・減速度(Deceleration)の連続変更を有効または無効にします。FALSE:無効、TRUE:有効。 |
Distance | LREAL | 起動時の現在位置から終点までの相対移動量を設定します。 |
Velocity | LREAL | 速度を設定します。 |
Acceleration | LREAL | 加速度を設定します。 |
Deceleration | LREAL | 減速度を設定します。 |
Jerk | LREAL | ジャークを設定します。 |
BufferMode | INT(MC_BUFFER_MODE) | バッファモードを設定します。0:中断(mcAborting)、1:バッファ(mcBuffered)、2:ブレンディングLow(mcBlendingLow)、3:ブレンディングPrevious(mcBlendingPrevious)、4:ブレンディングNext(mcBlendingNext)、5:ブレンディングHigh(mcBlendingHigh)。 |
Options | DWORD(HEX) | MC_MoveRelative(相対値位置決め)の機能オプションを指定したビット位置に設定します。 |
VAR_OUTPUT
出力変数 | データ型 | 説明 |
|---|---|---|
Done | BOOL | 目標位置に到達するとTRUEになります。 |
Busy | BOOL | MC_MoveAbsolute(絶対値位置決め)が実行中にTRUEになります。目標位置到達後にFALSEになります。 |
Active | BOOL | MC_MoveAbsolute(絶対値位置決め)が軸を制御している間TRUEになります。目標位置到達後にFALSEになります。 |
CommandAborted | BOOL | MC_MoveAbsolute(絶対値位置決め)の実行が中断されるとTRUEになります。実行コマンド(Execute)がFALSEになるとFALSEになります。 |
Error | BOOL | エラーが発生するとTRUEになります。 |
ErrorID | WORD(UINT) | エラー発生時にエラーコードを返します。 |
使用例
始点位置(現在の停止位置)が「5000.0」、移動量が「-7000.0」に設定されている場合、「-2000.0」への位置決めが実行されます。

MC_MoveVelocity
MC_MoveVelocityは、ドライバをCSV(サイクリック同期速度制御)モードに切り替え、指定された速度に従って速度制御を実行します。そして設定された加速度(Acceleration)・減速度(Deceleration)・ジャーク(Jerk)に基づいて指令速度を制御します。MC_MoveVelocity(速度制御)を終了するには、MC_Stop(強制停止)を起動してください。

VAR_IN_OUT
I/O変数 | データ型 | 説明 |
|---|---|---|
Axis | AXIS_REF | 軸を指定します。使用する変数(AxisName.AxisRef.)については各軸情報を参照してください。※ 軸情報はFBが初めて呼び出された時点(「PLC Ready」(MotionSystem.Cd.SequenceReady)がONになった時)に確定します。 |
VAR_INPUT
入力変数 | データ型 | 説明 |
|---|---|---|
Execute | BOOL | TRUEに設定すると、MC_MoveVelocity(速度制御)が実行されます。 |
ContinuousUpdate | BOOL | 速度(Velocity)・加速度(Acceleration)・減速度(Deceleration)の連続変更を有効または無効にします。FALSE:無効、TRUE:有効。 |
Velocity | LREAL | 指令速度を設定します。速度が負の値の場合、軸は負方向に移動します。「0.0」を設定した場合、軸は動作しませんが、軸ステータス(AxisName.Md.AxisStatus)は「6:連続運転中(ContinuousMotion)」になります。詳細については速度(Velocity)を参照してください。 |
Acceleration | LREAL | 加速度を設定します。 |
Deceleration | LREAL | 減速度を設定します。 |
Jerk | LREAL | ジャークを設定します。 |
Direction | INT(MC_DIRECTION) | 方向を設定します。1:正転方向(mcPositiveDirection)、2:逆転方向(mcNegativeDirection)。※「2:逆転方向(mcNegativeDirection)」が設定され、かつVelocityが負の値の場合、モータの移動方向は正転になります。※省略した場合、方向選択範囲外エラー(エラーコード:1AA5H)が発生します。 |
BufferMode | INT(MC_BUFFER_MODE) | バッファモードを設定します。0:中断(mcAborting)、1:バッファ(mcBuffered)。詳細についてはバッファモード(BufferMode)を参照してください。 |
Options | DWORD(HEX) | MC_MoveVelocity(速度制御)の機能オプションを指定したビット位置に設定します。 |
VAR_OUTPUT
出力変数 | データ型 | 説明 |
|---|---|---|
InVelocity | BOOL | モーションシステムが計算した指令速度が目標速度に達するとTRUEになります。連続更新(ContinuousUpdate)により目標速度が変更された場合、変更後の目標速度に達するまでFALSEのままになります。 |
Busy | BOOL | MC_MoveVelocity(速度制御)が実行されるとTRUEになります。 |
Active | BOOL | MC_MoveVelocity(速度制御)が軸を制御している間TRUEになります。 |
CommandAborted | BOOL | MC_MoveVelocity(速度制御)の実行が中断されるとTRUEになります。実行コマンド(Execute)がFALSEになるとFALSEになります。 |
Error | BOOL | エラーが発生するとTRUEになります。 |
ErrorID | WORD(UINT) | エラー発生時にエラーコードを返します。 |

Implementation
仮想軸を追加
仮想軸を追加するためにMotion Setting→Axis→Add New Dataします。

Axisの追加画面が表示されます。

Axis TypeをVirtual Drive Axisに選択します。

そしてOkをクリックします。

Done!仮想軸が追加されました。

軸が追加されると同時に、Global LabelにはAx+Globalというリストにも自動的に追加されます。

Ax+Globalのリストの中に先ほど追加した仮想軸の変数が自動的に宣言されます。

その変数にはAxisのパラメータ・モニター用変数・MCブロック用のAXISREFなどにも入っています。

軸設定
次は軸設定を行います。最初にAbsolute Position Control Settingに”Enable Absolute Position System”を設定します。

Homing→Homing Required or Notを”Homing Not Required”に設定します。

プログラム
次は仮想軸を動かすプログラムを作成します。

こちらは今回記事で作成したプログラムです。

Rung1-9
このブロックは、SM400(常時ON)と各制御ビットを条件として、サーボ制御用の内部変数を駆動するコマンドミラーリング回路です。

Rung10
このブロックはMC_Power_1(MC_Power)ファンクションブロックの接続回路で、xServoEnbとxServoOnがともにONになると、Axis0001軸のサーボが有効化されます。動作状態はM202〜M204・M240およびD1000に格納され、後段のHMI監視や保護回路で参照されます。

Rung17
このブロックはMC_ReadStatus_1(MC_ReadStatus)ファンクションブロックの接続回路で、Axis0001軸のステータスをリアルタイムで監視します。Valid・Busy・ErrorStop・Disabled・Stoppingなどの各状態がM205〜M211に格納され、HMI表示や保護インターロック回路で参照されます。

Rung31
このブロックはMC_Reset_1(MC_Reset)ファンクションブロックの接続回路で、M300(xServoResetのミラー)がONになるとAxis0001軸のエラーリセットが実行されます。リセット完了・実行中・中断・エラーの各状態がM216〜M219およびD1002に格納され、HMI監視や後段の保護回路で参照されます。

Rung38
このブロックはMC_Home_1(MC_Home)ファンクションブロックの接続回路で、M301(xServoHomeのミラー)がONになるとAxis0001軸の原点復帰が実行されます。原点位置は0.0固定で、近点ドグ信号としてabsSwitchが使用されます。各状態はM220〜M224およびD1002に格納され、ホーミング完了の確認や異常検出に活用されます。

Rung46
このブロックはMCv_Jog_1(MCv_Jog)ファンクションブロックの接続回路で、M302(xServoJogFW)がONで正転JOG、M303(xServoJogBW)がONで逆転JOGが実行されます。速度・加速度・減速度・ジャークはすべて10.0固定値で設定されており、試験・調整用の簡易JOG動作として機能しています。

Rung55
このブロックはMC_Stop_1(MC_Stop)ファンクションブロックの接続回路で、M304(xServoStopのミラー)がONになるとAxis0001軸の強制停止が実行されます。減速度・ジャークは10.0固定値で、MC_MoveVelocity(速度制御)などの連続運転FBを終了させる際にも使用されます。停止完了・実行中断・エラーの各状態はM230〜M234およびD1004に格納されます。

Rung63
このブロックはMC_MoveAbsolute_1(MC_MoveAbsolute)ファンクションブロックの接続回路で、xServoMovAがONになると、nAbsPos(目標位置)・nAbsVel(速度)を参照してAxis0001軸の絶対値位置決めが実行されます。位置・速度は外部から可変設定が可能で、加速度・減速度・ジャークは100.0固定値となっています。xServContinによる連続更新も対応しており、動作中のパラメータ変更が可能な構成です。

Rung75

Rung86

結果






最初にM300をTRUEし、仮想軸をリセットします。

MC_ResetのDone出力がTRUEになり、それはリセット完了です。

次はM301をTRUEし仮想軸にHome動作させます。

MC_HomeのDone出力がTRUEになり、それは仮想軸のHomingが完了です。

次はM302やM303をTRUEすれば仮想軸のJOG動作をトリガーできます。

CC-Link IE TSN Fieldbus経由で取得した入力から仮想軸のServoONとServo 有効してみます。

xServoEnb・xServoOnがともにONで、軸は動作可能状態(M202=ON)かつ実行中(M204=ON)で、ドライバのReady信号(M203)もONになりました。

MC_ReadStatus_1(MC_ReadStatus)はSM400により常時有効化されており、Valid・BusyがともにON、ErrorがOFFの正常動作状態です。軸ステータスの読み出しが継続して実行されています。

Axs0001.Md.CumulativePosition変数から仮想軸の現在値が表示されています。

では、rAbsPosとrAbsVelに設定値を入力し、仮想軸から絶対位置決めを実行しましょう。

そして仮想軸が絶対位置決めがスタートします。

そしてMC_MoveAbsolute_1(MC_MoveAbsolute)からDoneの出力がTRUEになり、仮想軸も現在値が200になりました。
