- PLCのモーション制御プログラミング
第1回 Motion Control ファンクションブロックの共通仕様と単軸の位置決め制御
PLCのモーション制御プログラム開発に貢献する「PLCopenc Motion Control Function Block(以下、FB)」。本連載ではこのMotion Control FBについてより深く掘り下げ、解説していきます。第1回は共通仕様と単軸の位置決め制御について取り上げます。
PLCopenのMotion Control FBとは、IEC 61131-3準拠のPLC(Programmable Logic Controller)で使用するモーション制御用ファンクションブロックのことです。
以前の連載「PLCの国際標準プログラミング:IEC 61131-3とは?」において、第4回で『PLCopen®の「Motion Control FB」とは』 を取り上げました。この中で、ハードウェア依存部を排除し動作仕様やインタフェース仕様を標準化することにより「再利用性を向上させること」「ユーザーの トレーニングコストを低減させること」が「Motion Control FB(ファンクションブロック)」の狙いであることを説明いたしました。
図1:オムロン製 CJシリーズの相対位置決めプログラム(SYSMAC CJ1W-NC281/481/881 ユーザーズマニュアルより)
図2:オムロン製NJシリーズの相対位置決めプログラム事例(Sysmac Studio画面)
相対位置決めを例に、Motion Control FBをサポートしていないPLC(図1)と、サポートしているPLC(図2)のプログラムを比較してみます。
図1では、W012、W010.01といったメモリアドレスをプログラム中に記述しています。慣れた方には実装しやすいプログラミング方法であるもののメモリアドレスを意識する必要があります。一方、図2は メモリアドレスを意識する必要もなく、メモリアドレス変更時でもプログラムに影響しないため、プログラムの再利用性が向上します。また、プログラムの視認性が高まること、IEC 61131-3 に準拠した変数が使用できることもMotion Control FBのメリットだといえます。
この例からMotion Control FBの狙いやメリットを理解してもらえると思います。しかし本記事の読者の多くは、より複雑な制御をする場合にMotion Control FBをどのように使うのか知りたいのではないでしょうか。
そこで今回から4回にわたって、Motion Control FBを用いたモーション制御プログラムの事例を紹介しながら、Motion Control FBの狙いやメリットをより具体的に紹介していきます。第1~3回まではMotion Control FBの代表的な機能の紹介とともに、Motion Control FBを適用したプログラム事例を紹介します。第4回は、PLCベンダー間でのプログラムの移植性について紹介します。初回となる今回は、Motion Control FBの共通仕様と単軸の位置決めについて説明します。
内容 | |
---|---|
第1回 | Motion Control FBの共通仕様と単軸の位置決め制御 |
第2回 | 同期制御と補正 |
第3回 | 軸グループ制御 |
第4回 | PLCベンダー間でのプログラム移植性 |
本連載で紹介するプログラム事例は特に断りがない限り、PLCopen Motion Control FBの技術仕様書に記載された範囲内で実現できるものです*1
*1 技術仕様書の実現内容は各PLCベンダーに依存します。本連載で紹介するプログラム事例、動作事例が各ベンダーのPLCopen認証Motion Control FBで実現できることを保証するものではありません。
Motion Control FBの共通仕様
技術仕様書では、各FBのインタフェースの他、Motion Control FBの共通仕様も記載されています。今回は、FBのインタフェースの振る舞いとバッファモードについて紹介します。
FBのインタフェースの振る舞い
各FBのインタフェース(入力/出力の変数)のうち、代表的な変数を表1に紹介します。また、これらの変数のTRUE/FALSEのタイミングチャートを図3に示します。
FBはExecuteの立ち上がりエッジで起動され、BusyがTRUEとなります。FBが制御状態になると、ActiveもTRUEになります。FBが正常完了するとDoneがTRUEとなり、BusyやActiveはFALSEになります。
※左右にスクロールしてご覧ください。
変数名 | 名称 | 説明 | |
---|---|---|---|
VAR_IN_OUT(入出力変数) | |||
Axis | 軸 | AXIS_REF型の構造体変数です。内容はベンダー実装に依存します。 | |
VAR_INPUT(入力変数) | |||
Execute | 起動 | Executeの立ち上がりエッジでFBが起動されます。 変更した入力パラメータを反映するには、Executeを再度立ち上げる必要があります。 |
|
VAR_OUTPUT(出力変数) | |||
Done | 完了 | 動作が正常完了したとき、TRUEになります。 Done、Busy、CommandAborted、Errorは相互に排他の関係です。 |
|
Busy | 実行中 | Executeの立ち上がりエッジで、TRUEになります。 | |
Active | 制御中 | FBが制御状態になったとき、TRUEになります。 | |
CommandAborted | 実行中断 | 動作が他の動作で割り込まれたとき、CommandAbortedがTRUEになります。 | |
Error | エラー | エラーが発生したとき、ErrorがTRUEになります。 |
表1:代表的なインタフェースの振る舞い
図3の(a)、(c)、(d)のようにExecuteがTRUEの状態でDone、Command Aborted、ErrorがTRUEになった場合、Executeの立下りでこれらはFALSEになります*2。もし(b)のように、ExecuteがFALSEの状態でこれらの変数がTRUEになった場合、Doneなどは1サイクルだけTRUEとなります。
*2 オムロン製NJシリーズでは、エラーリセットが完了するまでErrorのTRUEを継続する仕様です。
図3:技術仕様書に実装例として示された入力/出力変数のタイミングチャート
(技術仕様書 Part1 and Part2, Version 2.0のFigure7を編集して記載)
バッファモード
バッファモードとは、複数のFBを連続的に動作させる場合や、実行中のFBを中断し次のFBを実行する場合に使用する機能です。FB1が実行中の命令、FB2が次に実行される命令のとき、FB2の入力変数“BufferMode”にMC_BUFFER_MODE型の列挙子を指定します。
バッファモードの定義を表2に紹介します。
※左右にスクロールしてご覧ください。
名称 | 列挙子 | 説明 | |
---|---|---|---|
アボーティング | mcAborting | 図4(a)のように、実行中のFB1の動作を中断し、次のFB2の動作を開始します。 | |
バッファード | mcBuffered | 図4(b)のように、実行中のFB1の動作がDoneになると、次のFB2の動作を開始します。 | |
ブレンディング | 図4(c)のように、実行中のFB1の動作が完了後に次のFB2の制御を開始しますが、FB1とFB2間で軸は停止しません。 FB1の完了時に適用される速度により4種類を定義しています。 |
||
ブレンディングロウ | mcBlendingLow | FB1の完了時の速度は、FB1とFB2のうち遅い速度が適用されます。 | |
ブレンディングプレビアス | mcBlendingPrevious | FB1の完了時の速度は、FB1の速度が適用されます。 | |
ブレンディングネクスト | mcBlendingNext | FB1の完了時の速度は、FB2の速度が適用されます。 | |
ブレンディングハイ | mcBlendingHigh | FB1の完了時の速度は、FB1とFB2のうち早い速度が適用されます。 |
表2:バッファモードの定義
図4:バッファモードの振る舞い
単軸の位置決め制御
単軸制御FB
技術仕様書(Part1 and Part2, Version2.0)には、2014年5月現在、単軸制御用のFBが36種類定義されています。単軸制御FBには、動作系FB(絶対値/相対値の位置決め、原点復帰、速度制御、トルク制御、停止など)と、非動作系FB(タッチプローブ、パラメータの読み書きなど)があります。詳しくは、PLCopenのWebサイトを参照してください。
インデックステーブルを用いた位置決め制御
図5のようなインデックステーブルに対し絶対値位置決めMC_MoveAbsoluteと、バッファモードの“バッファード”を用いた位置決め動作の事例を紹介します。
プログラミング環境はオムロン製Sysmac Studioを用い、LD(Ladder Diagram)により記述しています。ただし、Motion Control FBはLDの他、ST(Structured Text)などIEC 61131-3の各言語で記述可能です*3。また、プログラム事例では原点復帰やインタロック処理、異常処理などは省略しています。
*3 オムロン製Sysmac Studioは、LDとSTをサポートしています。
図5:インデックステーブルを用いた位置決め
図6にはプログラム例を示します。最初の行で“StartMove”の立ち上がり時に“MOVEABS1”を 起動し、120度に向けて動作を開始します。次の行では、“MOVEABS1_ACT”の立ち上がりで“MOVEABS2”を“_mcBuffered” (バッファード)で起動します*4。
*4 技術仕様書ではバッファードは“mcBuffered”と定義されていますが、オムロン製NJシリーズではシステム定義の列挙子であることを表すため、列挙子に接頭辞”_”を付けています。
“MOVEABS1”が完了すると、バッファードで起動された“MOVEABS2”が動作を開始し240度に向けて動作を開始します。最後の行では、“MOVEABS2_ACT”の立ち上がりで“MOVEABS3”を“_mcBuffered”で起動し、“MOVEABS2”が完了すると “MOVEABS3”の動作が開始し0度に向けて動作を開始します。
図6:プログラム事例(オムロン製 Sysmac Studio画面例)
図6の通り、プログラム中にPLCのメモリアドレスが記載されていません。モータ設定に関する情報も AXIS_REF型の構造体変数“MC_Axis000”に含まれるため、プログラム中には表れません。このことより、ハードウェア情報に依存しないプログラムを実現できることが分かると思います。また、バッファモードを用いることで連続した動作を簡単に実現できる他、“BufferMode”を変更する だけで挙動を変更可能です。
図7に実行結果のトレースグラフを示します。上段が軸の位置(0~360度、赤色)と速度(水色)、下段が各 インスタンスの出力変数であるDone、Busy、Activeの振る舞いを示します。出力変数の振る舞いや軸の動作は、技術仕様書の内容に従って動作していることが分かります。FBのインタフェース標準化により、商品によってユーザーが学習しなければならない工数が削減されます。
図7:実行結果(オムロン製 Sysmac Studio画面例)
まとめ
今回は、Motion Control FBの共通仕様と、インデックステーブルを用いた単軸の位置決め制御のプログラム事例を紹介しました。Motion Control FBでは、ハードウェア依存部を排除し動作仕様やインタフェース仕様を標準化することで、モーション制御プログラムのソフトウェア再利用性を向上させることを説明しました。また、バッファモードを用いて連続した動作がプログラミングできることが理解できたと思います。次回は、同期制御FBと同期の補正について紹介します。
PLCopen®および関連するロゴマークはPLCopen®が所有する登録商標です。
PLCopen JapanのWEBサイトhttp://www.plcopen-japan.jp/
Sysmacは、オムロン製FA機器製品の日本およびその他の国における登録商標です。