Project#Setup EIP Connection wtih TwinCAT Adapter x Keyence KV8000 Scanner

こちらは今回の記事の構成です。TwinCAT3はTF6280を使用しEthernet/IP Adapterを立ち上げ、Ethernet/IP Scanner側はKeyence KV8000でEthernet/IP Networkを構築します。

よろしくおねがいします。


Reference Link

http://soup01.com/ja/category/protocol/ethernet-ip/

http://soup01.com/ja/category/beckhoff/

Implementation

TwinCAT3 Side

まずはTwinCAT3側を設定します。

Add PLC

PLC>Add New Itemします。

PLCを追加し、中のPOUを開きます。

Ethernet/IP AdapterのProcess IO 変数を追加します。

そしてプログラムはBufferに転送するようにします。TwinCAT3もProcess IOの変数を使わないと更新しませんので。

Add Ethernet/IP AdapterIP

次はEthernet/IP Adapterを追加します。I/O>Devices>Add New Itemします。

EtherNet/IP>EtherNet/IP Adpaterを選び>OKします。

Ethernet/IP使用するEthernet Interfaceを選び>OKします。

それでEthernet/IP Adapterが追加されました。

Ethernet Adapter

AdapterのTabを開き、設定したInterfaceが正しいかを再確認しましょう。

Sync Task

次はSync Taskを開きます。つまりEthernet/IP Adapterの更新Taskを設定できます。

Special Sync Taskを選択し>Create new I/O Taskします。

Taskを入れてOkします。

Cycle Ticksを設定します。今回は128msにしますね。

Add a Connection Point

先程追加したEthernet/IP Adapter>右クリック>Add New Itemします。

TC EtherNet/IP Slaveを選び>OKします。

Connection Pointが追加されました。

Adapter virtual IP

Box1をダブルクリックします。

SettingsのTabを開き、8000:21,8000:22のIP addressとNetwork Maskを設定してください。このIPは実際いまのConnection PointのIPアドレスになります。

ではConfigurationに合わせて設定しましょう。

Append IO Assembly

次はConnection PointのAssemblyを追加します。Box1を右クリック>Append IO Assemblyします。

Assembly1が追加されました。

展開するとInputsとOutpus 項目も出てきます。

Insert Inputs

ではまず入力点から設定します。Inputs右クリック>Add New Itemします。

 32 Bytesを設定したいので、BYTESを選び>Multipleを32入力し、OKします。

Inputに32個の変数が追加されました。

Try to Add the Array!

でも同じTypeの変数は扱うにはたまに面倒なこともありますので、先の変数追加画面に実はCreate Array Typeというボタンがあります。

このボタンをクリックすると、クリックしたとき選択したData Typeを何個を作成する配列を設定できます。ここで0と47を入力するとつまり0…47のByte配列になります。

設定終わったらOKします。

Nameのところに変数を入れて、OKします。

配列が作成しました。

Add Ouput

次は出力側です。Outputs>Add New Itemします。

先ほど一回ARRAY[0..47]OF BYTEを作成したことがあるので、そのまま配列のTypeを選び>OKします。

出力側も作成されました。

入力と同じくARRAY[0..47]OF BYTEになります。

Build

Build>Build SolutionでProjectをコンパイルします。

Link Input Variables

Assembly IOのInputをUser ProgramとLinkします。

Inputsをクリックします。

ArrayBytesを右クリック>Change Linkします。

User Programに先ほど定義したAT %I*の変数がここで選択できるようになります。

[X]のところでXがついてるであればもLink完成です。

Link Output

Assembly IOのOutputsをUser ProgramとLinkします。

Outputsをクリックします。

ArrayBytesを右クリック>Change Linkします。

User Programに先ほど定義したAT %Q*の変数がここで選択できるようになります。

[X]のところでXがついてるであればもLink完成です。

Export EDS

最後はEDS FileをExportします。Box1>右クリック>Export EDS Fileします。

TwinCAT3でEDSを生成するとき、実は2つのOptionsがあります。

YESだとこのEDS Fileはいまのプロジェクトの情報に沿って作成するか、

NOだとこのEDS Fileは自由にConfigsできるようになるか。

今回はYesで、いまのプロジェクトの情報に沿って作成します。

EDS Fileの保存先を設定します。

よし、これでOKです。

Download

最後はActivvate ConfigurationでプロジェクトをRuntimeにDownloadします。

OKします。

もしライセンスが足りない場合、ライセンス生成してくださいというPopupが出てきます。

YESでライセンスを生成しましょう。

同じ文字を入れて>Okします。

OKでTwinCAT3を再起動します。

歯車のICONは緑に変わり、つまりRuntimeもRun状態になっています。

Login

