OMRON#Turck TBIP-L5-4FDI-4FDXとCIP Safetyで繋がってみよう

今回の記事ではOMRONのNX102-1220とSL5700の組み合わせを利用し、Turck社のTBIP-L5-4FDI-4FDXにCIP Safety とEthernet/IP 接続を確立させ・またTurckのSafety EDS Fieプログラムの組み方など0から説明します。

さ、はじめよう!

Reference Video

TBIP−L5−4FDI−4FDX?

TBIP-L…-4FDI-4FDXはEtherNet/IP経由のCIP Safety用セーフティブロックI/Oモジュールです。このデバイスには、ライトバリアや非常停止ボタンなどの異なる安全センサを接続するための4つの2チャンネルデジタル安全入力(FDI)があります。 さらに4つの安全チャンネル(FDX)は、入力(FDI)または出力(FDO)として自由に使用できます。

また、安全I/Oとその機能の設定はソフトウェアツールTurck Safety Configuratorで行います。

TBIP-L…-4FDI-4FDXは、安全なセンサーとアクチュエーターを接続するための8個のM12コネクターがあります。電源電圧の接続には、4ピン7/8”コネクタ(TBIP-L4)、5ピン7/8”コネクタ(TBIPL5)、または5ピンLコードM12コネクタ(TBIP-LL)をご利用いただけます。

IP Addressing

TBIP-L…-4FDI-4FDXは 2 つの IP アドレスをサポートしていて、セカンダリ IP アドレスが必要かどうかは、使用するアプリケー ションと CIP Safety Scanner によって異なります。

メインIPアドレスの最初の3バイトは、装置のウェブサーバー経由で設定できます(Default状態はIPアドレス:192.168.1.254)。IPアドレスの最後のバイト メインIPアドレスは、装置のロータリーコードスイッチやTurckサービスツール、またはウェブサーバー経由で設定できます。

こちらはロータリーコードスイッチの意味になります。

Input Data

Ethernet/IP Connectionの入力データMappingになります。

Output Data

Ethernet/IP Connectionの出力データMappingになります。

Unlock Safe Unit

セーフユニットのロックを解除するBit信号は、立ち下がりエッジによって応答する。

Implementation

Turck Side

Access WebServer

Turck CIP SafetyモジュールのWeb serverにアクセスします。

Login

右にあるLoginボタンでLoginしましょう。

Default Passwordはpasswordです。

Done!Logintしたら設定できる項目も増えました。

Factory Reset

最初はCIP SafetyモジュールをFactory Resetします。

Station Configuration>Reset to Factory Defaultsをクリックします。

Etherent/IP Memory Map

こちらはTurck CIP SafetyモジュールのNormal Ethernet/IP 接続に使用するInstance番号やメモリMappingです。

Install the Tools

今度は下記のサイトからTurckのSafety ConfiguratorをDownloadしてください。

注意するのはソフトウエアのDownloadするにはクーポンコードが必要で、ローカルのTurck Officeに問い合わせしてください。

https://www.turck.jp/ja/product/SW_Turck_Safety_Configurator

Install.exeをダブルクリックしソフトウエアのインストレーションを開始します。

言語を選び、Installで進みます。

しばらく待ちます…

Next>で進みます。

ライセンスに同意し、Nextで進みます。

Nextで進みます。

インストレーションを開始します。

しばらく待ちます…

Done!

インストーラーを閉じます。

次はライセンスの入力が求められ、Yesで進みます。

Coupon Codeを選び、先程ソフトウェアをDownloadしたときで使用したCoupon Codeを入力しましょう。

しばらく待ちます…

Done!

Create your project

TurckのSafety Configuratorを起動します。

File>New>New Workspaceで新しいWorkspaceを作成します。

Workspaceの保存先を設定します。

Checkを入れてOKで進みます。

プロジェクトで使用するSafety IO Blockを選びます。

