こちらでBERGHOF社のRaspberry Piベースのモジュール型CODESYS PLCの紹介の第4話です。今回はEtherCAT Masterを立ち上げ、ローカルのEBUS通信 のE-IO XR02、またOMRONとBeckhoff のCouplerと通信します。
BERGHOFからの機器のご提供、ありがとうございます。
さ、FAを楽しもう。
Reference Link
Implementation1
BERGHOFのMC-PIコントローラーには3つのEthernet Interfaceがあります。注意するのは2番目はEBUSになります。
このような保護COVERがあります。
BERGHOF Side
最初にBERGHOF社のMC-Piコントローラーと隣にインストールされたMC-I/O XRシリーズとE-BUSで通信します。
Configure Network via Web server
BERGHOF社のMC-PiコントローラーのWeb Serverにアクセスし、Configuration>Networkをクリックします。
ETH1のModeをEtherCATモードに設定します。
MC-I/O XR?
MC-I/Oはプロセス信号を任意のEtherCATネットワークステーションに接続するためのI/Oモジュールシステムです。そして、MC-I/OはMC-I/Oバス・カプラと各種MC-I/Oモジュールで構成されています。MC-I/Oバス・カプラは、物理的転送技術(ツイストペア)をLVDS(Eバス)に変換し、LVDSモジュールに必要なシステム電圧を生成します。
Type B-Nimis MC-I/O XR 多機能I/Oモジュールはデジタルとアナログの入出力を1つのモジュールにまとめたものです。 デジタル入力にはカウンタ機能もあり、エンコーダにも適しています。
Digital I/O
デジタルシグナルミックスは8入力8出力で構成されています。 出力はデジタル入力としても使用できます。 各入力は10 kHzの周波数までカウントできます。 24Vエンコーダー信号の処理だけでなく、前後方向のカウントも可能です。
Analog I/O
モジュールの構成によっては、さらに4つの接続が入力または出力として機能します。 アナログI/O機能には、+/- 10 Vと+/- 20 mAがあり、最大22ビットの高分解能を備えています。
こちらは今回使用するモジュール(MC-I/O XR02 ENC/C DIO 8/8)です。
コントローラーとEBUSで接続するにはこちらのIO Connectorを使用しましょう。
Wiring
こちらはMC-I/O XR02 ENC/C DIO 8/8の配線です。
Codesys Side
次はCodesysプロジェクトを設定します。
Install ESI File
BERGHOFからMC-I/O XRのESI Fileをもらい、Tools>Device Repositoryをクリックします。
MC-I/O XR のESI Fileを選択します。
Done!ESI Fileがインストールしました。
Add EtherCAT Master
EtherCAT Masterを追加するため、Device>右クリック>Add Deviceします。
Fieldbus>EtherCAT>Master>EtherCAT Masterを選択し、EtherCAT Masterを追加しましょう。
Select Interface
EtherCAT Masterを開き、General>SelectでEtherCAT Masterとして使用するInterfaceを設定します。
EBUSはEther1なので、Eth1を設定しましょう。
Scan for Devices
Auto Scanを使用する前に、一回EtherCAT StackをCPUにDownloadしましょう。
次はEtherCAT Master>右クリック>Scan for Devicesをクリックします。
Done!MC-I/O XR02が検索されましたので、Copy to projectでConfigurationをプロジェクトに複製します。
Result
Done!これでEtherCAT Configurationが完成です。
Configure EtherCAT Task
次はEtherCAT Taskを構築します。
Intervalを500usに設定します。
Program
Codesysのプログラムを作成します。
DUT_8BIT
こちらは8BITの変数をまとめた構造体です。
TYPE DUT_8BIT : STRUCT b00 ,b01 ,b02 ,b03 ,b04 ,b05 ,b06 ,b07 :BIT; END_STRUCT END_TYPE |
DUT_IO
こちらはMC-I/O XRデータをまとめた構造体です。
TYPE DUT_IO : STRUCT DigitalIN:DUT_8BIT; DigitalOut:DUT_8BIT; PLD_Veersion:USINT; STATUS:USINT; END_STRUCT END_TYPE |
GVL
こちらはMC-I/O XR I/Oの変数を定義したGlobal Variable Listです。
{attribute ‘qualified_only’} VAR_GLOBAL IO1:DUT_IO; END_VAR |
pLocalIO
LD2プログラムを作成します。
Network1
ネットワーク1はTemp変数を初期化します。
Network2
ネットワーク2は0.2秒ごとにONするタイマーです。
Network3
ネットワーク3はタイマの出力の立ち上げを検知します。
Network4
ネットワーク4はTemp変数をSHL関数で現在値を右にソフトします。
Network5
ネットワーク5はTemp変数をProcess Outputに転送します。
Mapping
GVL変数をEtherCAT I/OとMappingします。
Downlaod
CodesysプロジェクトをCPUにDownloadします。
Result
Done!EtherCAT通信が成立しました。
CPUにあるRUN/STOP LEDが緑点灯で(RUN MODE)、E-IO XR02のEtherCAT/IO/Power LEDも緑の点灯になります。
こちらの動画から動作確認できます。
Implementation2
次はBERGHOFのMC-PiコントローラーとBeckhoffやOMRONのEtherCAT CouplerとEtherCATネットワークを構築します。
Download ESI File
各社のWebサイトからESI FileをDownloadします。
Beckhoff
こちらはBeckhoff EK1xxxのESI FileのDownload先です。
OMRON
こちらはOMRON NX-ECC20xのESI FileのDownload先です。
https://industrial.omron.eu/en/products/NX-ECC203
BERGHOF Side
BERGHOF社のEth2を使用しEtherCAT ネットワークを構築しましょう。
Configure Network via Web server
BERGHOF社のEth2を有効にするには、Configuration>Network>ETH2のModeをStaticに設定し、IP アドレス・NetMaskを設定します。
Codesys Side
Codesysプロジェクトを作成します。
Add EtherCAT Master
EtherCAT Masterを追加するため、Device>右クリック>Add Deviceします。
EtherCAT Masterを追加します。
Done!
Select Interface
EtherCAT Masterを開き、General>SelectでEtherCAT Masterとして使用するInterfaceを設定します。
Eth2を選択します。
Auto reset
EtherCAT MasterがSlaveを自動リセットできるように、General>Options>Automatically restart slavesのCheckboxを入れてください。
Scan for Devices
Auto Scanを使用する前に、一回EtherCAT StackをCPUにDownloadしましょう。
次はEtherCAT Master>右クリック>Scan for Devicesをクリックします。
Done!OMRONとBeckhoffのEtherCAT Slaveが検索されました。
Result
BeckhoffとOMRONのSlaveがプロジェクトで複製されました。
Mapping
今回はプログラム変数とモジュール間は絶対アドレスでMappingを行います。下図はEL1088を例として説明します。
EtherCAT I/O Mapping>Channelの先頭にアドレスを設定してください。
Program
次はプログラムを作成します。
GVL
Global Variable Listには先程Mappingに設定した絶対アドレスに合わせて宣言してください。
{attribute ‘qualified_only’} VAR_GLOBAL EL1088_IN AT %IB300 :DUT_8BIT; EL2088_OUT AT %QB301: DUT_8BIT; EL2004_OUT AT %QB302:DUT_8BIT; NXID5422 AT %IW100:UINT; NXOD5256 AT %QW100:UINT; END_VAR |
FieldbuStatus
こちらはEtherCAT Masterの状態を取得するプログラムです。
PROGRAM FieldbuStatus VAR EtherCAT1_xError:BOOL; EtherCAT1_xConfigfinished:BOOL; EtherCAT1_DEDStatus:DED.DEVICE_STATE; EtherCAT1_DEDBusInfo:DED.BUS_INFO; _Frames:ARRAY[0..5]OF UDINT; _Times:ARRAY[0..3]OF LTIME; END_VAR |
EtherCAT1_xError:= EtherCAT_Master.xError; EtherCAT1_xConfigfinished:= EtherCAT_Master.xConfigFinished; EtherCAT1_DEDStatus:= EtherCAT_Master.GetDeviceState(); EtherCAT_Master.GetBusInfo( EtherCAT1_DEDBusInfo); EtherCAT_Master.GetStatistics ( udiFramesPerSecond=>_Frames[0] ,udiLostCyclesCount=>_Frames[1] ,udiLostFrameCount=>_Frames[2] ,udiRxErrorCount=>_Frames[3] ,udiSendFrameCount=>_Frames[4] ,udiTxErrorCount=>_Frames[5] ,ltRecvAvg=>_Times[0] ,ltRecvMax=>_Times[1] ,ltSendAvg=>_Times[2] ,ltSendMax=>_Times[3] ); |
pCATIO
こちらはOMRONのEtherCAT CouplerにインストールしたDOモジュールの16Channelを順番にソフトし、またOMRONのDIモジュール(Channel3)がONする度に、BeckhoffのEL2004の出力をソフトするような簡単なプログラムを組みます。
PROGRAM pCATIO VAR temp:UINT; temp2:USINT; TON:TON; R_TRIG:R_TRIG; R_TRIG2:R_TRIG; END_VAR |
IF temp=0 THEN temp.15:=TRUE; END_IF IF temp2 =0 THEN temp2.3:=TRUE; END_IF R_TRIG(CLK:=TON.Q); TON(IN:=NOT TON.Q,PT:=T#0.2S); IF TON.Q THEN temp:=SHR(temp,1); END_IF; MEM.MemMove(ADR(temp),ADR(GVL_CAT.NXOD5256),SIZEOF(temp)); GVL_CAT.EL2088_OUT:=GVL_CAT.EL1088_IN; R_TRIG2(CLK:=GVL_CAT.NXID5422.3); IF R_TRIG2.Q THEN IF temp2.3 THEN temp2.3:=FALSE; temp2.0:=TRUE; ELSE temp2:=SHL(temp2,1); END_IF END_IF MEM.MemMove(ADR(temp2),ADR(GVL_CAT.EL2004_OUT),SIZEOF(temp2)); |
Downlaod
CodesysプロジェクトをCPUにDownloadします。
Result
Done!BERGHOFのCPUとOMRON/BeckhoffのEtherCAT Couplerと通信が成立しました。
こちらの動画でBERGHOFのMC-PIコントローラーからOMRON ECC-203のOD5256の出力をソフトする動作を確認できます。
こちらの動画でBERGHOFのMC-PIコントローラーからOMRON ECC-203とBeckhoffのEK1101の連携動作を確認できます。