OMRON#Using NX1 to build an EtherCAT Network

こちらの記事はOMRON NX1でEtherCAT Masterを立ち上げ、EtherCAT IO LINK Slave AL1332とPhoenix Contact AL E EC DI8 DO8 M12、2つのEtherCAT SlaveとEtheCATネットワークを構築します。IOLINKはキーエンスのLR-TB2000を使用しています。

よろしくお願いします。

Thanks!

この記事が出来上がったのはオムロン株式会社さまとifm efector co. ltd.さまから機材を貸してくださったおかけです。誠にありがとうございます。

オムロン株式会社

オムロン株式会社は、オートメーションのリーディングカンパニーとして、工場の自動化を中心とした制御機器、電子部品、駅の自動改札機や太陽光発電用パワーコンディショナーなどの社会システム、ヘルスケアなど多岐にわたる事業を展開し、約120の国と地域で商品・サービスを提供しています。

こちらはオムロン株式会社のホームページです。

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

https://www.omron.com/jp/ja/

ifm efector co. ltd.

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

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

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

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

Reference Link

Beckhoff#TwinCAT x IFM AL1332 EtherCAT IO-LINK Master_Part1
Omron#Sysmac Studio Installation

Download ESI File

IFM AL1332

https://www.ifm.com/de/en/product/AL1332?tab=documents

AXL E EC DI8 DO8 M12

Device DescriptionのところにESI FileをDownloadしてください。2つありますが、今回のTutorial使用するのはByte-by-Byteになります。

https://www.phoenixcontact.com/ja-jp/products/io-component-axl-e-ec-di8-do8-m12-6m-2701525

ライセンス同意すればDownloadできます。

Implementation

Install ESI File

Sysmac Studio>Configuration and Setup>EtherCATをクリックします。

EtherCAT構築画面が表示され、Maseterを選んでる状態から右クリック>Display ESI Libraryをクリックします。

現在Sysmac StudioにインストールされたESI Fileが全部表示されました。

Install FolderでESI Fileが格納されてるDirectoryを選択し、一括でインストールできます。(一つずつインストールするのは面倒なので)

ESI Fileが格納されたFolderを選択>OKします。

インストールしますか?Yesです。

しばらく待ちます…

Done!

Insert Slave

次はSlaveを追加します。ToolboxのIfm IO-Link Masterから今回使用するIfm IO-Link Master Al1332を右クリック>Insertします。

Ethercat NetworkにIFMのIO Link Ethercat Master AL1332が追加されました。

同じ操作でPhoenix ContactのAXL E EC DI8 DO8 M12 6PのIP67 Ethercat IO BlockをEtherCATネットワークに追加しましょう。

Write Slave Address

ツールをNXCPUと接続します。

OMRON NX CPUを選び>Write Slave Node Addressをクリックします。

Present valueは現在各Ethercat SlaveのNodeアドレスで、Set ValueのFieldから新しいの設定値を入力し、”Write”Button”でNodeアドレスをSlaveに書き込みます。

Write!書き込んだらSlaveの電源を入れ直してください。

Configure Slave

IFM AL1332はEthercat IO LINK Masterなので、各PortにもIOLINK・デジタル入力・デジタル出力・不使用で設定できます。AL1332を選び、Modbue Configuration>Edit Module Configurationボタンをクリックします。

IFM AL1332各Portの設定を一覧できます。

右のToolboxからDigital_INを右クリック>Insertします。

CH2はいまデジタル入力に変更しました。

同じ操作でCh3をデジタル出力に変更しましょう。

Download

ProjectをCPUにDownloadします。

Executeで確定します。

暫く待ちます…

Yesでプログラム転送します。

また暫く待ちます…

YesでCPUをRun Modeに切り替えます。

Done!

Check Connection Status

EtherCAT Master右クリック>Display Diagnosis/Statistics Informationをクリックします。

Masterや各Slaveの現在状態を一覧できます。

Get Wireshark data

次はWiresharkのデータを確認してみます。Masterをクリックし、Display Packet Monitor機能を起動します。

StartでPacketをCapature始めます。

そして好きなタイミングでStopで記録を停止します。

Save Packet DataでPacketを保存します。

保存先を設定します。

Wiresharkで開ける.CAP Fileが保存されました。

中にPacketsが見えますね。

Mapping

次はEthercatで接続してるSlaveのIOをMappingします。Configurations and Setup>I/O MapでMappingツールを開きます。

Node1のIFM AL1332、Node2のAXL E EC DI8 DO8 M12がありますね。

まずAL1332を展開し、各PortのStatusを確認できます。

AXL E EC DI8 DO8 M12

一つずつ変数を作成するのは面倒なので、AXL E EC DI8 DO8 M12を右クリックし>Create Device Variableで自動的に変数を作成します。

Done!

AL1332

IFM AL1332も同じ操作で変数を作成しましょう。Create Device with Prefixで変数を自動作成するときDefault名をつけれます。

例えばPrefixは”MyDevices”を設定してるのであれば、変数名がすでにMyDevicesから始めることになります。

Program

Add Function Block

IFM AL1332のQualifierとStatus状態を取得するためのFunction Blockを作成します。

Programming>POUs>Function Block>右クリック>Add>STします。

そしてFunction Blockが追加され、適切な名前に変更しましょう。

FB_IFM_AL1322_Qualifier

まずはIFM Qaulifier値から現在AL1332の状態を取得します。

Internals
In/Out

EthercatからIFMモジュールのQualifier値を入力し、現在モジュールの状態に変更します。

Program

こちらはプログラムです。