今回使用するのはTBIP−L5−4FDI−4FDXなので、直接先程のリストから選ぶか、もしくはOrder Numberに沿ってデバイスを選んでもOKです。

TBIP−L5−4FDI−4FDXを選び、Okで進みましょう。

OKで確定します。

次はSafety IOの基本設定画面に変わります。

Local I/OsはSafety IO Blocksの各IO Portの設定を行うことができます。

今回の記事ではすべてDefautlのままにします。

今度は”Show Advanced Settings”のCheckboxを入れます。

Properties画面にCIP Safety関連の設定も表示され、SCID Time Stampなども設定できますが、今回の記事では使用しません。

すべての設定を完了したらOkで進みます。

プロジェクトを保存します。

Commissioning Wizard

今度はTurck のCIP Safety Configuratorとデバイスを接続するため、Commissioning Wizardを起動します。

Next>で進みます。

Safetyプロジェクトの認証User NameとPasswordを設定することができます。

もちろん、そのStepは必ずではないので、必要のない場合はSkipしてください。

注意するのはUserとPassword設定した場合、Safety プロジェクトをDownloadする際、そのValidator名とPasswordが求められます。

最初は”No Connection”というエラーが表示されます。これはPCとデバイス間で接続するEthernet Interfaceがまだ設定されていないのが原因です。

Setup Interfaceをクリックします。

Interface Configuration画面が表示されます。

Ethernetを選択し>Search for deviceをクリックします。

Done!TurckのCIP Safety IO Moduleが見つかりました。そのModuleを選択し、Okで進みます。

最後はOkボタンをクリックしPCとデバイスを接続します。

YesでConfigurationを保存します。

Default Passwordを変更し、Okで進みます。

しばらく待ちます…

Done!

OKで進みます。

Moduleが再起動するので、しばらくお待ち下さい…

Finishをクリックします。

最後は変更したConfigurationを保存しましょう。

Assing Output

Turck CIP Safety IO BlockではCIP Safety とNormal Ethernet/IPにも自由に割り付けられる出力領域があり、アプリケーションによって上位に様々な状態をFeedbackできます。

Start>Output Assignmentで出力データを割り付けます。

このような出力割付表が表示されます。

CIP Safety

デバイスをCIP Safetyの出力として割り付けたい場合、CIP Safetyの欄を選び>右にあるFree Outputsのところにまだ使用されていないBit領域に割り付けましょう。

0-0は0Byte目の0Bit目、0-1は0Byte目の1Bit目のような形でBit単位でMappingできます。

Done!これでOKです。

いまTurckのCIP Safety IO Blockにある4つの入力Portの信号状態をCIP Safety の0-0、0-1、0-2、0-3とMappingしました。

Fieldbus Bit

今度はFieldbus Bitを割り付けます。こちらの領域はTurck Normal Ethernet/IP Instance104出力になります。下記の例ではFDI 0/1 の信号を”Fieldbus”に選択し、Free outputs欄に空きの領域(Word Offset0,Bit0)を設定します。

Done!

下図のようにWord Offset0,Bit0‐3まで割り付けました。

次はFDX 出力も同じようにFieldbus Bitに割り付けましょう。

Done!

最後はOutput devicesをアップデートしましょう。

Finally

こちらは今回記事で使用するCIP SafetyとFieldbus BitのMappingになります。

Safety Program

TurckのTBIP−L5−4FDI−4FDXはBlock IOとして使用するだけではなく、内部でもロジックを作成できます。内部ロジックを使用することにより、小さなアプリケーションはCIP Safety Scannerなくても複数のTBIP−L5−4FDI−4FDXでシステム構成ができます。また、分散制御することによって、CIP Safety Scannerが持つロジックが減り、将来他社のCIP Safety Scannerに切り替えることも簡単です。

Default上ではCIP Safety の入力Bit0の状態をそのままCIP Safety出力に繋がります(自動リセット)。

