Beckhoff#TwinCAT x IFM AL1332 EtherCAT IO-LINK Master_Part1

今回の記事ではBeckhoff IPC C6920とIFM AL1332 Ethercat IOLINK Masterを繋がり、Keyence IO-LINK 距離Sensor LR-TB200から現在距離を取得し、またPilzのESTOPもIFM AL1332のPortに配線にDI/DOの簡単な制御します。

よろしくお願いします。

Thanks!

この記事が出来上がるのはベッコフ日本法人ベッコフオートメーション株式会社さまとifm efector co. ltd.さまから機材を貸してくださったおかけです。誠にありがとうございます。

ベッコフ日本法人ベッコフオートメーション株式会社

IPC6920-005はベッコフ日本法人ベッコフオートメーション株式会社さまが貸してくださったものです。Beckhoff Automationは1980 年会社設立、PCベースの制御技術をベースにしたオープンオートメーションシステム導入の先頭に立つドイツ企業です。

ベッコフ日本法人ベッコフオートメーション株式会社は、2011年に横浜に本社、2017年に名古屋オフィスを設立しました。

こちらはベッコフ日本法人ベッコフオートメーション株式会社様のホームページです。

どうぞよろしくお願いします。

https://www.beckhoff.com/ja-jp/

ifm efector co. ltd.

ifmは1969年にドイツで誕生依頼”ifm-Close to you”を企業理念とする、センサのスペシャリストです。 今日では世界95ヶ国以上の拠点で従業員7000名を超える大企業になり、IoTのカギとなるIO-Linkの先駆者としても世界的に広く認知されるメーカーとなります。

こちらはIFMさまのホームページです。

どうぞよろしくお願いします。

https://www.ifm.com/de/en

Download ESI File

Ports

EtherCAT

こちらはEtherCAT Portです。

ConnectorはM12で、以下はPortの配置です。

IOT 

こちらはIOT Portで、また今回の記事で使用方法を紹介します。

ConnectorはM12で、以下はPortの配置です。

IOLINK Port

こちらはIOLINK Portです。

ConnectorはM12で、以下はPortの配置です。

Power

こちらは電源Portです。

ConnectorはM12で、以下はPortの配置です。

Implementation

IFM Side

まずIFM Ethercat IO LINK Masterの各Portの役割を決めます。いまはPor1、Port7はIOLinkで、Port2,3,4は不使用で、Port5はデジタル出力、Port6はデジタル入力です。

IO Ports X1からX8までには4つのOperation Modeがあります。

  • Disabled:Pin4(C/Q)はデータ交換しない
  • Digital Input(DI):Pin4(C/Q)はBinary 入力データを受け取る
  • Digital Output(DQ):Pin4(C/Q)はBinary 出力データする
  • IO-LINK:Pin4(C/Q)はIO-Linkデータを交換する

そしてData MappingにTxPDOとRxPDOがあり、Ethercat MasterからみるとTxPDOはBytes入力データ、RxPDOはBytes出力データになります。

Support Module

AL1332がSupportするモジュールは以下になります。

Port Qualifier(0xF101)

DI4True=PIN4がONしてる
DI2True=PIN2がONしてる
PVOTrue=IOLINKデバイスデータが有効
DACTTrue=Portは無効や使用できない
DATrue=IOLINKデビアスがPreoperateかOperate状態
PETrue=Portエラー
PVITrue=Portデータは有効

Device Status(0xF100)

Keneyce Side

Setup

KeyenceのLR-TB2000 Sensorの設定手順を簡単に説明します。Mode+Set Buttonを長押しでデバイスを初期化します。

Start Config.が表示されます。MODEボタンで進みます。

Select I/Oが表示され、今回じゃOut1+Out2のDefault設定でMODE進みます。

Output ModeをPNPにし、MODEで進みます。

これで終わります!

Mapping

Sensorが図れる距離は49-9999まで。

Beckhoff Side

Import the ESI File

Zipを解凍し、中のFileをすべて\TwinCAT3\3.1\Config\io\EtherCATに移動します。

TwinCAT>EtherCAT Devices>Reload Device DescriptionaでDevice Listを更新します。

Add EtherCAT Master

EtherCAT Masterを追加します。I/O>Device>Add New Itemします。

EtherCAT>EtherCAT Masterを選び>Okします。

Adpater Tabから正しいInterfaceを選んでたかどうかを再確認します。

Add IFM AL1332

次はIFM Ethercat IO LINK Master AL1332を追加します。EtherCAT>Add New Itemします。

Ifm IO-Link master AL1332を選び>Okします。

IFM AL1332が追加されました。

Configure IFM 

次はTwinCAT IDEからIFM AL1332の設定を変更します。Default上ですべてのPortもIOLINK 4IN/4OUTになっています。まず”Box 1″をクリックします。

Slots Tadで各Portの設定を行います。

