Keyence#GC-1000 Part3_Beckhoff EL6631とGC1000をProfinet通信しよう

GC1000ではEtherNet/IP™, PROFINET, UDP, Modbus/TCP, または MC プロトコルの通信に対応できます。今回の記事ではBeckhoff EL6631のProfinet TerminalとGC1000をProfinet通信のテーマです。

さ、はじめよう!

Reference Link

Keyence#GC-1000 Part1_Getting Started_JP
Keyence#GC-1000 Part2_緊急停止ボタンのプログラム作ってみよう

Reference Video

Beckhoff.EL6631でKeyence GC1000とProfinet接続チュートリアル

GC1000 And Profinet

こちらはGC1000のProfinet仕様です。

こちらはGC1000のMappingになります。詳しい情報はGC1000のManualを参照してください。

EL6631

PROFINET IO Controller Terminal EL6631 は、完全なリアルタイム機能(RT)と診断機能をサポートし、Conformance Class B に準拠したすべてのサービスがサポートされています。そして、EL6631 には最大 15 台の PROFINET IO デバイスを接続できます。

PROFINET IO Controllerは、Beckhoff PCベースの制御システムをPROFINET IOコントローラに変える(標準イーサネットインターフェイス)ことが可能です。

EtherCAT I/Oシステム用のEL663x PROFINETターミナルと接続することで、EtherCATと簡単に結合することができます。下図のように、EtherCATネットワークはPROFINET IOデバイスともデータを交換することができます。

PROFINET には 2 種類あります: PROFINET I/OとPROFINET CBAはありますが、TwinCATはPROFINET I/Oに対応しています。

現在、TwinCAT PROFINET I/Oコントローラと

  • EL6631はRTClass1をサポートしており、RTClass1で定義されたすべてのCycle timeが対応できます。(1msから2のべき乗ステップ(1、2、4、8、…ms)のゆに指定できます)
  • EL6632はRTClass1とRTClass3で通信でき、現在EL6632が対応する最小のサイクルタイムは500μs(RTClass3の場合)です。

LED

こちらはEL6631のLED状態になります。

Implementation

Keyence Side

Ethernet Setting

Option>Ethernet>Basic Settingを開きます。

OptionsにはEthernet Basic Settingの項目が表示されます。

Basic Setting

Basic SettingをクリックしIPアドレスなどを設定します。

Baisc Settingの画面が表示されます。

Read out Setting

もし現在の設定を取得したい場合、Read out communicatio settings from GCをクリックしましょう。

Transfer Setting

Transfer Communication settingsのCheckboxを入れると現在のネットワーク設定をCPUに転送できます。

IP Setting

IPの設定方法はStatic IPかDHCPなどを選択できます。

今回はStatic IPを選択し、IP addressはアプリケーションに合わせて設定してください。

これでOKです。

Device Name

Profinetを使用する場合、EditボタンからCPUのデバイス名を設定できます。

Edit device nameの画面が表示されます。

アプリケーションに合わせて設定してください。でものちほどTwinCAT側からDCP Protocolを使用しIPを振り分けますので。

Done!Okで進みます。

Result

下図のように、Basic Settingに反映されました。

PROFINET Setting

次はPROFINET Settingを変更するため、Ethernet>PROFINETをクリックします。

PROFINETの設定画面が表示されました。

アプリケーションに合わせて必要な診断情報をCheck入れてください。

Restart GC

プロジェクトの設定をCPUに転送し、Communication>Restart GCでCPUを再起動してください。これでGC-1000側は準備完了です。

Configuration

次はGC1000にResetスイッチやProfinetの入出力を定義します。

Inputs

Other input devices>Reset switchをInput device(s)にDropします。

Done!

Terminalボタンをクリックし、リセットボタンが接続してる端子台に合わせて設定しましょう。今回はSi10になります。

Communication inputs

次はComm.InputをCommunication input(s)にDropしましょう。KeyenceのProfinet Device GSDML File定義ではすでに8Bitの通信入力データが32個が定義され、GC Configurator上で使用する分をOther comm. inputでDropしSafety プログラムの中に使えばよいんです。