また、Turck Safety Configuratorはプログラムの作成ではDropとDragと線繋ぎみたいで完結しますので、プログラム知識はなくてもすぐアプリケーション構築できます。

今回はTBIP−L5−4FDI−4FDXにローカルロジックを作成しています。プログラムのFlowはFDI 0/1 がTrueになり>2秒のDelay待ち>最後はオムロンのFieldbus リセット信号のFalse>True>False信号変化によって出力FDX 8/9をTrueします。

Add Single Channel Safety 

信号FDI 0/1 の信号をMonitorしたいので、Single Channel SafetyをDropします。

Done!Single channel safety#1が追加されました。

NameはSafety Configurator上で該当するBlockの表示名で、Addressはモジュールを使用する安全入力アドレスを指定し、Inputはどちらの入力を使用するかを設定できます。

Add Switch-on delay

今回はDelay-On Timerを追加するため、Logic Devices>Switch-on delayをプロジェクトにDropします。

Done!

NameはOn-Delayの名前で、Delay Timeは定数で設定できます。

Add Monitoring Devices

次は安全出力のアンロック信号を構築していきます。Defaultのプロジェクトではすべて自動リセットなので、先程言った立ち下げ信号はみていません。

では、DefaultのAutomatic start部品を一旦削除しましょう。

次はStart Devices>Monitored start-deviceをプロジェクトに追加しましょう。

Add Fieldbus Bit

今度はアンロックするFieldbus bitを追加します。

Done!

次はEthernet/IP Connection経由でアンロックするFieldbus Bit番号を指定するため、先程追加したFieldbus 部品をダブルクリックします。

現在はFB0-0と設定されていますので、Fieldbus Word0、Bit Offset0に該当する意味です。

Finally

最後は下図のように部品を繋がりましょう。

Send Configuraiton

最後はプロジェクトをモジュールに転送しましょう。Start>PC->Monitorをクリックします。

また、Drop ListからプロジェクトのUploadの動作も可能です。

Yesで進みます。

先程設定したPasswordを入力しましょう。

しばらくまちます…

Done!

最後はValidatorとPasswordをもう一度入力しましょう。

しばらくまちます…

Done!

Go Online

Go lineでプロジェクトをMonitorします。

Done!

Omron Side

次はOmron側を構築します。

Reference Link

Omron#Pliz PSS u2 P0 F/S EIP2とCIP Safetyと繋ごう_Part1
Omron#Let’s Configure a CIP Safety Originator

Create EDS File

TurckのTBIP−L5−4FDI−4FDXモジュール Safety EDS Fileを作成します。

Vendor ID

Vendor IDは48になります。

Vendor Name

Vendor Nameは実際Sysmac StudioのEDS Libraryの整理や表示に影響されますので、できるだけ正しい情報を入力しましょう。

Product Type

Product Typeは100になります。

Product Type String

Product Type Stringは実際Sysmac StudioのEDS Libraryの整理や表示に影響されますので、できるだけ正しい情報を入力しましょう。

Product Code

Product Codeは20014になります。

Product Name

Product Nameは実際Sysmac StudioのEDS Libraryの整理や表示に影響されますので、できるだけ正しい情報を入力しましょう。

Revision

Major Revisonは3で、Minor Rervisionは1になります。

Safety Input

Input Assembly Instanceは1024、Output Assembly Instanceは1279で、Data Sizeは8Byteになります。

Safety Output

Input Assembly Instanceは1279、Output Assembly Instanceは1056で、Data Sizeは8Byteになります。

Configuration Instance

Configuration Instanceは1088になります。

Add CIPSafety Devices

次はEthernet/IP のNetworkに先程定義したTurck CIP Safetyモジュールを追加しましょう。

SNN Number

CIP Safetyを使用するにはデバイスにSafety Network Numberを設定する必要があります。

Sysmac Studioに設定されたSafety Network NumberをCopyし、

