今回の記事ではTwinCATからEtherCAT Masterを立ち上げ、Phoenix Contact製の
AXL E EC DI8 DO8 M12 6P EtherCAT SlaveとEtherCAT通信します。よろしくお願いします。
Reference Link
Configuration
Download ESI
Ethercat通信するには、ESI Fileが必要になります。下記のLinkにアクセスします。
https://www.phoenixcontact.com/en-pc/products/distributed-i-o-device-axl-e-ec-di8-do8-m12-6p-2701520
今回はBit mappingのESI Fileを使用します。
ライセンスを同意し、DOWNLOADします。
これで7z FileがDownloadされました。
中にESI Fileが入っています。
Update ESI
次はTwinCATにESI Fileを更新します。
C:\TwinCAT\3.1\Config\Io\EtherCAT のDirectoryにアクセスします。
そのDirectoryに先程DownloadしたPhoenixContact製のAXL E EC DI8 DO8 M12 6PのESI Fileに貼り付けます。
TwinCATがもうすでに起動してる場合、TwinCAT>EtherCAT Devices>Reload Device DescriptionsでDevice description Fileを更新します。
Add EtherCAT Master
TwinCAT3でEtherCAT Masterを追加します。I/O>Devices>Add New Itemします。
EtherCAT>EtherCAT Masterを選び>OKします。
Network Adapterを選択し>Okで完了します。
これでEtherCAT Masterが追加されました。
もし初めての方であれば、Adapter>Coompatible devicesでEthernet Driverをインストールしてください。
Add AXL E EC DI DO M12
Masterが追加終わったら今度はSlaveを挿入します。EtherCAT Master右クリック>Add New Itemします。
Phoenix Contactのカタログを見て、今回使用するAXL E EC DI8 DO8 M12 6Pを選び>OKします。
これで完成です!
中にDI/DO/Statusなどのデータが入っています。
FB_AXL_E_EC_DI8_DO8_M12_6P
次はFunction blockを追加します。
VAR
BITのデータタイプ 変数では配列できないので、仕方なく一つずつ定義します。
定義したのは入力・出力・WcStateになります。
FUNCTION_BLOCK FB_AXL_E_EC_DI8_DO8_M12_6P VAR_INPUT END_VAR VAR_OUTPUT q_ModuleIn:ARRAY[1..8]OF BOOL; q_ModuleOut:ARRAY[1..8]OF BOOL; q_DataOK :BOOL; END_VAR VAR DI1,DI2,DI3,DI4,DI5,DI6,Di7,DI8 AT %I*:BIT; DO1,DO2,DO3,DO4,DO5,DO6,DO7,DO8 AT %Q*:BIT; WcState AT %I*:BIT; TON:TON; iStep:INT; END_VAR |
PROGRAM
プログラムは出力を交代でTrue・Falseにする簡単なプログラムだけです。
//Demo CASE iStep OF 0: DO1:=TRUE; DO2:=TRUE; DO3:=TRUE; DO4:=TRUE; DO5:=FALSE; DO6:=FALSE; DO7:=FALSE; DO8:=FALSE; TON(IN:=TRUE ,PT:=T#1S); IF TON.Q THEN TON(IN:=FALSE); iStep:=1; END_IF 1: DO4:=TRUE; DO5:=TRUE; DO6:=TRUE; DO7:=TRUE; DO1:=FALSE; DO2:=FALSE; DO3:=FALSE; DO4:=FALSE; TON(IN:=TRUE ,PT:=T#1S); IF TON.Q THEN TON(IN:=FALSE); iStep:=0; END_IF END_CASE //In q_ModuleIn[1]:=DI1; q_ModuleIn[2]:=DI2; q_ModuleIn[3]:=DI3; q_ModuleIn[4]:=DI4; q_ModuleIn[5]:=DI5; q_ModuleIn[6]:=DI6; q_ModuleIn[7]:=DI7; q_ModuleIn[8]:=DI8; q_DataOK:=NOT WcState; //Out q_ModuleOut[1]:=DO1; q_ModuleOut[2]:=DO2; q_ModuleOut[3]:=DO3; q_ModuleOut[4]:=DO4; q_ModuleOut[5]:=DO5; q_ModuleOut[6]:=DO6; q_ModuleOut[7]:=DO7; q_ModuleOut[8]:=DO8; |
MAIN
VAR
先ほど作成したFunction blockをInstance作成します。
PROGRAM MAIN VAR Module1:FB_AXL_E_EC_DI8_DO8_M12_6P; END_VAR |
PROGRAM
そして呼び出します。
Module1(); |
Build
IO割り付ける前にBuild Solutionします。
Assign IO
ここまで来たら、次はSlaveのProcessIOとプログラム変数に紐つけます。
Input
まずはInputから始めます。
RxPDO Mapping Digital Inputsをクリックします。
全部選び、右クリック>Change Linkします。
先ほど定義したInstanceと割り付けましょう。
[X]の列にXがついていただければOkです。
Output
出力も一緒です。RxPDO Mapping Digital Outputsをクリックします。
全部選び>右クリック>Change Linkします。
先ほど定義したInstanceと割り付けましょう。
[X]の列にXがついていただければOkです。
WcState
次はWcStateです。WcStateの変数をクリックします。
Linkded to..をクリックします。
先ほど定義したInstanceと割り付けましょう。
これで完成です。
Download
Active ConfigurationでHardware 構成をDownloadします。
問題なければ緑、Run Modeに変わります。
最後はLoginし、プログラムをDownloadしましょう。
AXL E EC DI8 DO8 M12がEtherCAT通信OKのときの様子です!
Result
ではまずSlave Count変数を見てみます。
いまは1ですね。つまり1つのSlaveがEtherCAT Network内に存在しています。
次はDevState変数を見てみます。
0なので、エラーの診断情報がないってことですね。
実際モジュールの出力様子はこうになります。
Sample Code
下記のLinkで今回のProject Downloadできます。
https://github.com/soup01Threes/TwinCAT3/blob/main/TwinCAT-EhterCAT%20master%20sample.tnzip