例えばIO-Link Ch2を選んでる状態から”x”ボタンをクリックするとCh2の現在Port設定を削除します。

いまCh2はModuleの列にはなにも入ってない状態になりました。ですが、そのままコンパイルするとErrorになります。

次は右のModule ListからIOL_in_4_Byteを選び、”>”ButtonでModuleをCh2に追加します。

いまはCH2がIOL_in_4_Byteで、つまりIO-LINKで4BytesのINPUTデータを受け取る設定になっています。

ImplementationのIFM Sideにある図のように各Portを設定しましょう。

Box1のTreeからみると各PortのConfigurationも反映され、無効されたPortは表示しません。

Program

次はTwinCAT側のプログラムを組みます。

DUT

DUT_PortState 

こちらはIFM AL1332の各Port状態を示すDUTです。

TYPE DUT_PortState :
STRUCT
Deactivated :BOOL;
DigitalInput :BOOL;
DigitalOutput :BOOL;
IOLinkOP :BOOL;
IOLinkStop :BOOL;
IOLinkPreOP :BOOL;
END_STRUCT
END_TYPE
DUT_IFM_AL1322_Qualifier 

こちらはIFM AL1332の各Portのデータ評価状態を示すDUTです。

TYPE DUT_IFM_AL1322_Qualifier :
STRUCT
DI4 :BOOL;//Signal status of the digital input on pin 4 (if used)
DI2 :BOOL;//Signal status of the digital input on pin 2 (if used)
PVO :BOOL;//Port validity output
DACT :BOOL;//Device deactivated
DA :BOOL;//Device available
PE :BOOL;//Port error
PVI :BOOL;//Port validity input
END_STRUCT
END_TYPE
DUT_IFM_AL1332 

こちらはIFM AL1332のモジュール自体の状態をまとめて示すDUTで、8つのStateIOLinksとQualifierIOLinksはAL1332が8Portあるからです。

AT %I*の宣言はそれらの変数はProcess IOで実際EtherCAT Networkと紐つける必要があるからです。

TYPE DUT_IFM_AL1322 :
STRUCT
StateIOLinks AT %I* :ARRAY[1..8]OF USINT;
QualifierIOLinks AT %I* :ARRAY[1..8]OF USINT;
NewDiagnosisMessage AT %I* :BIT;
TimeStamp AT %I* :ULINT;
END_STRUCT
END_TYPE
uDUT_LR_TB2000 

こちらはKeyence LR_TB2000 距離Sensor用のDUTで、2 Bytesの距離データを受け取るからです。

TYPE uDUT_LR_TB2000 :
UNION
raw :ARRAY[0..1]OF BYTE;
Data :WORD;
END_UNION
END_TYPE

Function Block

FB_IFM_AL1332

こちらはIFM AL1332のFunction Blockです。AL1332の数に合わせて複数定義し、変数とひもつければOkです。

FUNCTION_BLOCK FB_IFM_AL1322
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
_Data :DUT_IFM_AL1322;
END_VAR
METHOD PUBLIC GetErroCode : uSINT

Port番号パラメータを受け取り、そして該当するPortのStateIOLinksをReturnします。

METHOD PUBLIC GetErroCode : uSINT
VAR_INPUT
PortNumbers:INT;
END_VAR
VAR
Port :USINT;
END_VAR


IF PortNumbers >=1 AND Port <=8 THEN
Port:=_Data.StateIOLinks[PortNumbers];
ELSE
Port:=0;
END_IF

Port:=SHR(Port,4);
GetErroCode:=Port;
METHOD PUBLIC GetIOLinkSts : BOOL

Port番号パラメータを受け取り、そして該当するPortのIOLINK StatusをReturnします。

True=IOLINK Status正常。

METHOD PUBLIC GetIOLinkSts : BOOL
VAR_INPUT
PortNumbers:INT;
END_VAR

VAR
PortState:DUT_PortState;
Qualifier:DUT_IFM_AL1322_Qualifier;
END_VAR

GetIOLinkSts:=False;
IF PortNumbers >=1 AND PortNumbers <=8 THEN PortState:=GetPortState(PortNumbers); Qualifier:=GetQualifier(PortNumbers); GetIOLinkSts:=GetErroCode(PortNumbers) = 0 AND PortState.IOLinkOP AND NOT Qualifier.PE ;END_IF
METHOD PUBLIC GetPortState : DUT_PortState

Port番号パラメータを受け取り、該当するPortのDUT_PortState Data TypeをReturnします。

METHOD PUBLIC GetPortState : DUT_PortState
VAR_INPUT
PortNumbers:INT;
END_VAR
VAR
Port :USINT;
END_VAR


GetPortState.Deactivated:=FALSE;
GetPortState.DigitalInput:=FALSE;
GetPortState.DigitalOutput:=FALSE;
GetPortState.IOLinkOP:=FALSE;
GetPortState.IOLinkPreOP:=FALSE;
GetPortState.IOLinkStop:=FALSE;