Turck CIP Safety モジュールのWeb Server>Network Configuration>SNN Numberのところに貼り付けてください。

Create Device Variable

今度はI/O Mapの画面からTurck CIP Safety のモジュールを選び>右クリック>Create Device Variableをクリックし自動で変数を生成します。

Done!

Add Ethernet/IP Connections

TurckのCIP SafetyモジュールはCIP Safety接続以外にもNormalのEthernet/IP接続も可能です。今回の記事ではCIP Safety通信とNormal のEthenret/IPを同時にOMRONのNX-SL5700とNX CPUを接続してみます。

Define Global Variables

Data>Global Variablesを開き、Global変数を定義します。

dataFromTurck とdataToTurckというByte配列を定義します。

Register Variables

先ほど定義した変数をEtherent/IPのProcess Dataとして登録します。

Install EDS File

Turck HPからDonwloadしたTBIP−L5−4FDI−4FDXのEDS Fileをインストールします。

Add Connection

TBIP−L5−4FDI−4FDXのTargetデバイスを定義し、Connectionsに追加しましょう。

Safety Program

こちらはオムロン側の安全プログラムです。ただTurckから

Normal Program

Data Types

Byte2Bool

こちらはByteの各BitをBool配列に分配できるように作ったUnionタイプです。

TURCK_CIPSafety_StationStatusWord

こちらはTURCK Etherent/IP Connection経由で取得できる、Turckモジュールの状態データの構造体です(Word offset 0)。

TURCK_CIPSafety_Status

こちらはTURCK Etherent/IP Connection経由で取得できる、Turckモジュールの状態データの構造体です(Word offset 1-3)。

TURKC_CIPSafety_CxStatus

こちらはTURCK Etherent/IP Connection経由で取得できる、Turckモジュールの状態データの構造体です(Word offset 4-7)。

TURCK_CIPSafety_ModuleStatus

こちらはTURCK Etherent/IP Connection経由で取得できる、Turckモジュールの状態データの構造体です(Word offset 9)。

TURCK_CIP

こちらの構造体は先程定義した構造体をさらにまとめた構造体になります。

Function

FC_GetCxStatus

こちらのFCではTurckモジュールのPort状態をByteデータから分解してきます。

In/Out
EN Input BOOL
iByte1 Input BYTE
udtCxStatus In/Out TURCK_CIPSafety_CxStatus
Internals
uByte2Bool Byte2Bool
Program
uByte2Bool.ByteData:=iByte1;

udtCxStatus.Normal:=uByte2Bool.BoolData[0];
udtCxStatus.WaitForInput:=uByte2Bool.BoolData[1];
udtCxStatus.TestInput:=uByte2Bool.BoolData[2];
udtCxStatus.InputError:=uByte2Bool.BoolData[3];
udtCxStatus.CrossCircuitCh0:=uByte2Bool.BoolData[4];
udtCxStatus.CrossCircuitCh1:=uByte2Bool.BoolData[5];
udtCxStatus.OutputOverload:=uByte2Bool.BoolData[7];

Function Block

FB_TURCKCIPSafety

こちらのFunction BlockはTurckモジュールとEthernet/IP Connection経由で取得した入力データ(19Bytes)を構造体に分解していきます。

In/Out
udtTURCK_CIP In/Out TURCK_CIP
iData         Input ARRAY[0..19] OF byte
Internals
uByte2Bool Byte2Bool
Program
uByte2Bool.ByteData:=iData[0];

//Station Status word
uByte2Bool.ByteData:=iData[0];//word0
udtTURCK_CIP.StationStatus.ModuleDiagnosticsAvailable:=uByte2Bool.BoolData[0];
udtTURCK_CIP.StationStatus.StationConfiguredChanged:=uByte2Bool.BoolData[3];
udtTURCK_CIP.StationStatus.OverCurrentIsys:=uByte2Bool.BoolData[5];
udtTURCK_CIP.StationStatus.OverVoltageV2:=uByte2Bool.BoolData[6];
udtTURCK_CIP.StationStatus.UnderVoltageV2:=uByte2Bool.BoolData[7];

