こちらの記事は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の国と地域で商品・サービスを提供しています。
こちらはオムロン株式会社のホームページです。
どうぞよろしくお願いします。
ifm efector co. ltd.
ifmは1969年にドイツで誕生依頼”ifm-Close to you”を企業理念とする、センサのスペシャリストです。 今日では世界95ヶ国以上の拠点で従業員7000名を超える大企業になり、IoTのカギとなるIO-Linkの先駆者としても世界的に広く認知されるメーカーとなります。
こちらはIFMさまのホームページです。
どうぞよろしくお願いします。
Reference Link
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