こちらはFestoのCMMT-ST SeriesのServo Drive Tutorial第2話です。今回はCMMT-AS DriveとBeckhoff TwinCAT3連携するときの注意点やプログラムを説明します。
さ、はじめよう!
Video
こちらは自分が作った、Festo Automation suiteを使用しCMMT-ST Servo Driveを試運転する日本語動画です。
Festo.CMMT-ST Sero Drive Tutorial_Part1_Commissioning with Automation suite_JP
こちらは自分が作った、Beckhoff TwinCAT3とCMMT-ST Servo Driveを使用するときのプログラム説明動画です。
Festo.CMMT-ST Sero Drive Tutorial_Part2_ How to control from Beckhoff Twincat3_JP
Reference Link
こちらはFestoのCMMT-ST SeriesのServo Drive Tutorial Part1で、Automation Sutieの操作方法やCMMT-ST の試運転を紹介します。
FestoはCPX Seriesの製品もありまして、EIP/Profinet/Ethercatにも対応できる総合的なFieldbus Solutionを提供しています。よかったら下記のLinkを参考にしてください。
自分がFesto CPX モジュールとBeckhoff TwinCAT・Keyence・IQRと接続したStep by Stepガイドラインを書いています。
EtherCAT
IN
Port1 XF1はEtherCAT IN PortでPort XF2はEtherCAT Output Portになります。
Distributed clocks DC (Distributed Clocks)
EtherCATネットワークの全てのDC対応のEtherCATスレーブコントローラESC内の全てのReal-Time-Clockは、分散ClockDCのメカニズムによって同期させることができます。
Defaultでは、EtherCATネットワーク内の最初のDC対応スレーブが基準クロック (Ref Clock) を持ってClock Masterを制御します。
周期の間隔で、マスターは同期データグラムを送信し、その中でClock Masterは現在の基準時刻(Ref Time)をreference clockに書き込む。
後続の全てのSlaveはこの値を読み出し、EtherCATスレーブコントローラASCは基準時間 (Ref Time) から時間を計算し、コントローラによって計算された実行時間 (Offset) からDC時間を計算します。そのDC分散クロックは、後続の同期データグラムごとに継続的に同期され、周期的な同期処理は、DCを介して実行することができます(例えば、複数の軸を周期的に同期して動作させるとか)。
Cyclical process data の送信と処理は、Sync Managerに制御されます。
Cyclical process data の送信と処理は、synchronisationに指定され、そのsynchronisationは。DC(Distributed Clocks DC)によって制御されます。
CMMTは以下の同期モードを対応します:
- Free run (同期なし)
- Process data (SM2イベントへの同期)
- Sync (DC Sync 0イベントとの同期)
Process data communication
Process data communicationでは、CMMTとControllerなどの間で、プロセスデータ(設定値や現在値など)がサイクリックに交換されます。
process data frameが実行されるたびに、Process data outputがフレームから読み出され、Process data inputがフレームに書き込まれる。
CMMTでは、コントローラがprocess data 通信用データをSync Managers 2 と3にMappingされます。そして最大のRxPDO/TxPDOには、それぞれ64バイトのユーザ・データを持つ16個の出力/入力オブジェクト(Sub:0x01 … …0x10)を割り当てることができます。
注意するのはprocess data通信は、”Safe Operational” ステータスから始めることになります。CMMT は、このステータスからTxPDOをコントローラに送信します。”Operational”ステータスに達した後、RxPDOがCMMTによって処理され、実行されます。CMMTの同期は、DC (Distributed Clocks)によって制御される。
こちらはRxPDO01のMappingになります。
こちらはTxPDO01のMappingになります。
こちらはTxPDO03のMappingになります。
Download ESI File
FestoのHPからCMMT-STのESI FileをDownloadしましょう。
Implementation
Festo Side
Festo 側ではAutomation Sutieを使用し、リミットなどの設定を行います。
Monitor Limit
Axis>Monitoring Functionを開きます。
Limit VelocityでServoのMax Speed値を変更できます。
Axis Limit
Axis1>Axisを開き、Driveの位置リミットなどに関する設定を行います。
中にVelocityのLower/Higher リミット・Homingする方法などのパラメータを変更できます。
Beckhoff Side
Install ESI File
先程Festo HPからDownloadされたFileを解凍するとXML Fileが格納されています。
このXML Fileを下記のPathに格納してください。
C:\TwinCAT\3.1\Config\Io\EtherCAT
Create New Project
TwinCATを起動し、File>New>Projectで新規プロジェクトを作成します。
TwinCAT XAE Projectを選び>OKです進みます。
Done!新しいTwinCTAプロジェクトが追加されました。
Add EtherCAT Master
TwinCAT MasterにEtherCAT Masterを追加するため、I/O>Device>Add New Itemします。
EtherCAT>EtherCAT Masterを選び>Okします。
Done!EtherCAT Masterが追加されました。
Adapter
EtherCAT Masterをダブルクリックし、AdpaterのTabを開きます。
このTabからSearchボタンをクリックし、IPCが対応できるNetwork Adapterを検索します。
その中にEtherCAT Masterとして稼働したいNetwork Adapterを設定しましょう。
Update ESI File
先程ImportしたESI FileをTwinCAT SystemにUpdateすつため、TwinCAT>EtherCAT Devices>Reload Device Descriptionsをクリックします。
Add CMMT-ST
Festo CMMT-STをEtherCAT Networkに追加します。EtherCAT Masterを右クリック>Add New Itemします。
Festo>CMMT>CMMT-STを選び、Okで進みましょう。
TwinCATから自動的にNC Axisを追加するか?のPopupが表示され、NC-Configurationを選択し、Okで進みます。
Done!CMMT-ST DriveとNC 軸も追加されました。
Configure DC
CMMT-STのはDefaultでDC同期がEnableされていますが、念のためにもう一度確認しましょう。CMMT-STをクリックし、DC Tabを開き、OperationmodeがDC For Synchronziationに設定されたかを確認しましょう。
Advanced SettingsをクリックするとDC同期に関する詳しい設定もありますが、今回はDefaultのままで行きます。
PLC
Add PLC Item
次はプロジェクトにPLCを追加するため、PLC>右クリック>Add New Itemします。
Standard PLC Projectを選び、Addで進みます。
Done!PLCが追加されました。
Add GVL
Global Variables Listを追加するため、Add>Global Variable Listします。
Global Variables List名を入力しOkで進みます。
GVLの中に以下の変数を定義します。
{attribute ‘qualified_only’} VAR_GLOBAL iMsiMode AT %I*:SINT; qMsiMode AT %Q*:SINT:=8; FestoAxis :AXIS_REF; END_VAR |
Add Library
AXIS_REFを使用するためには、ライブラリの追加が必要です。
References>Add Libraryします。
Tc2_MC2を検索しOkでライブラリを追加しましょう。
Done!
Build
Build>Build Solutionでプロジェクトを一度コンパイルします。
Change Mapping
Festo CMMT-STのDriveのMappingを変更します。
CMMT-ST>Inputs>Modes of operation displayを右クリック>Change Linkします。
先程GVLで定義したGVL.iMsiModeと紐つけましょう。
Outputs>Mode of operation も同じく右クリック>Change Linkします。
先程GVLで定義したGVL.qMsiModeと紐つけましょう。
Program
最後はProgramです。FestoのCMMT-STの現在状態・速度・位置を読み込んで、そしてServo ON・Jog Operationなどのコマンドも発行します。
PROGRAM MAIN VAR //MC_Power mc_Power:MC_Power; MC_Power_Enable:BOOL; //MC_Jog mc_jog:MC_Jog; mc_Jog_Velocity:REAL; MC_Jog_Forward,MC_Jog_Backword:BOOL; //MC_Home mc_home:MC_Home; mc_home_execute:BOOL; //MC_Halt mc_halt:MC_Halt; mc_halt_exe:BOOL; //MC_MoveAbsolute MC_MoveAbsolute:MC_MoveAbsolute; MC_MoveAbsolute_Exe:BOOL; MC_MoveAbsolute_Position:LREAL; MC_MoveAbsolute_Velocity:LREAL; //MC_MoveRelative MC_MoveRelative:MC_MoveRelative; MC_MoveRelative_Exe:BOOL; MC_MoveRelative_Distance:LREAL; MC_MoveRelative_Velocity:LREAL; //MC_Reset mc_reset:MC_Reset; MC_Reset_Exe:BOOL; //MC_ReadActualPosition mc_ReadActualPosition:MC_ReadActualPosition; mc_ReadActualPosition_Enable:BOOL:=TRUE; MC_ActualPosition:LREAL; //MC_ReadActualVelocity MC_ReadActualVelocity:MC_ReadActualVelocity; MC_ReadActualVelocity_Enable:BOOL:=TRUE; MC_ActualVelocity :LREAL; //MC_ReadStatus MC_ReadStatus:MC_ReadStatus; MC_ReadStatus_Enable:BOOL:=TRUE; MC_Status :ST_AxisStatus; END_VAR //Read the ActualPosition of Axis mc_ReadActualPosition( Axis:=GVL.FestoAxis ,Enable:=mc_ReadActualPosition_Enable ,Position=>MC_ActualPosition ); IF mc_ReadActualPosition.Error THEN mc_ReadActualPosition_Enable:=FALSE; MC_ActualPosition:=0.0; END_IF //Read the ActualVelocity of Axis MC_ReadActualVelocity( Axis:=GVL.FestoAxis ,Enable:=MC_ReadActualVelocity_Enable ,ActualVelocity=>MC_ActualVelocity ); IF MC_ReadActualVelocity.Error THEN MC_ReadActualVelocity_Enable:=FALSE; MC_ActualVelocity:=0.0; END_IF //Read the Status of Axis MC_ReadStatus( Axis:=GVL.FestoAxis ,Enable:=mc_Power.Active ,Status=>MC_Status ); //MC_Power mc_Power.Enable_Positive:=TRUE; mc_Power.Enable_Negative:=TRUE; mc_Power( Axis:=GVL.FestoAxis ,Enable:=MC_Power_Enable ); IF mc_Power.Error THEN MC_Power_Enable:=FALSE; END_IF //MC_Reset mc_reset( Axis:=GVL.FestoAxis ,Execute:=MC_Reset_Exe ); IF mc_reset.Busy OR mc_reset.Busy THEN MC_Reset_Exe:=False; END_IF //MC_Halt mc_halt( Axis:=GVL.FestoAxis ,Execute:=mc_halt_exe ); IF mc_halt.Busy OR mc_halt.Error THEN mc_halt_exe:=FALSE; END_IF //MC_Jog mc_jog.Mode:=E_JogMode.MC_JOGMODE_CONTINOUS; mc_jog( Axis:=GVL.FestoAxis ,JogBackwards:=MC_Jog_Backword AND MC_Status.Operational AND NOT MC_Jog_Forward ,JogForward:=MC_Jog_Forward AND MC_Status.Operational AND NOT MC_Jog_Backword ,Velocity:=mc_Jog_Velocity ); //MC_Home mc_home.HomingMode:=MC_HomingMode.MC_Direct; mc_home( Axis:=GVL.FestoAxis ,Execute:=mc_home_execute ); IF mc_home.Busy OR mc_home.Error THEN mc_home_execute:=FALSE; END_IF //MC_MoveAbsolute MC_MoveAbsolute( Axis:=GVL.FestoAxis ,Execute:=MC_MoveAbsolute_Exe AND MC_Status.Operational AND MC_Status.Homed AND NOT MC_Status.HasJob ,Position:=MC_MoveAbsolute_Position ,Velocity:=MC_MoveAbsolute_Velocity ); IF MC_MoveAbsolute.Busy OR MC_MoveAbsolute.Error THEN MC_MoveAbsolute_Exe:=FALSE; END_IF // MC_MoveRelative( Axis:=GVL.FestoAxis ,Execute:=MC_MoveRelative_Exe AND MC_Status.Operational AND MC_Status.Homed AND NOT MC_Status.HasJob ,Distance:=MC_MoveRelative_Distance ,Velocity:=MC_MoveRelative_Velocity ); IF MC_MoveRelative.Busy OR MC_MoveRelative.Error THEN MC_MoveRelative_Exe:=FALSE; END_IF |
Confiugure Parameters
最後はNC軸のパラメータを変更します。ここでいくつかのパラメータはFesto Automation Suiteに設定されたものと合わせる必要があります。
Enc
まずFestoのDriveと合わせる必要があるのはEnc 設定です。
ParametersにはScaling Factor Numbertorというパラメータがあります。
Festo Automation Sutie>Field busからPosition項目の設定に合わせて設定してください。
下図では-6なので0.000001になります。
Axis Setting
次に必要なのはAxis本体の設定になります・
Reference Velocityなども実際のモータデータに合わせましょう。
Link to PLC
TwinCATのAXIS_REFをAxisを接続するため、Axes>Axis1を開きます。
Parameters TabにあるLink to PLCボタンをクリックします。
GVLで定義されたAXIS_REFと紐つけましょう。
Activate
Hardware ConfigurationをRuntimeにDownloadします。
Okで進みます。
Login
最後はプログラムをRuntimeにDownloadしましょう。
Result
MC_Power to turn on the Drive
こちらの動画でTwinCAT3からFesto のServo DriveをPower Onする操作になります。https://youtu.be/sHPzWWUIfwY
MC_Reset to reset the Drive
こちらの動画でTwinCAT3からFesto のServo Driveをリセットする操作になります。
MC_MoveRelative
こちらの動画でTwinCAT3からFesto のServo Driveを相対位置決めする操作になります。
MC_MoveAbsolute
こちらの動画でTwinCAT3からFesto のServo Driveを絶対位置決めする操作になります。
MC_Jog
こちらの動画でTwinCAT3からFesto のServo DriveをJOG操作になります。
Download
こちらのLinkからプロジェクトをDownloadしてください。
https://github.com/soup01Threes/TwinCAT3/blob/main/TwinCAT_SampleProject_WithFestoSMMT%20Servo.tnzip