uByte2Bool.ByteData:=iData[1];//word0
udtTURCK_CIP.StationStatus.OverVoltageV1:=uByte2Bool.BoolData[0]; //8
udtTURCK_CIP.StationStatus.UnderVoltageV2:=uByte2Bool.BoolData[1]; //9
udtTURCK_CIP.StationStatus.ModuleBusCoumLost:=uByte2Bool.BoolData[2]; //10
udtTURCK_CIP.StationStatus.ModuleBusError:=uByte2Bool.BoolData[3]; //11
udtTURCK_CIP.StationStatus.ForceModeEnabled:=uByte2Bool.BoolData[6]; //14

//Safety Status
uByte2Bool.ByteData:=iData[2];//word1 byte2,3
udtTURCK_CIP.SafetyStatus.ProtectiveMode:=uByte2Bool.BoolData[0];
udtTURCK_CIP.SafetyStatus.ConfigurationMode:=uByte2Bool.BoolData[1];
udtTURCK_CIP.SafetyStatus.UnKnownMode:=uByte2Bool.BoolData[2];

uByte2Bool.ByteData:=iData[4];//word2 byte4,5

uByte2Bool.ByteData:=iData[6];//word3 byte6,7
udtTURCK_CIP.SafetyStatus.NoMemoryStick:=uByte2Bool.BoolData[0];
udtTURCK_CIP.SafetyStatus.NoConfigurationAvailable:=uByte2Bool.BoolData[1];
udtTURCK_CIP.SafetyStatus.ConfigurationMismatch:=uByte2Bool.BoolData[2];
udtTURCK_CIP.SafetyStatus.CommunicationLoss:=uByte2Bool.BoolData[4];
udtTURCK_CIP.SafetyStatus.FateError:=uByte2Bool.BoolData[7];

uByte2Bool.ByteData:=iData[8];//word4 byte8
FC_GetCxStatus(
EN:=TRUE
,iByte1:=iData[8]
,udtCxStatus:=udtTURCK_CIP.SafetyCx[0]
);

uByte2Bool.ByteData:=iData[9];//word4 byte9
FC_GetCxStatus(
EN:=TRUE
,iByte1:=iData[9]
,udtCxStatus:=udtTURCK_CIP.SafetyCx[1]
);

uByte2Bool.ByteData:=iData[10];//word5 byte10
FC_GetCxStatus(
EN:=TRUE
,iByte1:=iData[10]
,udtCxStatus:=udtTURCK_CIP.SafetyCx[2]
);

uByte2Bool.ByteData:=iData[11];//word5 byte11
FC_GetCxStatus(
EN:=TRUE
,iByte1:=iData[11]
,udtCxStatus:=udtTURCK_CIP.SafetyCx[3]
);

uByte2Bool.ByteData:=iData[12];//word6 byte12
FC_GetCxStatus(
EN:=TRUE
,iByte1:=iData[11]
,udtCxStatus:=udtTURCK_CIP.SafetyCx[4]
);
uByte2Bool.ByteData:=iData[13];//word6 byte13
FC_GetCxStatus(
EN:=TRUE
,iByte1:=iData[11]
,udtCxStatus:=udtTURCK_CIP.SafetyCx[5]
);

uByte2Bool.ByteData:=iData[14];//word7 byte14
FC_GetCxStatus(
EN:=TRUE
,iByte1:=iData[11]
,udtCxStatus:=udtTURCK_CIP.SafetyCx[6]
);

uByte2Bool.ByteData:=iData[15];//word7 byte15
FC_GetCxStatus(
EN:=TRUE
,iByte1:=iData[11]
,udtCxStatus:=udtTURCK_CIP.SafetyCx[7]
);