Communication input(s) Fieldで定義されていないBitデータはすべてFalseになります。

下図のような操作です。

Done!

Offset Bit

Offset BitをクリックしCommunication inputのアドレス番地を変更します。

下図のような操作で各Comm.Inputをアプリケーションによって異なるアドレス番地に設定できます。

Done!

Label

Communication InputのLabel Fieldをクリックしわかりやすい変数名に変更しましょう。

Done!

Communication outputs

KeyenceのProfinet Device GSDML File定義ではすでに8Bitの通信出力データが32個が定義され、GC Configurator上で使用する分をCOM-OUTでDropし、Safety プログラムの中に使えばよいんです。Communication output(s) Fieldで定義されていないBitデータはすべてFalseになります。

下図のような操作になります。

Offset Bit

Offset BitをクリックしCommunication Outputのアドレス番地を変更します。

下図のような操作です。

Done!

Label

Communication OutputのLabel Fieldをクリックしわかりやすい変数名に変更しましょう。

Done!

Program

こちらは今回記事で作った安全プログラムです。非常停止の入力信号はESTOP1というDelay Timerに1秒の遅延してからQを出力し、そしてReset Blockを利用し非常停止の信号が一回落ちて、リセットしない限り(リセットボタンもしくはTwinCATからのリセット信号)ランプ点灯出力しません。そしてESTOPがリセットが必要なとき、ランプは点滅に出力します。

Pulse Generator 

Pulse Generator Function Blockは、指定された間隔で連続的にON/OFFする信号を生成するために使用されます。

Reset

Reset Function Block、安全入力が ON の状態でリセット信号が入力されるまで出力を OFF に保持します。このBlockは機械の再起動するときに使用できます。

Beckhoff Side

Download GSDML

PROFINET IO 通信で使用できる GC1000の機能があります。PROFINET IO コントローラ設定ソフトウェア(今回はBeckhoff EL6631とTwinCAT3)を使用して GC1000を初めて設定する場合は、GC1000 GSDML Fileをインストールしてください。

下記のLinkからGSDMLをDownloadできます。

https://www.keyence.com/products/safety/safety-controller/gc/downloads/?mode=so&modelId=PM_2691000

DownloadされたZIP Fileを解凍してください。

このようなXML Fileがあります。

Install GSDML

GSDML Fileを下記のPathに移動してください。

C:\TwinCAT\3.1\Config\Io\Profinet

Reload Device Descriptions

EtherCAT Devices>Reload Device DescriptionsをクリックしDevice Description Fileを再ロードしてください。

Add EtherCAT Master

I/O>Devices<右クリック>Add New Itemします。

EtherCAT Masterを選び、Okで進みます。

EtherCAT Masterとして使用するNetwork Adapterを設定します。

Adapter Tabで先程設定したAdapterが正しいかをもう一回確認しましょう。

Scan

Devices>先程追加したEtherCAT Masterを右クリック>Scan機能を利用し、EtherCAT Slaveを検索しましょう。

Done!今回記事で使用するEK1101が見つかりました。

EK1101の中に今回の記事で使用するEL6631もありました。

Add Profinet Controller

次はProfinet Controllerを追加するため、Devices>Add New Itemします。

今回記事ではEL6631を使用しますので、Profinet>Profinet I/O Controller EL6631, EtherCATを選び、Okで進みます。

Done!新しいProfinet IO Controllerが追加されました。

Configure Adapter

先程追加したProfinet IO Controllerをダブルクリックし、Adapter TabからSearchをクリックし、いまハードウェア上で利用できるNetwork Adapterを検索します。

Scan機能を利用し取得したEL6631 terminalを選び>Okで進みます。

Configure Profinet Controller

次はEL6631 Profinet IO Controller TerminalのSettings TabからIP AddressとPNIO Controller Station名を設定しましょう。

Confiugre Task

PROFINET Controller Protocolは常にTaskとして稼働する必要があり、Profinet Protocolは設定されたTask時間で処理されます。理論上では、Controllerは他のTaskを経由し共同で処理することもできます。(例えばPLCやNC Task)

ですが、Runtimeが停止もしくは再起動・デバックした場合、PROFINET も停止になります。このような現象を避けるために、Free-Runの SyncTask を作成したほうがよいです。

”Create new I/O Task”をクリックし新しいTaskを定義します。

Task名を入力しOkで進みます。

PROFINET の基本サイクルは 31.25µs です。この周期は常に SendClockFactor (SCF)を掛けて基本周期となります。

そしてSendClockFactor はRTClass1 では 通常32に設定されます。これはBeckhoff PROFINET Controllerの RTClass1 の最小 PN サイクルでもあり、結果としては最小サイクルタイム 1ms となります。さらに、ReductionRatioFactorと組み合わせて使用します。

For RTClass1 the smallest cycle must always be doubled (permissible cycle times (for RTC1) with an SCF of 32 are 1, 2, 4, 8,…, 512)RTClass1では、最小サイクルは常に2倍する必要があります(SendClockFactorが許容サイクル時間(RTC1)は1、2、4、8、…、512です)。

Add Keyence GC-1000 Profinet Devices

次はキーエンスのSafety Controller GC1000を追加するため、Profinet IO Controllerを右クリック>Add New Itemします。

Controller>Keyence Safety Controllerを選び>Okで進みます。

Done!Profinet IO Devices GC1000が追加されました。

Configure Device IP

PROFINET接続を確立するとき、ControllerがDeviceにIPアドレスをデバイス名に沿って割り当てます(それはデバイスがまだIPアドレスを持っていないか、また異なるアドレスを持っている場合)。コントローラによってデバイスに実際にIPアドレスが割り当てられる前に、ARPが使用され、アドレスの競合の可能性をテストするか、デバイスがすでにこのIPアドレスを持っているかどうかをチェックします。

IP アドレスがすでにネットワークに競合がある場合、IO ドライバはこれを判断し、Logger Windowsに対応するメッセージを出力します。