LoginでプログラムをDownloadします。

Yesします。

Start it!

Startボタンでアプリケーションを起動すれば完成です。

KV8000 Side

TwinCAT3 Ethernet/IP Adapter側が終わったところで、次はキーエンスのKV8000 でScanner側を構築します。Unit Configuration>KV-8000>Ethernet/IP R3000 DM1000のところをクリックします。

Auto Configurationするか?Manualするかと聞かれます。Auto ConfigurationだとNetworkにあるEthernet/IP機器を自動Scanし吸い上げます。Manualの場合は手動で設定します。今回の記事ではManual、つまり手動から設定します。

いまはEthernet/IP Settings画面が表示されています。

Cofigure Scanner

ScannerのIPを設定します。KV-8000をダブルクリックします。

右側にScanner Settings>IP addressを設定できます。

Configurationに合わせて192.168.3.45を設定します。

Register EDS

次はEDS Fileを登録します。

Ethernet/IP Unit>Unit List>右クリック>Register EDS Fileをクリックします。

TwinCAT3からExportされたEDS Fileを選び>Openします。

機器のICONが見つかりませんが、どうしますかって聞かれます。

Use default iconを選び>OKします。

Unit listからTwinCAT3 Ethernet/IP Adapterが追加されました。

Insert in your network

次はTwinCAT3のAdapterをEthernet/IP ネットワークに追加します。

追加されたBox1(TC Ethernet/IP Slave)をダブルクリックします。

Node addressは触らなくて良いので、IP Addressは先程TwinCAT3に合わせて設定しましょう。

右側にあるUnit settingsにAdapterの詳しい情報を設定できます。

次はAdapterの隣にある-ボタンをクリックするとInとOutのアドレスが表示されます。

IN_129は入力でW00-19まで、OUT_130は出力でW1A-33までになります。

What is W?

WはLink Regisiterの意味でCPUが通信でデータ交換するとき、キーエンスのCPUではデータをW Devicesに格納します。Wは16BitデバイスでLink DeviceのCountは16Hexになります。例えば、先ほどの設定だと入力は00-19ですね。

つまりデバイスはW00,W01,W02,W03…W09までです。でもW09の次はW10ではなくW0A,W0B,W0C,W0D,W0E,W0Fで、そしてW10になります。

少し違和感があるかもしれませんが慣れるしかありません。

Connection Settings

各Connectionに更に詳しい設定ができます。Settings>Connection settingsをクリックします。

各ConnectionのRPIやConnection TypeやInstance番号を設定できます。

例えばTwinCAT3と接続する際にExclusiv OwnerやInput OnlyやListen Onlyを設定できます。

Finish it

最後はClose the setup windowのICONでEthernet/IP Settings画面を閉じます。

そしてExit from the Unit EditorでUnit Editorを閉じます。

YesでHardware configurationを保存します。

Download

設定が終わったらKV StudioからMonitor/Simulartor>Transfer to PLC -> Monitor modeでプロジェクトを転送します。

しばらく待ちます…

転送Itemをすべて選択し、Executeします。

しばらく待ちます…OKです。

Result-1 Cannot Connect..

では実際接続状態を見てみます。KV StudioでEditorのDrop ListからMonitorを切り替えます。ツールをMonitor Modeに切り替えます。

でもBox1(TwinCAT3)の隣はぐるぐるのICONになり…

しばらくすると、KV-8000とBox1(TwinCAT3)も赤いXがついてます。つまり通信できないですね。

KV StudioからCommon ErrorのPop-upが出てきて、Detailから更に詳しい情報が見えます。

Cyclic IO 通信に問題ありますというメッセージですね。つまりBox1(TwinCAT3)と通信できないことを示しています。

Why?

WiresharkからPackageを見てみます。CIP Filterをかけると、192.168.2.252(TwinCAT3)が192.168.2.45(KV8000)にエラーの返答がきたとわかります。

そのPackageを展開すると、Service Request 0x54、Status Connection failureで、General Status=0x1、 Addition status=0x0111がエラーの中身です。

What is 0x54 and General Status=0x1,Additional Status=0x1111?

0x54=Forwad_Open

まず0x54はForwad_Openのリクエスト(最大511Bytes)です。Ethernet/IPがScannerとAdapterがIOデータを交換始まるまえにまずForwad_OpenのリクエストでScannerから接続のリクエストを送り、Adapter側がそれらの接続パラメタが正しいかどうかをCheckします。

つまり、いまはScanner側が設定したAdapterの接続情報に誤りがあり、TwinCAT3側が接続を拒否しました。

General Status=0x1,Additional Status=0x1111

