ST言語を使う
最初、ST言語はC言語のようにがりがりプログラムを書いていかないとモータは回らないと思っていました。調べると、複数の言語が使える国際規格「IEC1131-3」にあるファンクション・ブロック(FB)をST言語の中で利用できるようになっているのです。
ファンクション・ブロック(FB)は、次のような形です(https://infosys.beckhoff.com/から転載)。
左が入力、右側が出力です。必要なところだけ、記述します。例えば、モータの名前が「軸1」であれば、Axisに軸1を記入します。このモジュールが呼ばれたら、有無を言わせず実行するには、ExecuteをTRUEにします。このファンクション・ブロック(FB)は絶対位置の移動を実施するので、位置はPositionへ、速度はVerlocityを、加速度はAccelerationに実数を書き込みます。
つまり、C++のクラス・ライブラリと考えればいいわけです。引数がなければ、デフォルト値が使われたりします。
ST言語内で、図のない形でファンクション・ブロック(FB)が使えます。
デフォルトだと、スタンダードのライブラリが利用できますが、Motion用にMC2ライブラリを追加すれば、
- MC_Power(電源ON)
- MC_Reset
- MC_SetPosition
- MC_MoveAbsolute
- MC_MoveRelative
- MC_MoveAdditive
- MC_MoveModulo
- Notes on modulo positioning
- MC_MoveVelocity
- MC_MoveContinuousAbsolute
- MC_MoveContinuousRelative
- MC_Halt
- MC_Stop
などが利用できます。これらは、
https://infosys.beckhoff.com/
-TwinCAT 3
-TF5xxx - Motion
-PLC Libraries Motion
-Tc2_MC2
-Motion function blocks
-Point to point motion
付近に解説があります。
何をどう書けばいいのか
上記のような利用できるファンクションがあって、モータを回すには、何と何を書けば、指定の位置へモータを回すことができるか、という解説は見つかりませんでした。
youtube Beckhoffの日本法人のコンテンツです。TwinCAT3モーションプログラム動作
9秒後の画面を止めます。プログラムが見えています。最初はMC_Power、次はMC_MoveAbsoluteです。この二つでデモをやっています。
次回、実際にプログラムを書きますが、ほぼ内容が同じものが、youtubeの12. TwinCAT3 motion programにあります。韓国語を字幕を出し翻訳してみましたが、ほとんど意味がわかりませんでしたから、画面の操作を見て理解しましょう。
この事例も、MC_PowerとMC_MoveAbsoluteの二つを使っています。
たくさんのファンクションを使う例は、MB06a. [TwinCAT 3 NC] Program MC_Velocity, MC_Relative, MC_Absolute Motion Control [8/20]にあります。プログラムはラダーですが、MC2のファンクション・ブロック(FB)をたくさん使っています。
資料
IEC61131-3の日本語の資料は、少し古いように思えます。