CODESYS Example Projectを調べてみた#10 (SoftMotion)
SoftMotion
今回は、Exampleの中のSoftMotionについて調べていきたいと思います。SoftMotionは、モーションコントロール機能を提供するパッケージです。PLC上で単軸制御から多軸の協調制御・Cam制御、CNC制御などの機能を提供しています。今回はシンプルな1軸のExampleExample: Controlling the Movement of Single Axesを調べます。
このExampleは、PLCOpen標準のFunctionBlock(FB)を用いて1軸制御を行う例が示されています。MC_XXXのようにMCという接頭辞がついた名前のFBを利用します。MC FBの詳細な使い方は、Youtubeの動画CODESYS Tutorials|SoftMotionや書籍実践 PLCプログラム設計ー変数によるラダープログラムの基礎から周辺デバイス活用までーが参考になります。
Setup
SoftMotionのExampleは、以下のパスをたどると見つかります。CODESYSのバージョンは自身の環境に合わせて読み替えてください。
C:\Program Files\CODESYS 3.5.20.30\CODESYS\CODESYS SoftMotion\Examples\Tutorial
このフォルダには、複数のサンプルプロジェクトが含まれています。この記事では、PLCopenSingle.project
と PLCopenSingle2.project
を見ていきます。
Contents of the example
PLCopenSingle.project
Example Projectを開くと、MOTION_PRG(PRG)というプログラムがあり、SoftMotion General Axis Pool(SoftMotion General Axis Pool)が有効になっています。SoftMotionは、Device上で右クリックすることで"Enable SoftMotion", "Disable SoftMotion"を切り替えられます。SoftMotionを設定した後、Disableを選択すると、再度Enableにしたときに設定内容が消えてしまうようなので注意が必要です。
SoftMotionの下には、Drive(SM_Drive_Virtual)という仮想ドライブ軸が定義されています。これは、SoftMotion上で右クリックから”Add Device"を選択することで追加できます。SoftMotionプロジェクトで仮想ドライブ軸を使用する方法は、基本的に実機の軸を使う場合と同じです。仮想ドライブはデバイスツリー上で名前が定義され(例:「Drive1」など)、その軸はPLCopen MC(Motion Control)ファンクションブロックから参照可能な軸オブジェクト(AXIS_REF)として扱われます。モーション制御用のPLCopen FB(例えばMC_PowerやMC_MoveAbsolute等)のAxis入力に、この仮想軸デバイスを指定して動作させます。
MOTION_PRG(PRG)の中身は以下のようなシンプルなコードでした。PLCOpen標準のFBであるMC_Power, MC_MoveAbsoluteを使用しています。処理としては、最初にPower ONの処理が実行され、次のサイクルで位置100まで移動します。移動完了後は、位置0に移動します。以降は位置100と0の間を往復するような処理になっています。PLCOpen標準FBを使うことで、Power.statusやMoveAbsolute.Doneのように動作の状態を取得できる点が便利ですね。
PROGRAM MOTION_PRG
VAR
iStatus: INT;
Power: MC_Power;
MoveAbsolute: MC_MoveAbsolute;
p:REAL:=100;
END_VAR
CASE iStatus OF
0:
Power(Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE, Axis:=Drive);
IF Power.Status THEN
iStatus := iStatus + 1;
END_IF
1:
MoveAbsolute(Execute:=TRUE, Position:= p, Velocity:=100, Acceleration:=100, Deceleration:=100, Axis:=Drive);
IF MoveAbsolute.Done THEN
MoveAbsolute(Execute:=FALSE, Axis:=Drive);
iStatus := iStatus + 1;
END_IF
2:
MoveAbsolute(Execute:=TRUE, Position:= 0, Velocity:=100, Acceleration:=100, Deceleration:=100, Axis:=Drive);
IF MoveAbsolute.Done THEN
MoveAbsolute(Execute:=FALSE, Axis:=Drive);
iStatus := 1;
END_IF
END_CASE
MC_PowerやMC_MoveAbsoluteは、SM3_Basicライブラリに含まれています。たくさんの種類のFBが用意されているので、それぞれの使いどころについては、別の記事で調査したいとおもいます。
PLCopenSingle2.project
PLCopenSingle2.projectは、プログラムがCFCで記載されており、操作用のVisualizationも用意されていました。
Type of elementには Frame -> SM3_Basic.VISU_MC_Power
と設定されています。これは、Visualization ToolboxのSM3_Basicで提供されているパーツに対応しています。コード上で、MC_Power EnableやStatus, MC_MoveAbsolute ExecuteやDoneなどがどこにもつながっていないように見えますが、Exampleを実行するとVisualization上のSM3_BasicのボタンやLEDと連携していることがわかります。
DeviceのSoftware metrics for license determinationを確認すると、このExampleでは、SoftMotionのNumber of Axesが1 Axis, Number of visualizationが56 Tagsでした。SoftMotionを使うにはライセンスがかかるようです。
学びと気づき
- 仮想軸を使うとハードウェアなしである程度動作検証ができて便利
- PLCOpen標準のFBを使うと基本機能が手早く実装できる。
- PLCOpen標準のFBに対応するGUIパーツも標準で利用できる。
- ただし、SoftMotionを使うと本番利用にはライセンス料が必要。
まとめ
- 実軸がない場合でも仮想ドライブをつかって試験ができる。
- 仮想ドライブの場合も、実軸と同様にMC_Powerで軸を有効化し、MC_MoveAbsoluteなどで動作制御する。
Discussion