もう一度Packageを見ますと、General Status=0x1 Additional Status=0x1111がAdapter(つまりTwinCAT3)から返答がきました。CIPの仕様書によりますと、その返答はRPI Not Supportedのエラーだと示しています。RPI No Supportedを解決する前、まずRPIを簡単に説明します。

RPI=Requested Packet Intervalでは、ConnectionのOriginatorが書きと読みに対してPacket要求時間(つまり更新Cycle)を提供します。そのRPIはms単位で設定し、32Bit整数になります。話に戻りますと、RPI Not SupportedはつまりTwinCAT3側がキーエンスのForwad_Openに対してそのRPI設定のパラメータがSupportしてないことを示しています。

*実はGeneral Status 0x01、 Extended Status 0x0112のエラーメッセージもあり、RPI値が受け付けませんという意味です。

Let’s Fix it!

KV Studioを戻し、先Connection Settingsを開き、RPIを確認してみます。

いまPRI(Communication cycle)は64.0msになっていますね。

TwinCAT3側を開くと更新するTaskeipはCycle ticksは128msになります。つまりTwinCAT3側は128msで一回Ethernet/IP Adapterの制御を処理するのに対して、KV8000から64ms CycleでPackage更新要求だと設定しました。それは繋がりませんね。

Cycle ticksを32msに変更します。

TwinCAT3とKV8000も修正後のProjectをCPUにDownloadしてください。

Result-2

KV8000 Side

KV Studioからもう一度Monitor Modeに切り替えます。

Box1(TwinCAT3)のICONは緑になっています!

TwinCAT3 Side

TwinCAT3側も見てみます。Device1>Inputs>Devstateをクリックします。

現在値は0なら正常だと示しています。

更にBox1>Inptus>Stateも確認します。

こちらも現在値が0、つまりエラーなじです。

WiresharkからみるとCIP I/O Packageがありましたね!

Summary

最後に説明をまとめましょう。

IP

KV Stuido側で設定するEthernet/IP AdapterのIPは、TwinCAT3側のIndex 8000:21とIndex 8000:22に合わせてください。


Assembly

次は細かい設定になりますが、

ピンク色はAssembly番号、TwinCAT3側のIndex8000:01です。

赤色はInput Instance番号、TwinCAT3側のIndex8000:04です。

緑色はInput InstanceのByte数、TwinCAT3側のIndex8000:05です。

オレンジ色はOutput Instance番号、TwinCAT3側のIndex8000:06です。

黄色はOutput InstanceのByte数、TwinCAT3側のIndex8000:07です。

Bonus

ここからは少しBonusです。先程通信はWiresharkから確認しましたが、実際本当にデータしたいかをみたいですね。ではTwinCAT3とKV8000両方とも簡単なプログラムを作成しましょう。

KV8000

Define Variable

KV Stuido>Variableをクリックします。

ここで変数を定義します。Variable NameはわかりやすいArrayDataFromTwinCATで、Data TypeをARRAY、配列に変更します。

Data typeはUINTで、Array Sizeは26にします。

Assigned devicesはW00に設定します。

画面の下のSet device name W00 to W019、つまり配列のアドレスはどこまで占有するかのことです。

これで変数を定義しました。

Insert Program

次はプログラムを作成します。

Edit>Insert Box scriptします。

CR2006を追加します。どうやらそのCR2006は1秒のClock Pulseだそうです。

Script Boxに1をPlusとマイナス1のプログラムを作成します。

*注意するのはKeyenceのScriptはIEC61131-3のSTと文法が違います。

Compile

Convert>Convertでプログラムをコンパイルし、CPUにプロジェクトをDownloadしてください。

TwinCAT3

次はTwinCAT3側ですね。

Add Library

ReferenceからCCA Memoryライブラリを追加します。このライブラリは三菱のBMOVのようなメモリ操作できる関数が入っています。

Program

まずはVAR内で必要な変数を定義します。

MEM.MemMoveはメモリのまとめ転送する関数です。TwinCAT3側はByte定義しましたが、KV8000側ではWORD単位なので、書き込みたいの与えをTemp変数に移動し、MEM.MemMove関数でBlock Moveします。

pSoureは転送元でpDestinationは転送先、pはPointerつまり変数のメモリアドレスです。ADR()関数を使用すれば取れますので深く考える必要がありません。

Result

Value1、Value2はKV8000からの与えなのでずっと加算されています。

KV Studioからみてみましょう。Box1(TwinCAT3)をクリックします。

該当するConnectionが現在値を一覧できます。

W02とW019は最初の2Byteと最後の2Byteで、ちゃんと転送しましたね!

Box Scriptで右クリック>Registration monitor windowをクリックします。

そのBoxに使われている変数の現在値も一覧できます。

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

シェアする

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

フォローする