uByte2Bool.ByteData:=iData[16];//word8 Byte16
udtTURCK_CIP.FieldbusBits[0]:=uByte2Bool.BoolData[0];
udtTURCK_CIP.FieldbusBits[1]:=uByte2Bool.BoolData[1];
udtTURCK_CIP.FieldbusBits[2]:=uByte2Bool.BoolData[2];
udtTURCK_CIP.FieldbusBits[3]:=uByte2Bool.BoolData[3];
udtTURCK_CIP.FieldbusBits[4]:=uByte2Bool.BoolData[4];
udtTURCK_CIP.FieldbusBits[5]:=uByte2Bool.BoolData[5];
udtTURCK_CIP.FieldbusBits[6]:=uByte2Bool.BoolData[6];
udtTURCK_CIP.FieldbusBits[7]:=uByte2Bool.BoolData[7];

uByte2Bool.ByteData:=iData[17];//word8 Byte17
udtTURCK_CIP.FieldbusBits[8]:=uByte2Bool.BoolData[0];
udtTURCK_CIP.FieldbusBits[9]:=uByte2Bool.BoolData[1];
udtTURCK_CIP.FieldbusBits[10]:=uByte2Bool.BoolData[2];
udtTURCK_CIP.FieldbusBits[11]:=uByte2Bool.BoolData[3];
udtTURCK_CIP.FieldbusBits[12]:=uByte2Bool.BoolData[4];
udtTURCK_CIP.FieldbusBits[13]:=uByte2Bool.BoolData[5];
udtTURCK_CIP.FieldbusBits[14]:=uByte2Bool.BoolData[6];
udtTURCK_CIP.FieldbusBits[15]:=uByte2Bool.BoolData[7];

uByte2Bool.ByteData:=iData[18];//word9 Byte18
udtTURCK_CIP.ModuleStatus.ModuleDiagnosticsAvailable:=uByte2Bool.BoolData[0];
udtTURCK_CIP.ModuleStatus.UnderVoltage2:=uByte2Bool.BoolData[7];

uByte2Bool.ByteData:=iData[18];//word9 Byte19
udtTURCK_CIP.ModuleStatus.UnderVoltage1:=uByte2Bool.BoolData[1];
udtTURCK_CIP.ModuleStatus.InternalError:=uByte2Bool.BoolData[2];
udtTURCK_CIP.ModuleStatus.IOAssistantForceMode:=uByte2Bool.BoolData[6];

MAIN

こちらはMainプログラムで、先程定義したFunction Blockを呼び出し、またFieldbus Bitの立ち上げ信号をTurckモジュールに送信し、安全アンロックします。

Download

最後はSafety プロジェクト・Normal プロジェクト・あとEthernet/IP Connection設定もNX CPUにDownloadし、電源をリセットしてください。

Result

Done!TurckモジュールとCIP Safety接続経由で安全入出力データをやり取りできました。

Normal Ethernet/IP 接続経由で非常停止の状態も取りました。

Turck Safety Configuratorソフトからも現在の入出力状態を監視できました。

こちらの動画はOMRON CIP Safety経由でTURCKモジュールを確認できます。

OMRON.CIP Safety Connection with TURCK Safety Blocks

こちらの動画でTurckモジュールの動作を確認できます。

OMRON.Normal Condition of SL5700 and Turck Safety IO

こちらの動画でOMRONの安全プログラム状態を確認できます。

OMRON.CIP Safety Connection with TURCK Safety Blocks Safety Program Side

Download EDS File

こちらのLinkからOMRON Sysmac Stuido用のTurck Safety EDS FileをDownloadできます。

https://github.com/soup01Threes/OMRON/blob/main/0030_4E2E_TBIP-L5-4FDI-4FD_16B9A185.eds

Download Project

こちらのLinkから記事のサンプルプロジェクトをDownloadできます。

https://github.com/soup01Threes/OMRON/blob/main/CIPSafety_TURCK.smc2

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

シェアする

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

フォローする