Beckhoff#TwinCAT Configure an EtherCAT Master

今回の記事ではTwinCATからEtherCAT Masterを立ち上げ、Phoenix Contact製の

AXL E EC DI8 DO8 M12 6P EtherCAT SlaveとEtherCAT通信します。よろしくお願いします。

Reference Link

Codesys#Configure a EtherCAT Master


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

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする