Pilz#Part06_Build A Ethernet/IP Adapter and connect with TwinCAT/Mitsubishi

Pilz PSS4000 紹介の第6話です。前回Resource global variablesのResource global variables・VAR_TEMP・Instruction listについて紹介しましたが、Pilzを使用するときよくあるのはESTOPやDoor Switchなどの状態を上位のPLCに送信します。PilzはProfinetかEthernet/IPの機能もありますので、今回はEthernet/IP Adpaterを立ち上げ、Beckhoff TwinCAT3と三菱のRJ71EIP91 Ethernet/IP モジュールのScannerとデータ交換できるまでの手順を1から説明します。よろしくお願いします。

Thanks!

この記事が出来上がるのはベッコフ日本法人ベッコフオートメーション株式会社さま・Pilz Japanさまから機材を貸してくださったおかけです。誠にありがとうございます。

ベッコフ日本法人ベッコフオートメーション株式会社

IPC6920-005はベッコフ日本法人ベッコフオートメーション株式会社さまが貸してくださったものです。Beckhoff Automationは1980 年会社設立、PCベースの制御技術をベースにしたオープンオートメーションシステム導入の先頭に立つドイツ企業です。

ベッコフ日本法人ベッコフオートメーション株式会社は、2011年に横浜に本社、2017年に名古屋オフィスを設立しました。

こちらはベッコフ日本法人ベッコフオートメーション株式会社様のホームページです。

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

https://www.beckhoff.com/ja-jp/

PILZ

PILZは安全およびオートメーション技術のソリューションでトータルソリューションサプライヤとしてのFA現場を支え、人の安全だけではなく、機械、および環境の安全を保証し、機械や設備をいかに安全に稼働させます。ピルツは全世界に42の現地法人や支社を設置し、包装、自動車産業、ロボットアプリケーション、さらに風力発電、鉄道技術など様々な分野で活躍しています。

Office:

ピルツジャパン株式会社

〒222-0033

横浜市港北区新横浜3-17-5

いちご新横浜ビル 4階

HP

https://www.pilz.com/ja-JP

Reterence Link

Pilz#Part05_Resource Global Variables
Pilz#Part01_Let’s start with PSS4000 PSSu PLC!
Pilz#Part02_Your First PSS4000 PLC Program
Pilz#Part03_Your First PSS4000 Safety PLC Program
Pilz#Part04_ESTOP Application With FS_EmergencyStop

Ethernet/IP With PSS 4000

安全ではないアプリケーションではEthernet/IP Adpaterを立ち上げ他のScannerからアクセスすることができます。PilzのPS4000ではこのような機能がSupportします。

  • Etherenet/IP ScannerとImplicit message、Port2222で周期IOデータ交換
  • Explicit Message ServerとしてExplicit messageでExplicit データを交換、そして以下のObjectがSupportします。
    • 0x01 Identity Object 
    • 0x02 Message Router Object 0x02
    • 0x04 Assembly Object 
      • Output Assembly Object Instance
      • Input Assembly Object Instance
    • 0x06 Connection Manager Ob
    • 0xF5 TCP/IP Object
    • 0xF6 Link Object

0x04 Assembly Object

Assembly Object 0x04 はPilz のEthernet/IP Adapterと他社のEthernet/IP Scanner(今回の記事ではBeckhoff TwinCAT3と三菱のRJ71EIP91)IOデータ交換するときに使用するAssembly Objectです。Pilz PLCではそのProcess DataのことをScanner目線から”Inputs”と”Output”でデータの交換方向を表現して、Output Assembly Object Instanceは”Scanner Output Assembly Object Instance”、Input Assembly Object Instanceは”Scanner Input Assembly Object Instance”になります。

Output Assembly Object Instance

Scanner Output Assembly Object InstanceはScanner側のOutputデータになり、Pilz側のInputになります。そのデータ交換サイズは可変なので、Scanner側でPilz のEthernet/IP Adapterを構築するときは交換サイズをあわせてください。