ARPに対する応答がない場合、どのデバイス(もこのIP設定を使用していないことになり、コントローラはDCP_SETを使用しデバイスにIP設定を割り当てます。

ここでIP設定を行うことができます。

Configure Device Name

General Tab を開いてName Fieldでデバイス名を変更することができます。

Add PLC Project

次はPLCプロジェクトを追加するため、PLC>Add New Itemをクリックします。

Standard PLC Projectを選び、Addします。

Done!

DUT

今度はいくつかの構造体を定義します。

DUT_8BIT

こちらの構造体はキーエンスのInputCommデータとOutputCommデータの構造に合わせてBITARR8(8Bitの配列)を定義します。

TYPE DUT_8BIT :
STRUCT
bData:BITARR8;
END_STRUCT
END_TYPE
DUT_GC1000_ErrorCode

こちらの構造体はキーエンスの30個ErrorCodeとDetailErrorCode変数に合わせて定義します。

TYPE DUT_GC1000_ErrorCode :
STRUCT
ErrorCode AT %I*:UINT;
DetailErroCode AT %I*:UINT;
END_STRUCT
END_TYPE

GVL

Global Variable Listの中でキーエンスのGC1000 側に合わせて変数を定義します。

{attribute ‘qualified_only’}
VAR_GLOBAL
InputComm AT %I*:ARRAY[0..7]OF DUT_8BIT;
OutputComm AT %Q*:ARRAY[0..7]OF DUT_8BIT;
ModelInformation AT %I*:USINT;
OperationTime AT %I*:UDINT;
OperationStatus AT %I*:BYTE;
NumberOfError AT %I*:USINT;
ErrorCode AT %I*:ARRAY[1..30]OF DUT_GC1000_ErrorCode;
GC1000PortA,GC1000PortB AT %I*:BYTE;
PNIOState,PNIODiag AT %I*:UINT;
END_VAR

MAIN

こちらはメインプログラムで、Beckhoff 側でもリセットと遅延無効の信号送れるようになり、なおかつGC1000の非常停止ボタンの状態を受信できるようになります。

PROGRAM MAIN
VAR
bReset :BOOL;
bDisableDelay :BOOL;
bESTOPStatusON :BOOL;

bLampStatus :BOOL;
bESTOPStatusOFF :BOOL;
bOperationStatusRUN,bOperationStatusStop:BOOL;
bOperationStatusNormal,bOperationStatusAbNormaal:BOOL;
ModelInformation:USINT;
OperationTime :UDINT;

GC1000CommOK :BOOL;
GC1000DiagOK :BOOL;

END_VAR


GC1000CommOK:=GVL.PNIOState=0;
GC1000DiagOK:=GVL.PNIODiag=2;

GVL.OutputComm[1].bData.7:=bReset;
GVL.OutputComm[4].bData.6:=bDisableDelay;

bLampStatus:=GVL.InputComm[2].bData.0;
bESTOPStatusON:= NOT GVL.InputComm[5].bData.5;
bESTOPStatusOFF:=GVL.InputComm[5].bData.5;

bOperationStatusRUN:=GVL.OperationStatus.0;
bOperationStatusStop:=NOT GVL.OperationStatus.0;

bOperationStatusAbNormaal:=GVL.OperationStatus.0;
bOperationStatusNormal:=NOT GVL.OperationStatus.0;

ModelInformation:=GVL.ModelInformation;
OperationTime:=GVL.OperationTime/10;

Link Variables

今度はPLCの変数とProfinetのProcess DataをMappingします。

GC1000>GC-1000 Status>Model information of Main Controllerを右クリック>Change Linkします。

先程GVLで定義した変数が選択できようになります。

GC1000とEL6631の通信状態を取得するため、GC1000>InputsにあるPnIoBoxStateとPnIoBoxDiagをMappingしましょう。

Communication Input/Output>にあるCommunication outputのProcess データをGVLで定義した変数とMappingしましょう。

Communication Input/Output>にあるCommunication InputのProcess データをGVLで定義した変数とMappingしましょう。

他の変数Mappingについては詳しく説明しませんので。

Activate

Activate ConfigurationのボタンをクリックしHardware ConfigurationをRuntime にDownloadしましょう。

Okで進みます。

OkでTwinCATをRun Modeに再起動します。

Login

LoginボタンをクリックしプログラムをTwinCAT RuntimeにDownloadします。

Yesで進みます。

Start

最後はStartボタンをクリックしRuntimeをStartしましょう。

Assign Device Name

Profinetネットワークを立ち上げるためにデバイス名を振り分ける必要があり、EL6631をクリックします。

PROFINET>Scan PNIO Devicesボタンをクリックします。

Scan Deviecsの画面が表示され、いまEL6631と同じネットワークにある機器を検索し一覧できます。

今回記事で使用するGC1000はプロジェクト内で”gc1000”とい名前が設定されましたので、StationnameのFieldに”gc1000”を入力し”Set Stationname”をクリックし、GC1000のデバイス名を設定します。そして名前を設定する際には、PROFINETに準拠した文字のみを使用できます。

Done!次はSet IP ConfigurationのボタンをクリックしGC1000のIPアドレスを設定します。

Result1‐ Error

ですが、GC1000とEL6631のProfinet 通信が確立できませんでした。WiresharkからPacketを調べると、Error in Parameter Frame IDというメッセージがPNIO-CMのPackageにあります。

GC1000をクリックし、Device Tabを開きます。

“InstanceID “と “FrameID “もこの画面で変更できますが、基本ほとんどのアプリケーションではデフォルト設定でOkです。でも例外的な場合もあります。(例えば、RTClass1のUnicastは0xC000~0xFAFF)

今回の記事ではFrameIDを0xC000に設定します。

Result-2 OK

Done!WireSharkにPNIOのPacketがありました。

こちらの動画ではEL6631からProfinet経由でGC1000の信号をリセットします。

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

シェアする

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

フォローする