IF PortNumbers >=1 AND Port <=8 THEN
Port:=_Data.StateIOLinks[PortNumbers];
ELSE
Port:=0;
END_IF

Port:=Port AND 16#0F;

GetPortState.Deactivated:=Port = 16#0;

GetPortState.DigitalInput:=Port = 16#1;

GetPortState.DigitalOutput:=Port = 16#2;

GetPortState.IOLinkOP:=Port = 16#3;

GetPortState.IOLinkStop:=Port = 16#4;

GetPortState.IOLinkPreOP:=Port.5;
METHOD PUBLIC GetQualifier : DUT_IFM_AL1322_Qualifier

Port番号パラメータを受け取り、該当するPortのDUT_IFM_AL1322_Qualifier Data TypeをReturnします。

METHOD PUBLIC GetQualifier : DUT_IFM_AL1322_Qualifier
VAR_INPUT
PortNumbers:INT;
END_VAR
VAR
Port :USINT;
END_VAR

GetQualifier.DA:=FALSE;
GetQualifier.DACT:=FALSE;
GetQualifier.DI2:=FALSE;
GetQualifier.DI4:=FALSE;
GetQualifier.PE:=FALSE;
GetQualifier.PVI:=FALSE;
GetQualifier.PVO:=FALSE;

IF PortNumbers >=1 AND PortNumbers <=8 THEN
Port:=_Data.QualifierIOLinks[PortNumbers];
ELSE
Port:=0;
END_IF

GetQualifier.DI4:=Port.0;
GetQualifier.DI2:=Port.1;
GetQualifier.PVO:=Port.3;
GetQualifier.DACT:=Port.4;
GetQualifier.DA:=Port.5;
GetQualifier.PE:=Port.6;
GetQualifier.PVI:=Port.7;
PROPERTY PUBLIC TimeStamp : ULINT

現在AL1332のTimeStampを取得します。

PROPERTY PUBLIC TimeStamp : ULINT

TimeStamp:=_Data.TimeStamp;
FUNCTION_BLOCK FB_LR_TB2000

こちらはKeyenceのIOLINK Sensor用のFunction Blockです。

FUNCTION_BLOCK FB_LR_TB2000
VAR_INPUT
iIOLinkOK :BOOL;
END_VAR
VAR_OUTPUT
qDistance :WORD;
END_VAR
VAR
_devices AT %I* :uDUT_LR_TB2000;
temp :uDUT_LR_TB2000;
END_VAR

ByteをSwapし、現在値を出力します。

MAIN

こちらはMain Programです。

IOLINK Deviceのデータを取ると、Port4,5のDI/DOを制御する簡単なプログラムです。

PROGRAM MAIN
VAR
LR_TB2000_1:FB_LR_TB2000;
AL1322_1 :FB_IFM_AL1322;
Distance :WORD;
Port4,Port5 :DUT_IFM_AL1322_Qualifier;
Port5_Outputs AT %q*:USINT;
END_VAR



LR_TB2000_1(
iIOLinkOK:=AL1322_1.GetIOLinkSts(1)
,qDistance=>Distance
);


Port4:=AL1322_1.GetQualifier(4);
Port5:=AL1322_1.GetQualifier(5);
IF NOT Port4.DI2 THEN
Port5_Outputs:=1;
ELSE
Port5_Outputs:=0;
END_IF

Add Link

最後に、Ethercat IOLINK Slave Al1332の変数とUser ProgramをLinkします。

IO-Link Device Status

TxPDO IO-LINK Device Statusで各IOLINKの状態をLinkします。

Qualifier of IO-Link

TxPDO IO-LINK Qualifierで各IOLINKの評価をLinkします。

Timestamp

TxPDO TimeStampでAL1332のTimeStampをLinkします。

Module1(IOL_In_4Byte)

Module 1(IOL_In_4Byte)>TxPDOのByte0とByte1をUser Programとひもつけます。

Module5(Digital OUT)

Module5>RxPDOのByte0は出力なので、1=出力する。その変数をUser Programとひもつけます。

Activte

最後はActivate ConfigurationでHardware ConfigurationをRuntimeにDownloadします。

Runtimeを再起動します。

Login

LoginでUser ProgramをDownloadします。

Start

Runtimeを起動します。

Result

DI/DO

Beckhoff TwinCAT with IFM AL1332 Ethercat IOLink and Pilz ESTOP – YouTube

IO-LINK

Beckhoff TwinCAT with IFM AL1332 Ethercat IOLink and keyence IOLink Devices – YouTube

Source Code

下記のLINKから記事のプロジェクトをDownloadしてください。

https://github.com/soup01Threes/TwinCAT3/blob/main/TwinCAT_IFM_AL1332.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

シェアする

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

フォローする