_Qualifier:=USINT_TO_WORD(Qualifier);

DI4:=(_Qualifier & WORD#2#0000_0001)<>0;
DI2:=(_Qualifier & WORD#2#0000_0010)<>0;
PVO:=(_Qualifier & WORD#2#000_0100)<>0;

DACT:=(_Qualifier & WORD#2#0001_0000)<>0;
DA:=(_Qualifier & WORD#2#0010_0000)<>0;
PE:=(_Qualifier & WORD#2#0100_0000)<>0;
PVI:=(_Qualifier & WORD#2#1000_0000)<>0;

FB_IFM_AL1322_Status

次はIFMモジュールのStatusを取得します。

Internals
In/Out

EthercatからIFMモジュールのStatus値を入力し、現在モジュールの状態に変更します。

Program

こちらはプログラムです。

//Error
_Status:=USINT_to_WORD(Status);
Error:=(_Status & WORD#2#1111_0000)<>0;

//Port
_Status:=_Status& WORD#2#0000_1111 ;
PortIsDeactivated:=_Status = WORD#16#0;
PortIsDI:=_Status=WORD#16#1;
PortIsDO:=_Status = WORD#16#2;
PortIsIOLink_OP:=_Status = WORD#16#3;
PortIsIOLink_STOP:=_Status=WORD#16#4;
PortIsIOLink_PreOP:=_Status=WORD#16#5;

Main 

Programming>Add>STでSTプログラムを追加します。

Internals

先程定義したFunction Block Instanceや、IOをON/OFF更新するためのTimerなどを宣言します。

Externals

Externalsは外部変数と紐付けられるために使用します。

Program

こちらはプログラムです。まずPort1/2/3のQualifier・Statusを取得し、Phoenix ContactのEthercat Slave IN2がTrueになると出力は1s ON、1s Offします。

最後はIFM モジュールのPort1 IOLINK状態が正常であればキーエンスのIOLINK Senosrからデータを出力します。

//Qualifier
AL1322_Qualifier[1](
Qualifier:=E001_TxPDO_IO_Link_Port_Qualifie_IO_Link_Port_1_Qualifier_F101_01
);
AL1322_Qualifier[2](
Qualifier:=E001_TxPDO_IO_Link_Port_Qualifie_IO_Link_Port_2_Qualifier_F101_02
);
AL1322_Qualifier[3](
Qualifier:=E001_TxPDO_IO_Link_Port_Qualifie_IO_Link_Port_3_Qualifier_F101_03
);
//Status
AL1322_Status[1](
Status:=E001_TxPDO_IO_Link_Device_Status_IO_Link_Port_1_Status_F100_01
);
AL1322_Status[2](
Status:=E001_TxPDO_IO_Link_Device_Status_IO_Link_Port_2_Status_F100_02
);
AL1322_Status[3](
Status:=E001_TxPDO_IO_Link_Device_Status_IO_Link_Port_3_Status_F100_03
);


IF myStep=0 AND AL1322_Qualifier[2].DI2 THEN

MyTimer1(IN:=TRUE,pt:=T#1s);
if MyTimer1.Q THEN
myStep:=1;
MyTimer1(IN:=False);
END_IF;
END_IF;

if  AL1322_Qualifier[2].DI2 = false THEN
myStep:=0;
END_IF;

CASE myStep OF


0:
E002_RxPDO_Mapping_Digital_Outpu_Digital_Output_Bits_0_7_5000_01:=16#00;
ifm_al1332_Slot2_DORxPDO_output_byte_0_7000_01:=0;

1:
MyTimer1(In:=True, PT:=T#1s);
E002_RxPDO_Mapping_Digital_Outpu_Digital_Output_Bits_0_7_5000_01:=16#FF;
ifm_al1332_Slot2_DORxPDO_output_byte_0_7000_01:=1;
IF MyTimer1.Q THEN
myStep:=2;
MyTimer1(In:=FALSE);
END_IF;
2:
MyTimer1(In:=True, PT:=T#1s);
E002_RxPDO_Mapping_Digital_Outpu_Digital_Output_Bits_0_7_5000_01:=16#00;
ifm_al1332_Slot2_DORxPDO_output_byte_0_7000_01:=0;
IF MyTimer1.Q THEN
myStep:=1;
MyTimer1(In:=FALSE);
END_IF;
END_CASE;

Distance:=0;
if AL1322_Status[1].PortIsIOLink_OP THEN
ShiftWord1:= SHL(
USINT_TO_WORD(ifm_al1332_Slot0_IolinkdataTxPDO_input_byte_0_6000_01)
,8
);
ShiftWord2:=USINT_TO_WORD(ifm_al1332_Slot0_IolinkdataTxPDO_input_byte_1_6000_02);


Distance:=WORD_TO_INT(ShiftWord1 or ShiftWord2);

END_IF;

Register in variable Table

先ほどExternalsが外部変数とつながると言いましたね。外部とつながりたい変数を右クリックし>Register in variable tableをクリックします。

External Variableをクリックします。

必要な外部変数はそのExternalsエリアに登録されます。

Task Settings

新しいPOUが作成されたら、Taskに設定するのを忘れないでください。Task Settingsをクリックします。

+ボタンで先ほど追加したSTプログラムを追加しましょう。

Result

IF OK

https://youtube.com/shorts/3rqPUhrc2Tw

IF Error

https://youtube.com/shorts/cipnFSlthX8

Operation

Source Code

https://github.com/soup01Threes/OMRON/blob/main/Ethercat_Demo_IFM_PhoenixContact_Slave.smc2

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

シェアする

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

フォローする