前回はYT Scope Projectを追加し、Driveの状態をMonitorすることができました。更にControl PanelからDriveを操作することもできましたね。次はプログラムかからServoON、リセット、Jog動作をさせようと思います。
ちなみに、今回使用すLibraryはTc2_MC2とTc2_MC2_Driveです。
Linkには該当するライブラリ:
Tc2_MC2・Tc2_MC2_Drive
このライブラリはPLCOPENベースの上に作られたライブラリになります。
Rules
MC Function Blocksを使用するときに様々なルールや決まり事があります。PLCプログラム作成するときはそれらのことを考えながら作りましょう。
出力
Busy・Done・Error・CommandAbortedは同時にTrueすることがありません。ExecuteのInputがTrueになったら、その4つの中に必ず1つしかTrueになりません。
*もちろん例外があります。それはMC_Stopです。軸が停止したらDoneのOutputがTrueになります。ですが、BusyとActiveが軸がロックされてるのせいでTrueのままになります。
そしてMC_StopのExecuteがFalseになったら、軸のUnlock、Busy、ActiveがFalseになります。
初期状態
もし該当するMC_BlocksはAcriveしてないのであれば、Done・InGear・InVelocity・Errror・ErrorIDとCommandAbortedはすべてExecuteのたち下げにリセットされます。
もしExecuteはOne-Cycle内一回以上Triggerされても、該当するMC_BlocksはFeedbacksはしませんし、なにも実行しません。Inputのパラメターは立ち上げに検知で動作します。パラメターを変更したいのであればコマンドは必ず再Triggerする必要があります。
そして、MC_Blocksが実行するときにInputパラメータが渡されてないのなら、最後に渡さてた値がMC_BlocksのInputパラメータになります。
Position と Distance
Positionは装置の中にサポーの居場所です。そしてDistanceは現在値から目的地まで”相対位置”です。例えば、Station1はPosition200にいます、そしてStation2はPosition1000にいます。そしてStation1からStationまでのDistanceは800になります。
Positionや距離の単位はSystemにより変わります。
エラー処理
すべてのMC_Blocksは2つのError出力があります。
ErrorというOutputは該当するMC_Blocksがエラー発生してるかどうかを表示してます。
ErrorIDというOutputは該当するMC_Blocksのエラー番号が表示しています。
“Done”, “InVelocity”, “InGear” と “InSync” の出力はErrorがTrueである限りずっとFalseになります。
ErrorIDの詳細はManualに参考してください。
エラー種類
注意するにはMC_Blocksは該当するBlcokのErrorだけで軸自体のではありません(例えばパラメータエラー、通信エラーなど)。
Axis errors (logical NC axis)
実物の動きが問題ありエラーになること(例えばなにかぶつかったり)その場合は軸がMC_BlocksをErrorに切り替えます。軸エラーはMC_Resetによってリセットできます。
Drive errors (controller)
軸エラーによって発生されたことがあります。このエラーはだいたいMC_Resetによってリセットできます。
Done出力
MC_Blocksの”Done”・”InVelocity”・”InGear”・”InSync”はコマンド実行成功すればTrueになります。
CommandAborted 出力
“CommandAborted” は他のMC_BlocksよりJobが中断されたらTrueになります。
Busy 出力
”Busy”出力は該当するMC_BlocksがActiveしてると示しています。MC_Blocksが実行するには、Executeの立ち上げPulseとBusy出力がFalseになってるときのみです。
MC_Blocksが実行するとBusyがただちにTrueになり、該当するMC_Blocksが実行成功や失敗したらFalseに戻ります。
Active 出力
ActiveはMC_Blocksが実行になるとTrueになります。
ENとENO
MC_Blocksを実行するには、”Execute”の立ち上がりPulse必要ですが、その前”Enable”の信号が必要です。ST言語にはないですが、LAD/FBDには”EN”というInput パラメータがあり、そのENがTrueにならないと、そもそもMC_Blocksが実行しません。
そしてMC_BlocksにあるENOはENがTrueになる限り、ENOもTrueになります。
MC_Power
ここでは詳しく説明しませんが、いわゆるSoftware上のServo ONですね。
Enableに立ち上げ信号入れますと、Axisが参照してる軸がServo ON信号出します。
そしてActiveが返してきたら、軸もServo ONになります。
https://infosys.beckhoff.com/english.php?content=../content/1033/tcplclib_tc2_mc2/70049419.html&id=
MC_Reset
このMC_BlockがExecuteに立ち上げ信号を与えると、
Axisパラメータが参照してる軸をリセットします。
https://infosys.beckhoff.com/english.php?content=../content/1033/tcplclibmc2/458362763.html&id=
MC_Jog
このMC_Blockが軸を手動でJog動かすことが可能です。軸が動作するときの方向はJogForwardやJogBackwardsによって変わります。
注意するのはVelocity・Acceleration・Deceleration・Jerkは0の場合は軸が参照するのが自体のパラメータになります。
詳しくは説明で:
https://infosys.beckhoff.com/english.php?content=../content/1033/tcplclib_tc2_mc2/70120459.html&id=
Program
これから実際にプログラムを組みたいと思います。最初はServoON・リセット・Jogの動くやります。そんなに難しくありませんので、みんなさんも簡単にできると思います。
まず前回のコードをダウンロードしてから始まります。
TwinCAT3 プロジェクトを作成します。
PLC>References>Add libraryで新しいライブラリを追加します。
TC2_mcを検索します。
まずTc2_MC2を選び、OKします。
ReferencesはいまTc2_MC2が追加されています。
次はおなじの作業でTc2_MC2_Driveも追加しましょう。
よし、これで必要なライブラリが揃いました。
次はGVLs(Global Variables List)から新しいリストを追加します。
中にServo_On用のスイッチとAxis_Refを作成します。
Rebuild solutionsします。
次はMOTION>NC-Task1 SAF >Axes>Axis1をクリックします。
Link To PLCをクリックします。
先作成されたAxis_Ref、Axisを選び、OK。
次はFunction Blockを追加し、中にMC_Power・MC_Reset・MC_JOG3つのInstanceを作成します。
次はMCPower()を呼び出します。
いまのプログラムだと、GVL.arBool[0]が立ち上げになると、Servo ONになりますね。
Axisはもちろん最初に作って、軸とLinkしたのGVL.Axis1です。
次はMCReset()を呼び出します。
最後はMCJog()ですね。
次はプログラムをダウンロードしましょう。
テスト
まずGVL.arBool[1]をTrueにし、軸をリセットします。
次はGVL.arBool[0]をTrueにし、Servo ONします。
最後はGVL.arBool[2]をTrueにして軸をJogにします。
最後はControl Panelで結果を確かめてみましょう。
最初はMCJog()でJog動作するときいつも4223とうエラーが出てきて、色々調べてたら、MCPower()を呼び出しするときに、Enable_PositiveとEnable_NegativeがTrueにならなかった、でした。
今回のコードは以下のLinkでダウンロードできます。
はーい、お疲れ様です。