PilzのEthernet/IP EditorからVirtual Modules をInsertしAdapterを構築できす。(16IX、IB、IW 、IDなど)

Attribute ID

Attribute IDNameDescription
1Not SupportedNot Supported
2Not SupportedNot Supported
3DataScanner側のOutputデータ
4Sizeそのデータサイズ

Virtual Module

ModuleData TypeApplication
16IXARRAY[0..15] OF BOOLVirtual Ethernet/IP bit module長さ16BitのBool配列
IBAnARRAY[0..(n-1)]OF BYTEVirtual Ethernet/IP Byte Array Module長さNのByte配列、N=2,4,8,16,32,64OBA2なら、ARRAY[0..(1)]OF BYTEになる。
IWWORDVirtual Ethernet/IP Word Array Module
OWAnARRAY[0..(n-1)OF WORDVirtual Ethernet/IP Word Module長さNのWord配列、N=2,4,8,16,32,64OBW2なら、ARRAY[0..(1)]OF WORDになる。
ODDWORDVirtual Ethernet/IP DWORD Array Module

Input Assembly Object Instance

Scanner Input Assembly Object InstanceはScanner側のInputデータになり、Pilz側のOutputになります。そのデータ交換サイズは可変なので、Scanner側でPilz のEthernet/IP Adapterを構築するときは交換サイズをあわせてください。

PilzのEthernet/IP EditorからVirtual Modules をInsertしAdapterを構築できす。(16OX、OB、OW 、ODなど)

Attribute ID

Attribute IDNameDescription
1Not SupportedNot Supported
2Not SupportedNot Supported
3DataScanner側のInputデータ
4Sizeそのデータサイズ

Virtual Module

ModuleData TypeApplication
16OXARRAY[0..15] OF BOOLVirtual Ethernet/IP bit module長さ16BitのBool配列
OBAnARRAY[0..(n-1)]OF BYTEVirtual Ethernet/IP Byte Array Module長さNのByte配列、N=2,4,8,16,32,64OBA2なら、ARRAY[0..(1)]OF BYTEになる。
OWWORDVirtual Ethernet/IP Word Array Module
OWAnARRAY[0..(n-1)OF WORDVirtual Ethernet/IP Word Module長さNのWord配列、N=2,4,8,16,32,64OBW2なら、ARRAY[0..(1)]OF WORDになる。
ODDWORDVirtual Ethernet/IP DWORD Array Module

Implementation-Pilz Side

Download the EDS Files

下記のLINKからPilz PSSU PLCのEDS FileをDownloadしてください。

https://www.pilz.com/en-INT/eshop/Controller/PLC-controllers/PSSuniversal-controllers/PSSuniversal-PLC-Controller/c/0010200208701480NB

Configure the Ethernet/IP Adapter

Hardware configuration>Your Device>EtherNet/IP Adapterをクリックします。

Pilz CPUのEthernet/ip Adapter構築画面が表示されました。

Scanner Output

まずScanner Output側から構築します。Add Scanner Outputをクリックします。

Instance No 100のScanner Output Assembly Object Instanceが追加されました。

Mappings

Ethernet/ip IDE下にVirtual Moduleを追加できます。

16IXを追加してみます。16IXを選び>Number of modules ”1”入力しAddします。

Virtual Slot0に16IXが追加されました!

同じ操作でSlot116Anを挿入してみます。

Number Of elementsを4にしAddします。Virtual Slotが1はData Length4で、Start Byteは2から始めますね。4はその配列の長さです。Virtual Slotは16 Bitなので、Data Lengthの長さは2で、0から1までになります。

一番下に使用できるBytes数といま占有されたByte数も一覧できます。

Scanner Input

先と同じ操作でAdd Scanner InputでScanner Input Assemblyを追加します。

出力のVirtual Slotも同じ操作で追加しましょう。

Global

Resource global variablesでGlobal変数を作成します。

このように先のStepに定義したVirtual Slotに合わせて変数を追加しましょう。

Build

Build>Build AllでProjectをコンパイルしましょう。

IO Mapping

Ethernet/ip変数とUser Programを紐つけます。

INPUTとOUTPUTをResource global variablesと繋がります。

よし、これでOKです。

Program 

POU2

POU2でGlobal variablesにアクセスするためにVAR_EXTERNALを定義します。

中のFS_EmergencyStop状態をそのままVAR_EXTERNALの変数に出力します。

POU1

次は転送用のプログラムを作成します。

同じくVAR_EXTERNALにGlobal variablesをアクセスするので、変数を定義してください。

プログラムはFS_EmergencyStopの状態を転送したり、Dummyのデータを送信したりします。

Status

Communication Error

Normal Status with EIP Connection

https://youtube.com/shorts/RkULzk9kF9w

Implementation-1

Implementation1はPilzとBeckhoff IPC C6920と接続してみます。

Configure Ethernet/IP Scanner

Add Ethernet/IP Scanner

I/O>Devices>Add New Itemします。

Ethernet/IP > Ethernet/IP Scannerを選び>Okで追加します。

もしDriveがインストールされてないならDevice Found Atが空なので、とりあえずOkで閉じます。

Install Driver

Real-Time Network adpaterをインストールします。AdapterのTabでCompatible Devicesをクリックします。

Yesですすみます。

OSにあるNetowork Adapterを一覧できます。

今回私はUSB>LANの変換器を使用しますので、適切のDriveを選び>Installで進みましょう。

Installで進みます。

Done!

Setup the Scanner Adapter

Searchで使用可能なNetwork Adapterを設定します。

Done!

Configure IP

Settings TabからEthernet/ip ScannerのIP・Subnetを設定します。

Done!

Configure Task

Sync TaskからCreate New I/O Taskで新しいTaskを作成します。

Task名を入力し、OKします。

Cycle ticksは実際のアプリケーションに合わせて設定しましょう。

Add PLC

PLC選び>右クック>Add new Itemします。

Standard PLC Projectを選び>Addで新しいPLC追加します。

Done!

ADD GVL

Pilz CPUと接続するためのProcess IOを定義します。GVLs>Add>Global Variable Listします。

GVLの名前を入力しOpenします。

Done!

そしてProcess IOを定義してください。

Main Program

プログラムはPilzからもらったデータをESTOP状態を取得し、なおかつDummyデータをPilzに返します。

PROGRAM MAIN
VAR
ESTOPEnable:BOOL;
ESTOPDiagReadyReset:BOOL;
ESTOPDiagReadyForTest:BOOL;
ESTOPDiagSwitchError:BOOL;
ESTOPInputDataVaild :BOOL;
ESTOPLAMPOutput :BOOL;
ButtonLAMPOuput :BOOL;

DataFromPilz_ByteArray :ARRAY[0..3] OF BYTE;
DataFromPilz_Word :WORD;
DataFromPilz_WordArray :ARRAY[0..3] OF WORD;
DataFromPilz_DWord :DWORD;
DataToPilz_Word :WORD;
END_VAR

//Input Data
//Bool Array
ESTOPEnable :=GVL.inData[2].0;
ESTOPDiagReadyReset :=GVL.inData[2].1;
ESTOPDiagReadyForTest :=GVL.inData[2].2;
ESTOPDiagSwitchError :=GVL.inData[2].3;
ESTOPInputDataVaild :=GVL.inData[2].4;
ESTOPLAMPOutput :=GVL.inData[2].5;
ButtonLAMPOuput :=GVL.inData[2].6;

//Bye Array
MEMMOVE(
destAddr:=ADR(DataFromPilz_ByteArray)
,srcAddr:=ADR(GVL.inData[4])
,n:=4
);

//Word
MEMMOVE(
destAddr:=ADR(DataFromPilz_Word)
,srcAddr:=ADR(GVL.inData[8])
,n:=2
);
//Word Array
MEMMOVE(
destAddr:=ADR(DataFromPilz_WordArray)
,srcAddr:=ADR(GVL.inData[10])
,n:=8
);
//DWord
MEMMOVE(
destAddr:=ADR(DataFromPilz_DWord)
,srcAddr:=ADR(GVL.inData[18])
,n:=4
);

//Output Data
//Bool Array
GVL.OutData[0]:=16#FF;
GVL.OutData[1]:=16#1C;
//Byte Array
GVL.OutData[2]:=16#BB;
GVL.OutData[3]:=16#0A;
GVL.OutData[4]:=16#12;
GVL.OutData[5]:=16#9D;
//Word
DataToPilz_Word:=16#8382;
MEMCPY(
destAddr:=ADR(GVL.OutData[6])
,srcAddr:=ADR(DataToPilz_Word)
,n:=2
);

Build

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

Configure With EDS File

Install the EDS File

まずEDS FileからEthernet/ip Networkを構築します。先程DownloadしたEDS FileをTwinCAT/3.1/Config/io/EthernetIPに入れてください。

Add Adapter 

Scannerを選び>右クリック>Add New Itemします。

Pilz PSS4000を選択し、Okします。

Pilz CPU Ethernet/ip Adapterが追加されました。

Change IP

Adapterを右クリック>Change IP AddressでPilz AdapterのIPを変更します。

Pilz実機に合わせて設定しましょう。

Done!BoxのIconにある?Markも消えました。

Add IO

Pilz Adpaterに周期IO Connectionデータを追加します。

Box>右クリック>Append IO Connection>CyclicIoConnectionします。

EDS Fileに沿ってIO Connectionを追加しますか?Yesで進みます。

Connectionが追加されました。

Configure the Connections

先程のConnectionをダブルクリックし、Connectionの細かい設定を行います。

Input Length

Input Dataの長さはDefaultは10 Bytesです。 

実際ScannerInput Assemblyのデータ数にあわせて行きましょう。

Output Length

Output Dataの長さはDefaultは6 Bytesです。 

実際ScannerOutput Assemblyのデータ数にあわせて行きましょう。

Link INPUT

Process InputとUser Programの変数とLinkします。右クリック>Change Link..します。

先程GVLで定義した変数とLinkしましょう。

Link Output

Process OutputとUser Programの変数とLinkします。右クリック>Change Link..します。

先程GVLで定義した変数とLinkしましょう。

Download

Activate ConfigurationでHardware configurationをRuntimeにDownloadします。

OKでConfigurationをDownloadします。

RuntimeをRun Modeに切り替えます。

Start

User ProgramをDownloadします。

Yesで進みます。

Result

まずState変数から接続状態を確認しましょう。

0=なにエラーなし、接続成功ですね。

Pilz CPUからのデータも届きましたね。

Output DataもPilz CPUに届くはずです!

Configure without EDS File

次はEDS Fileなしで、TwincatからGenericの方法でEthernet/ip Networkを構築します。

Disable

まず先程設定したAdapterをDisableします。

よし、これでOK。

Add Adpter

今度はGeneric EtherNet/IP Slaveを選び>Okします。

Generic EtherNet/IP Slaveが追加されました。

Change IP

Boxを右クリック>Change IP Addressします。

Add Connections

Generic EtherNet/IP Slaveを右クリック>Append IO Connection>Default(Without EDS)で進みます。

Connectionが追加されました。

Configure Connections

先と同じく接続情報を設定する必要があります。

TwincatのConnection Portはつまり接続するInstance番号です。

Scanner Input AssemblyはInputsのConnection Port(101)、Scanner Output AssemblyはOutput Port(100)になります。

よし、これでOKです。

Add Input Data

次はInput Dataを追加します。Pilzで8Bytesを構築しましたよね。

Create Array Typeをクリックします。

配列を作成し、Okで完了します。

Done!

Add Output Data

Outputも同じような操作で変数を追加します。Outputs>右クリック>Add New Itemします。

長さ8Bytesの配列を作成します。

Done!

Link Input

Inputs変数を右クリック>Change Link..でUser Programの変数と繋がりましょう。

Link Output

Outputs変数を右クリック>Change Link..でUser Programの変数と繋がりましょう。

Result

Stateから接続結果を確認します。

0なら接続問題ありません。

Pilz CPUからのデータも届きましたね。

Output DataもPilz CPUに届くはずです!

Implementation-2

Implementation2はPilzとRJ71EIP91と接続してみます。

Mels

Add New Project

GXWorks3を起動し、Project>Newで新しいプロジェクトを追加します。

今回記事で使用するのはR00でSeriesをRCPU、TypeはR00、Program Language はSTでOkします。

プロジェクトが新規作成されました。

Insert RJ71EIP91 Module

次はRJ71EIP91モジュールをインストールし、Parameter>System Parameterをクリックします。

Slot0 に…のボタンをクリックします。

Rj71を検索します。

RJ71EIP91を選び>Okします。

もう一度OKでRJ71EIP91をProjectにInsertする。

Done!

Configure IP Address

RJ71EIP91のIPアドレスを設定します。Module Information>RJ71EIP91をクリックします。

Basic Settingを開きます。

IP Address Settingの赤枠のところをダブルクリックします。

IP Address・Subnet Mask・Default Gatewayをアプリケーションに合わせて設定してあげてください。

今回は192.168.1.241/24にします。

Basic Program

こちらは基本のプログラムです。FlagSend.uiConnectionNoとFlagReceive.UiConnectionNoを2に変更したら、Connection2のデータにアクセスするようになります。

実際、Connection番号はツールの隣に[001],[002]のように表示されています。

DUT_RJ71EIP91_Flags

こちらはClass1Set/ClassGetのFunction Blockを呼び出すときのInput/Outputパラメータで、一つずつ定義するのは面倒なので、構造体でまとめて宣言します。

MAIN

こちらはMainプログラムです。いまは200ms一回Function Blockを呼び出すようになっています。

//Ready
EIPModuleReady:=
NOT EIP91_1.bSts_ModuleError AND EIP91_1.bSts_ModuleReady ;

//Set the Request
EIP91_1.bSet_CommunicationStartupRequest:=EIPModuleReady;

//Auto Reset
EIP91_1.bSet_ModuleErrorClearRequest:=EIP91_1.bSts_ModuleError;

//Connection Numbers
FlagsSend.iuConnectionNo:=1;
FlagsReceive.iuConnectionNo:=1;

//Reflesh Time
RefleshTime:=T#200ms;

//Send Reflesh
TON1(
IN:= NOT TON1.Q AND EIPModuleReady AND NOT EIP91_1.bnSts_Class1Error_Connection_D[2]
,PT:= RefleshTime
,Q=>FlagsSend.ibEN
);

//Receive Reflesh
TON2(
IN:= NOT TON2.Q AND EIPModuleReady AND NOT EIP91_1.bnSts_Class1Error_Connection_D[2]
,PT:= RefleshTime
,Q=>FlagsReceive.ibEN
);

//Send
DataArraySend[0]:=16#F0F0;
DataArraySend[1]:=16#1567;
DataArraySend[2]:=16#91AC;
DataArraySend[3]:=16#E134;

DataSend(
i_bEN:= FlagsSend.ibEN
,i_stModule:= EIP91_1
,i_uConnectionNo:= FlagsSend.iuConnectionNo
,i_uOutputData:= DataArraySend[0]
,o_bENO=> FlagsSend.oENO
,o_bOK=> FlagsSend.obOK
,o_bErr=> FlagsSend.obErr
,o_uErrId=> FlagsSend.ouErrId
,o_uStatusId=>FlagsSend.ouErrId
);

//Receive
DataReceive(
i_bEN:= FlagsReceive.ibEN
,i_stModule:= EIP91_1
,i_uConnectionNo:= FlagsReceive.iuConnectionNo
,o_bENO=> FlagsReceive.oENO
,o_bOK=> FlagsReceive.obOK
,o_bErr=> FlagsReceive.obErr
,o_uErrId=> FlagsReceive.ouErrId
,o_uStatusId=> FlagsReceive.ouStatusId
,o_uInputData=> DataArrayReceive[0]
);

Device_0_ESTOP_Enable:=DataArrayReceive[1].0;
Device_0_ESTOP_DiagReadyForReset:=DataArrayReceive[1].1;
Device_0_ESTOP_DiagReadyForTest:=DataArrayReceive[1].2;
Device_0_ESTOP_DiagSwitchError:=DataArrayReceive[1].3;
Device_0_ESTOP_InputDataNotVaild:=DataArrayReceive[1].4;
Device_0_ESTOP_LAMP_OUTPUT:=DataArrayReceive[1].5;
Device_0_RESET_Button_LAMP_OUTPUT:=DataArrayReceive[1].6;



;

Startup Configuration tools

GXWORKS3に戻り、Etherent/IP Configuration Toolを起動します。

しばらく待ちます…

Configuration Toolが起動されました。

Configure RJ71EIP91 IP

まずはRJ71EIP91本体を設定します。

IPアドレスはProjectに合わせて設定しましょう。

Configure by EDS

1つ目の実装はPilz HPからDownloadしたEDS FileをインストールしEthernet/IP Networkを構築します。

Install the EDS File

AddでEDS Fileをインストールします。

Next>で進みます。

EDS FileのDirectoryを設定し、Next>で進み、インストールすればOKです。

Insert the Pilz PLC Adapter

Ethernet/IP Devices>Pilz GmbH & Co>Communications Adapter>Pilz PLC Reveision 1.8を選んでEthernet/IP ネットワークに追加します。

Ip address

IPアドレスは実際の実機に合わせてください。

Configure the Input Data Size

次はConnections Tabから接続の細かい情報を設定します。

Input Sizeは22Bytesでその22ByteはPilz 側のScanner Input Assembly Object Instanceを対象とします。

Configure the Output Data Size

Output Sizeは8Bytesでその8ByteはPilz 側のScanner Output Assembly Object Instanceを対象とします。

Configure the Instance Number

次はInstance番号を設定します。

Input Instance O->Tは100でPilzのScanner Output Assembly Object Instanceで、Output Instance T->Oは101でPilzのScanner Input Assembly Object Instanceの紐付けです。

Download

ConfigurationをDownloadします。Online CommandでToolsとModuleを接続します。

Download the current configuration in the module でConfigurationをモジュールにDownloadします。

Result

よし、CIP CM Packageもきて、PilzからForward OpenにSuccessの返答が来ましたね!

Configure by Generic EDS

次はEDS FileなしのGeneric EDS FileからEthernet/IP Networkを構築します。

Disable

先程実装したConnectionを右クリック>Enable/Disable DeviceでConnectionを無効にします。

Install the Generic EDS

Device Library>Advanced Generic EDSを選び、Ethernet/IP Networkに追加します。

Ip address

IpアドレスもPilzの実機に合わせてください。

Connections Tabから接続の細かい設定を行います。

Configure the Input Data Size/Instance

Input instance 101というのはPilz からみるとScanner Input Assembly Object Interfaceに対応します。

Output Instance 100 というのはPilz からみるとScanner Output Assembly Object Interfaceに対応します。

Configure the Output Data Size/Instance

Input Size 22 BytesはPilzのScaner Input Assembly Object Interfaceの101、そのInstance101は22Bytesになります。

Output Size 22 BytesはPilzのScaner Output Assembly Object Interfaceの100、そのInstance100は8Bytesになります。

Download

ConfigurationをDownloadします。Online CommandでToolsとModuleを接続します。

Download the current configuration in the module でConfigurationをモジュールにDownloadします。

Result

よし、CIP CM Packageもきて、PilzからForward OpenにSuccessの返答が来ましたね!

データもちゃんとPilzからもらいましたね!

三菱側がPilzにもちゃんとデータを送信しました。

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

シェアする

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

フォローする