今回の記事では三菱IQ-R R00CPUとRJ71EIP91のEthernet/IP モジュールを使用し、TURCKのIO-Link MasterとEthernet/IP で接続します。
IO-Link デバイスはMurrelekronik・TURCK・Nass magent・Contrinexのものになります。
さ、はじめよう!
Reference Video
Reference Link
System architecture
IO-Link 通信には、少なくとも 1 つの IO-Link マスタと 1 つの IO-Link デバイス(センサやアクチュエータなど)が必要で、シールドされていない 3 線または 5 線標準ケーブルで相互接続されます。
IO-Linkに関する設定はコンフィグレーションツールを使うか、フィールドバスレベルで行うことができます。
IO-Link マスタは IO-Link デバイスと上位の制御システムとの接続を確立し、注意するのはIO-Link マスタは複数の IO-Link ポートを持つことができます。各ポートに接続できる IO-Link デバイスは 1 つだけです。
Combining IO-Link devices with different specifications
仕様 V1.0 のデバイスだけが、仕様 V1.0 の IO-Link マスタで操作できる。
逆に仕様 V1.0 および V1.1 のデバイスは、仕様 V1.1 の IO-Link マスターで操作できます。
Data storage mode
データストレージモードでは、再構成の必要なく IO-Link デバイスを交換することができる便利な機能です。
IO-Link マスタまたは IO-Link デバイスは、前回の設定で設定されたデバイスパラメータを保存でき、IO-Link マスタと IO-Link デバイスのパラメータデータメモリは同期されます。
データ保存モードが有効になっている場合、デバイスが交換されると、マスタは保存されているデバイスパラメータを新しいデバイスに書き込みます。新しいコンフィギュレーションを実行することなく、アプリケーションを再起動することができます。
注意するのはデータ保存モードは IO-Link 仕様 V1.1 に準拠したデバイスでのみ利用可能。
TBEN-L4-8IOL4
TBEN-L4-8IOL4保護等級IP65/IP67/IP69Kの完全密閉型ハウジングで設計されています。
- TBEN-L…-8IOL
- IO-Link デバイスを接続するための8つの IO-Link ポートが揃えてます。
- コネクタ C0 ~ C3 の IO-Link ポートは、クラス A ポートになります。
- コネクタ C4 ~ C7 の IO-Link ポートは、クラス B ポートになります。
また、 8 つの IO-Link チャンネルに加えて、4 つのユニバーサルデジタル DXP チャンネル (PNP) が利用可能です。4つの IO-Link チャネルは独立してパラメータ設定でき、IO-Link モードまたは SIO モード(DI)で動作できます。
さらにTURCKのマルチプロトコルデバイスは、自動プロトコル検出により、PROFINET、EthernNet/IP、Modbus TCPで動作させることができます。
Operating principle
IO-Link Master TBEN-L…-8IOL は、IO-Link センサとアクチュエータを上位の制御システムに接続可能で、このデバイスはEthernetインターフェースとIO-Linkマスター機能(クラスAおよびクラスBポート)を持つフィールドバスに依存しないI/Oエレクトロニクスを備えています。
Ethernet インタフェースを介して、IO-Link マスタは EtherNet/IP デバイス、Modbus TCP スレーブ、または PROFINET デバイスとしてEthernet ネットワークに接続されます。
デバイスが動作中、プロセスデータは Ethernet と IO-Link の間で交換されます。
Multiprotocol technology
TBEN-L4-8IOL4は、以下の3つのイーサネット・プロトコルで使用できる:
- Modbus TCP
- EtherNet/IP
- PROFINET
デバイスに必要なイーサネット・プロトコルは、自動検出または手動で決定できます。
Automatic protocol detection
マルチプロトコル・デバイスは、ユーザーの介入なしに、EtherNet/IP デバイス、Modbus TCP スレーブ、または PROFINET デバイスすべてで操作できます。デバイスおプロトコルが検知されたあと、他のプロトコルからのデバイスへのアクセスは読み取り専用となる。
Manual Protocol Selection
ユーザーはプロトコルを手動で定義することもできます。この場合、デバイスは選択されたプロトコルに固定されます。他のプロトコルでは、デバイスは読み取り専用でしかアクセスできません。
Simple IO-Link Device Integration (SIDI)
TURCKの Simple IO-Link Device Integration (SIDI) は、PROFINET エンジニアリングシステムにおける IO-Link デバイスの取り扱いを簡単にし、デバイスはすでにマスタのGSDMLファイルに統合されています、
ユーザはProfinet IO Controllerを構築するソフトからデバイスを選択し(例えばSiemens のTIA)からデバイスを選択し、デバイスがモジュール式I/Oシステムのサブモジュールであるかのように、ドロップダウンフィールドを使ってプロジェクトに統合することができます。
Supply concept
TBEN-L4-8IOL4は、2つの独立した電圧V1とV2を介して供給されます。
- V1 = モジュールと各スロットへの供給
- V2 = モジュールと各コネクターの供給(個別に取り外し可能)
I/Oチャンネルは「取り外し可能なI/O」(V2を通して供給)と「取り外し不可能な」I/O(V1を通して供給)という異なる電位グループに分けられ、非常停止回路を経由して設備の一部を安全にシャットダウンすることができます。
Class A
Class B
Setting the IP address
TBEN-L4-8IOL4のIPアドレスは、3つの1ロータリー・コーディング・スイッチもしくはWeb server・Turck Service Toolから設定できます。
Ethernet/IP
こちらはTBEN-L4-8IOL4のEthernet/IPの仕様になります。
Input/Output Assembly
こちらはTBEN-L4-8IOL4のEthernet/IPのAssembly一覧です。
103
こちらはTBEN-L4-8IOL4のEthernet/IPのInput Assembly、Instane103になります。
104
こちらはTBEN-L4-8IOL4のEthernet/IPのOutput Assembly、Instane104になります。
Implementation
Turck Side
まずTURCK側から始めます。ChormeやFirefoxからTURCのIPアドレスを入力します。
こちらはTURCKのWeb serverになります。
password
TURCKデバイスのDefault Passwordはpasswordです。
Default Passwordを実際の使い方によって変更するかを決めましょう。
Error
もしTURCKモジュールがエラー発生した場合、LOCAL>Diagnosisに!の黄色マークがついてます。
Port Configuration
次はTURCK IO-Link Masterの各Portを設定するため、LOCAL I/O>Parameterをクリックします。
各Portの設定画面が表示されます。
Read ボタンをクリックし現在IO-Link Portの設定を読み込みます。
Port1
Port1はMurrのアナログ>IOLINK変換器と接続されてますので、Operation ModeはIO-Link without validationを選択します。
Port2
Port2はなにも接続されていませんので、Operation ModeはDIを選択します。
Port3
Port3はなにも接続されていませんので、Operation ModeはDIを選択します。
Port4
Port4はTURCKの傾きを検知B1NF360V-QR20-IOLX3-H1141 IOLINKデバイスと接続されてますので、Operation ModeはIO-Link without validationを選択します。
Port5
Port5はNass magnetのSmart Connector Form A IOLINKデバイスと接続されてますので、Operation ModeはIO-Link without validationを選択します。
Port6
Port6はなにも接続されていませんので、Operation ModeはDIを選択します。
Port7
Port7はMurrのIOLINK Hub 59719と接続されてますので、Operation ModeはIO-Link without validationを選択します。
Port8
Port8はCONTRINEXのSmart Sensor IDWE-M12MM-NMS-A0 IOLINKデバイスと接続されてますので、Operation ModeはIO-Link without validationを選択します。
IODD Configurator
次はTURCKのIODD CONFIGURATORを紹介します。こちらのツールは各PortのIO-LINKデバイスのパラメータ設定や診断情報の確認などができます。
例えばPort1を設定してみましょう。
Load IODD File
作業してるPCがネットと繋がっている場合、”Web search”ボタンをクリックし、IODDを直接IODD Fileを検索し、Downloadすることができます。
Done!
Process data
Process data項目では該当するIO-Link デバイスの入出力データを確認できます。
またProcess data隣にある小さななTrendボタンをクリックします。
Porcess Dataのグラフ表が表示できます。
Process data Structure
Processdata Structureの項目では該当するIO-Link デバイスのProcess data構造を確認できます。その機能はDebug・プログラム作成するときはすごく役に立ちます。
Active events
Active eventsの項目では該当するIO-Link デバイスが発生中のアラームを確認できます。
Event history
Event historyの項目では該当するIO-Link デバイスのアムラー履歴を確認できます。
Documents
DOCUMENTS機能ではいま使用してるデバイスの詳しい情報などを確認できます。
例えば、今回はEtherent/IPを使用するので、”Etherent/IP Memory Map”項目でEtherent/IPの使用領域を確認できます。
Mitsubishi Side
次は三菱のIQ-R側の準備を行います。
Download EDS File
TURCKのEDS Fileを下記のLINKでDonwloadしてください。
Install Ethernet/IP Configuration Tools
RJ71EIP91でEthernet/IP ネットワークを構築するために、下記のLinkでConfiguration ToolsをDownloadし、PCにインストールしてください。
New Project
GXWORKS3を起動し、Project>Newで新規プロジェクトを追加します。
今回使用するのはR00 CPUなので、TypeをR00に、Program LanguageをSTに設定しましょう。
Done!
Module Configuration
Hardware Configurationを変更するために、”Module Configuration”をクリックします。
こちらはModule Configuration画面です。
R35B
Power Rack R35Bを追加します。
R00 CPUを”CPU”のSlotにひばってください。
Done!
R61P
電源モジュールR61PをPOW Slotに追加します。
Done!
RJ71EIP91
最後はRJ71EIP91モジュールをSlot0に追加します。
Done!
RJ71EIP91を選択すると、Start XYはモジュールの制御や状態確認になります。今回のTutorialはラベルプログラムをしますので、そのStartXYは気にする必要がありません。
Add Label
Elements Selection>Module>RJ71EIP91を右クリック>Add Module LabelをクリックしEIPモジュールのGlobal Labelをプロジェクトに追加します。
M+GlobalというGlobal label Listが追加されました。
EIP91_1が定義され、後ほど三菱のRJ71EIP91 Function Blockを使用するときに使いますので。
Detail DisplayをクリックするとAssignという項目が表示され、青い色の”Detailed Setting”があります。
GXWORKS3はRJ71EIP91に必要なXYとBuffer Memoryも定義されています。
CPU IP Address
PLCのIPアドレスを設定するため、Parameter>R00CPU>Module Parameterをクリックします。
IP Addressをアプリケーションに合わせてください。
Connection Destinationで実機のCPUと通信設定できます。
現在使用してるConenction設定をクリックします。
PLC Moduleをクリックし通信設定を行います。
いまは192.168.5.39になっています。
Connection Testボタンをクリックし通信テストを行います。
Done!
IP アドレスを設定し、Checkボタンで設定エラーがあるかをCheckします。
Done!
Apply ボタンで設定を保存します。
RJ71EIP91 Configurations
次はRJ71EIP91の設定を行います。
IP address
RJ71EIP91のIPアドレスを設定するためModule Information>0000:RJ71EIP91をクリックします。
IP Address欄をダブルクリックします。
IP AddressやSubnet Maskをアプリケーションに合わせて設定してください。
IPアドレスを設定した上、Checkボタンで設定を確認します。
Done!
Configure the Ethernet/IP Network
モジュールの基本設定が完成しましたので、次はEthernet/IP ネットワークを構築します。
Stat tools
Ethernet/IP Configuration Toolをダブルクリックしツールを起動します。
こちらはRJ71EIP91のEthernet/IP Configuration Toolになります。
Install EDS File
Devie LibraryにTURCKのEDS Fileを追加します。
Nextで進みます。
EDS Fileの追加画面に変わります。
Add all the EDS from the Directoryを選び>Browseをクリックします。
EDS Fileが格納されているFolderを設定し、Next>で進みます。
Next>で進みます。
Done!
Add Ethernet/IP Adapter
TURCKのEDS FileはIdent No.でデバイスを表現します。今回の記事では使用するTBEN-L4-8IOL4のIdent No.は6814082です。
Etherent/IP Devices>TURCK>Communication AdapterでTBEN-L4-8IOL4のIdent No.と一致する6814082を選びます。
6814082を選び、右にある空き部分にDropします。
Etherent/IP Adapter の設定が表示されます。
Network Properties
Network PropertiesでTURCK IO-Link MasterのIPアドレスを設定します。
Connections
Connections TabでTURCKのIO-Link Masterと接続する、Connection設定になります。
Online
設定完了したら、Onlineボタンをクリックします。
Download
次はConfigurationをDownloadします。
Downloadで進みます。
Done!
Program
Configurationが完成したら、今度はプログラムを作ります。
Structured Data Types
DUT_TBEN_L4_8IOL_Instance103
こちらの構造体はTBEN-L4-8IOL4のInstance103データをまとめた構造体になります。
w00StatusWord Word [Signed] w01Inputs Word [Signed] w02DVS Word [Signed] Port1 Word [Signed](0..15) Port2 Word [Signed](0..15) Port3 Word [Signed](0..15) Port4 Word [Signed](0..15) Port5 Word [Signed](0..15) Port6 Word [Signed](0..15) Port7 Word [Signed](0..15) Port8 Word [Signed](0..15) VERR Word [Signed] DXP Word [Signed] DiagnosticPort1 Word [Signed] DiagnosticsPort2 Word [Signed] DiagnosticsPort3 Word [Signed] DiagnosticsPort4 Word [Signed] DiagnosticsPort5 Word [Signed] DiagnosticsPort6 Word [Signed] DiagnosticsPort7 Word [Signed] DiagnosticsPort8 Word [Signed] IOLinkEvents01 Word [Signed](0..1) IOLinkEvents02 Word [Signed](1..2) IOLinkEvents03 Word [Signed](1..2) IOLinkEvents04 Word [Signed](1..2) IOLinkEvents05 Word [Signed](1..2) IOLinkEvents06 Word [Signed](1..2) IOLinkEvents07 Word [Signed](1..2) IOLinkEvents08 Word [Signed](1..2) IOLinkEvents09 Word [Signed](1..2) IOLinkEvents10 Word [Signed](1..2) IOLinkEvents11 Word [Signed](1..2) IOLinkEvents12 Word [Signed](1..2) IOLinkEvents13 Word [Signed](1..2) IOLinkEvents14 Word [Signed](1..2) IOLinkEvents15 Word [Signed](1..2) IOLinkEvents16 Word [Signed](1..2) |
DUT_TBEN_L4_8IOL_Instance104
こちらの構造体はTBEN-L4-8IOL4のInstance104データをまとめた構造体になります。
w00NotUsed Word [Signed] w01DXP Word [Signed] Port1 Word [Signed](0..15) Port2 Word [Signed](0..15) Port3 Word [Signed](0..15) Port4 Word [Signed](0..15) Port5 Word [Signed](0..15) Port6 Word [Signed](0..15) Port7 Word [Signed](0..15) Port8 Word [Signed](0..15) VAUX Word [Signed] |
DUT_TURCK_DVS
こちらの構造体はTBEN-L4-8IOL4のDVSデータをまとめた構造体になります。
DVS0 Bit DVS2 Bit DVS4 Bit DVS6 Bit DVS8 Bit DVS10 Bit DVS12 Bit DVS14 Bit |
DUT_TURCK_VAUX
こちらの構造体はTBEN-L4-8IOL4のVAUXデータをまとめた構造体になります。
b0VAUX1Pin1C0 Bit b1VAUX1Pin1C1 Bit b2VAUX1Pin1C2 Bit b3VAUX1Pin1C3 Bit b4VAUX1Pin1C4 Bit b5VAUX1Pin1C5 Bit b6VAUX1Pin1C6 Bit b7VAUX1Pin1C7 Bit b8NoUsed Bit b9NoUsed Bit bANoUsed Bit bBNoUsed Bit bCVAUX1Pin2C4 Bit bDVAUX1Pin2C5 Bit bEVAUX1Pin2C6 Bit bFVAUX1Pin2C7 Bit |
DUT_TURCK_IOILINKPORT_Diagnostics
こちらの構造体はTBEN-L4-8IOL4のIO-Link Port診断データを纏めた構造体です。
b0NotUsed Bit b1PPR Bit b2CFGERR Bit b3DSERR Bit b4HWERR Bit b5PDINV Bit b6EVT2 Bit b7EVT1 Bit b8PRMERR Bit b9OTMP Bit bALLVU Bit bBULVE Bit bCVLOW Bit bDVHIGH Bit bEOVL Bit bFGENERR Bit |
DUT_IOLINK_EVENT_SQ_QUALIFIER_INSTANCE
こちらの構造体はIO-Link Event QualifierのInstance部分になります。
bUnknown Bit bNotUsed Bit bApplications Bit |
DUT_IOLINK_EVENT_SQ_QUALIFIER_SOURCE
こちらの構造体はIO-Link Event QualifierのSource部分になります。
bIsMaster Bit bIsDevice Bit |
DUT_IOLINK_EVENT_SQ_QUALIFIER_MODE
こちらの構造体はIO-Link Event QualifierのMode部分になります。
bNotUsed Bit bEventSingleShot Bit bEventDisappears Bit bEventAppears Bit |
DUT_IOLINK_EVENT_SQ_QUALIFIER_TYPE
こちらの構造体はIO-Link Event QualifierのTYPE部分になります。
bNotUsed Bit bNotification Bit bWarning Bit bError Bit |
DUT_IOLINK_EVENT_SQ_QUALIFIER
こちらの構造体はIO-Link Event Qualifier のInstance・Source・Type・Modeを纏めた構造体です。
Instance DUT_IOLINK_EVENT_SQ_QUALIFIER_INSTANCE Source DUT_IOLINK_EVENT_SQ_QUALIFIER_SOURCE EvType DUT_IOLINK_EVENT_SQ_QUALIFIER_TYPE EveMode DUT_IOLINK_EVENT_SQ_QUALIFIER_MODE |
DUT_TURCK_IOLINK_EVENTS
こちらの構造体はTBEN-L4-8IOL4のEVENTS構造体になります。中にはQualifier・Event Code・Port・先程定義したDetailsがあります。
Port Word [Unsigned]/Bit String [16-bit] Qualifier Word [Unsigned]/Bit String [16-bit] EventCode Word [Signed] Details DUT_IOLINK_EVENT_SQ_QUALIFIER |
DUT_Murr_59719
こちらはmurrelektronik社のIO-Link Hub 59719の構造体になります。
b0Pin4X0 Bit b1Pin2X0 Bit b2Pin4X1 Bit b3Pin2X1 Bit b4Pin4X2 Bit b5Pin2X2 Bit b6Pin4X3 Bit b7Pin2X3 Bit b8Pin4X4 Bit b9Pin2X4 Bit bAPin4X5 Bit bBPin2X5 Bit bCPin4X6 Bit bDPin2X6 Bit bEPin4X7 Bit bFPin2X7 Bit |
DUT_Contrinex_IDWE_SENSOR
こちらはContrinex社のIDWEシリーズを纏めた構造体になります。
b0OSS1 Bit b1OSS2 Bit b2TSS Bit b3SSC1 Bit b4SCC2 Bit b5ALR1 Bit b6ALR2 Bit b7ALR3 Bit r32ScaleValue FLOAT [Single Precision] r32MeasureValue FLOAT [Single Precision] |
Function
次はTurckのIO-Link Master Instance103にあるEventsや診断情報を取り出す関数を作成します。
FC_TURCK_GetEVENTS
こちらはTUCKのIO-Link Master Instance103にあるEventsを取り出します。
VAR
iData Word [Signed](1..2) VAR_INPUT bENOTEMP Bit VAR tempWord Word [Unsigned]/Bit String [16-bit] VAR tempWord2 Word [Unsigned]/Bit String [16-bit] VAR |
Code
//Q WAND(TRUE,iData[1],16#00FF,FC_TURCK_GetEVENTS.Qualifier); //Port WAND(TRUE,iData[1],16#FF00,tempWord); tempWord:=SHR_E(TRUE,bENOTEMP,tempWord,8); FC_TURCK_GetEVENTS.Port:=tempWord; //EventCode FC_TURCK_GetEVENTS.EventCode:=iData[2]; tempWord:=FC_TURCK_GetEVENTS.Qualifier; // FC_TURCK_GetEVENTS.Details.EveMode.bEventAppears:=FALSE; FC_TURCK_GetEVENTS.Details.EveMode.bEventDisappears:=FALSE; FC_TURCK_GetEVENTS.Details.EveMode.bEventSingleShot:=FALSE; FC_TURCK_GetEVENTS.Details.EveMode.bNotUsed:=FALSE; // FC_TURCK_GetEVENTS.Details.EvType.bError:=FALSE; FC_TURCK_GetEVENTS.Details.EvType.bNotification:=FALSE; FC_TURCK_GetEVENTS.Details.EvType.bNotUsed:=FALSE; FC_TURCK_GetEVENTS.Details.EvType.bWarning:=FALSE; // FC_TURCK_GetEVENTS.Details.Instance.bApplications:=FALSE; FC_TURCK_GetEVENTS.Details.Instance.bNotUsed:=FALSE; FC_TURCK_GetEVENTS.Details.Instance.bUnknown:=FALSE; // FC_TURCK_GetEVENTS.Details.Source.bIsDevice:=FALSE; FC_TURCK_GetEVENTS.Details.Source.bIsMaster:=FALSE; IF tempWord >0 THEN // WAND(TRUE,tempWord,2#00000111,tempWord2); CASE WORD_TO_INT(tempWord2) OF 0: FC_TURCK_GetEVENTS.Details.Instance.bUnknown:=TRUE; 1..3,5..7: FC_TURCK_GetEVENTS.Details.Instance.bNotUsed:=TRUE; 4: FC_TURCK_GetEVENTS.Details.Instance.bApplications:=TRUE; END_CASE; // WAND(TRUE,tempWord,2#00001000,tempWord2); tempWord2:=SHR_E(TRUE,bENOTEMP,tempWord2,3); CASE WORD_TO_INT(tempWord2) OF 0: FC_TURCK_GetEVENTS.Details.Source.bIsDevice:=TRUE; 1: FC_TURCK_GetEVENTS.Details.Source.bIsMaster:=TRUE; END_CASE; // WAND(TRUE,tempWord,2#00110000,tempWord2); tempWord2:=SHR_E(TRUE,bENOTEMP,tempWord2,4); CASE WORD_TO_INT(tempWord2) OF 0: FC_TURCK_GetEVENTS.Details.EvType.bNotUsed:=TRUE; 1: FC_TURCK_GetEVENTS.Details.EvType.bNotification:=TRUE; 2: FC_TURCK_GetEVENTS.Details.EvType.bWarning:=TRUE; 3: FC_TURCK_GetEVENTS.Details.EvType.bError:=TRUE; END_CASE; // WAND(TRUE,tempWord,2#11000000,tempWord2); tempWord2:=SHR_E(TRUE,bENOTEMP,tempWord2,6); CASE WORD_TO_INT(tempWord2) OF 0: FC_TURCK_GetEVENTS.Details.EveMode.bNotUsed:=TRUE; 1: FC_TURCK_GetEVENTS.Details.EveMode.bEventSingleShot:=TRUE; 2: FC_TURCK_GetEVENTS.Details.EveMode.bEventDisappears:=TRUE; 3: FC_TURCK_GetEVENTS.Details.EveMode.bEventAppears:=TRUE; END_CASE; END_IF; |
FC_TURCK_GetIOLINKDiagnostics
こちらはTUCKのIO-Link Master Instance103にある各IO-Link Portの診断情報を取り出します。
VAR
iPortData Word [Signed] VAR_INPUT iPortData1 Word [Unsigned]/Bit String [16-bit] VAR |
Code
iPortData1:=INT_TO_WORD(iPortData); FC_TURCK_GetIOLINKDiagnostics.b0NotUsed:=iPortData1.0; FC_TURCK_GetIOLINKDiagnostics.b1PPR:=iPortData1.1; FC_TURCK_GetIOLINKDiagnostics.b2CFGERR:=iPortData1.2; FC_TURCK_GetIOLINKDiagnostics.b3DSERR:=iPortData1.3; FC_TURCK_GetIOLINKDiagnostics.b4HWERR:=iPortData1.4; FC_TURCK_GetIOLINKDiagnostics.b5PDINV:=iPortData1.5; FC_TURCK_GetIOLINKDiagnostics.b6EVT2:=iPortData1.6; FC_TURCK_GetIOLINKDiagnostics.b7EVT1:=iPortData1.7; FC_TURCK_GetIOLINKDiagnostics.b8PRMERR:=iPortData1.8; FC_TURCK_GetIOLINKDiagnostics.b9OTMP:=iPortData1.9; FC_TURCK_GetIOLINKDiagnostics.bALLVU:=iPortData1.A; FC_TURCK_GetIOLINKDiagnostics.bBULVE:=iPortData1.B; FC_TURCK_GetIOLINKDiagnostics.bCVLOW:=iPortData1.C; FC_TURCK_GetIOLINKDiagnostics.bDVHIGH:=iPortData1.D; FC_TURCK_GetIOLINKDiagnostics.bEOVL:=iPortData1.E; FC_TURCK_GetIOLINKDiagnostics.bFGENERR:=iPortData1.F; |
Function Block
GXWORKSのEthernet/IP Libraryを追加するため、Module FB>RJ71EIP91を右クリック>Add to Projectをクリックします。
Done!
Global Label
次はGlobal labelでTURCK IO-Linker Masterとデータ交換する領域を定義します。
IOLINK_1_103 DUT_TBEN_L4_8IOL_Instance103 IOLINK_1_104 DUT_TBEN_L4_8IOL_Instance104 |
Global label定義画面にある”Show Details”ボタンをクリックします。
Assign(Detailed Setting)をクリックします。
Instance103はD100から割り付けます。
Instance104はD500から割り付けます。
MAIN
次はMainプログラムです。
VAR
r32Port1Current FLOAT [Single Precision] r32Port1Level FLOAT [Single Precision] r32Temp FLOAT [Single Precision] i16Port4_ProcessDataRev Word [Signed] i16Port4_ProcessData Word [Unsigned]/Bit String [16-bit] i16Port4_Scale Word [Signed] bENOTEMP Bit fbClass1SetOutputData_00A M+RJ71EIP91_Class1SetOutputData_00A i16PWMSetPoint Word [Unsigned]/Bit String [16-bit] udtMurr59719_inputs DUT_Murr_59719 udtMurr59719_outputs DUT_Murr_59719 fbTON1 TON fbTON2 TON udtContrinex_Sensor1 DUT_Contrinex_IDWE_SENSOR iConnetionNO Word [Unsigned]/Bit String [16-bit] udtVAUX DUT_TURCK_VAUX udtVERR DUT_TURCK_VAUX TURCKPortsDiagnostic DUT_TURCK_IOILINKPORT_Diagnostics(1..8) TURCKPortsEvent DUT_TURCK_IOLINK_EVENTS(1..4) |
Code
プログラムは詳しく説明しませんが、三菱のLibraryを使用し、Connection1のデータを取得し、各Portと接続されているIO-Linkデバイスによってデータ処理します。
最後はまた三菱のLibraryを使用し、Connection1に出力データを書き込みます。
//Connections iConnetionNO:=1; //1s Pulse fbTON1( IN:= NOT fbTON2.Q ,PT:= T#1s //,Q=> ?BOOL? ,ET=> ?TIME? ); fbTON2( IN:= fbTON1.Q ,PT:= T#1s //,Q=> ?BOOL? ,ET=> ?TIME? ); //Start2Communication bStart2Comm:=EIP91_1.bSts_ModuleReady AND NOT EIP91_1.bSts_ModuleError; EIP91_1.bSet_CommunicationStartupRequest:=bStart2Comm; //Case Control IF i16Step = 0 AND bStart2Comm THEN i16Step:=10; END_IF; CASE i16Step OF 10: fbClass1GetInputData_00A( i_bEN:= bStart2Comm ,i_stModule:= EIP91_1 ,i_uConnectionNo:= iConnetionNO ,o_bENO=> bENO ,o_bOK=> bOK ,o_bErr=> bErr ,o_uErrId=> uErrID ,o_uStatusId=> uStatusID ,o_uInputData=> D100 ); IF bErr THEN i16Step:=20; END_IF; 20: fbClass1GetInputData_00A( i_bEN:= FALSE ,i_stModule:= EIP91_1 ,i_uConnectionNo:= iConnetionNO ,o_bENO=> bENO ,o_bOK=> bOK ,o_bErr=> bErr ,o_uErrId=> uErrID ,o_uStatusId=> uStatusID ,o_uInputData=> D100 ); i16Step:=0; END_CASE; //Process Input data valid udtDVS.DVS0:=IOLINK_1_103.w02DVS.0; udtDVS.DVS2:=IOLINK_1_103.w02DVS.2; udtDVS.DVS4:=IOLINK_1_103.w02DVS.4; udtDVS.DVS6:=IOLINK_1_103.w02DVS.6; udtDVS.DVS8:=IOLINK_1_103.w02DVS.8; udtDVS.DVS10:=IOLINK_1_103.w02DVS.A; udtDVS.DVS12:=IOLINK_1_103.w02DVS.C; udtDVS.DVS14:=IOLINK_1_103.w02DVS.E; //Port1 Murr, Analog->IOLINK Converter r32Port1Current:= (INT_TO_REAL(IOLINK_1_103.Port1[0])/32767.0)*20.0+4.0; r32Port1Level:= (INT_TO_REAL(IOLINK_1_103.Port1[0])/32767.0)*100.0; //Port4 Turck Sensor i16Port4_ProcessDataRev:=IOLINK_1_103.Port4[0]; i16Port4_ProcessData:=INT_TO_WORD(IOLINK_1_103.Port4[1]); //Port5 Nass // IOLINK_1_104.Port5[0].0:=M101; i16PWMSetPoint:=D1003; IOLINK_1_104.Port5[0].1:=i16PWMSetPoint.0; IOLINK_1_104.Port5[0].2:=i16PWMSetPoint.1; IOLINK_1_104.Port5[0].3:=i16PWMSetPoint.2; IOLINK_1_104.Port5[0].4:=i16PWMSetPoint.3; IOLINK_1_104.Port5[0].5:=i16PWMSetPoint.4; IOLINK_1_104.Port5[0].6:=i16PWMSetPoint.5; IOLINK_1_104.Port5[0].7:=i16PWMSetPoint.6; IOLINK_1_104.Port5[0].8:=i16PWMSetPoint.7; //Port7 Murr IOLINK-hub // udtMurr59719_inputs.b0Pin4X0:=IOLINK_1_103.Port7[0].0; udtMurr59719_inputs.b1Pin2X0:=IOLINK_1_103.Port7[0].1; udtMurr59719_inputs.b2Pin4X1:=IOLINK_1_103.Port7[0].2; udtMurr59719_inputs.b3Pin2X1:=IOLINK_1_103.Port7[0].3; udtMurr59719_inputs.b4Pin4X2:=IOLINK_1_103.Port7[0].4; udtMurr59719_inputs.b5Pin2X2:=IOLINK_1_103.Port7[0].5; udtMurr59719_inputs.b6Pin4X3:=IOLINK_1_103.Port7[0].6; udtMurr59719_inputs.b7Pin2X3:=IOLINK_1_103.Port7[0].7; udtMurr59719_inputs.b8Pin4X4:=IOLINK_1_103.Port7[0].8; udtMurr59719_inputs.b9Pin2X4:=IOLINK_1_103.Port7[0].9; udtMurr59719_inputs.bAPin4X5:=IOLINK_1_103.Port7[0].A; udtMurr59719_inputs.bBPin2X5:=IOLINK_1_103.Port7[0].B; udtMurr59719_inputs.bCPin4X6:=IOLINK_1_103.Port7[0].C; udtMurr59719_inputs.bDPin2X6:=IOLINK_1_103.Port7[0].D; udtMurr59719_inputs.bEPin4X7:=IOLINK_1_103.Port7[0].E; udtMurr59719_inputs.bFPin2X7:=IOLINK_1_103.Port7[0].F; // udtMurr59719_outputs.b6Pin4X3:=fbTON1.Q; IOLINK_1_104.Port7[0].5:=udtMurr59719_outputs.b6Pin4X3; // udtContrinex_Sensor1.b0OSS1:=IOLINK_1_103.Port8[1].0; udtContrinex_Sensor1.b1OSS2:=IOLINK_1_103.Port8[1].1; udtContrinex_Sensor1.b2TSS:=IOLINK_1_103.Port8[1].2; udtContrinex_Sensor1.b3SSC1:=IOLINK_1_103.Port8[1].3; udtContrinex_Sensor1.b4SCC2:=IOLINK_1_103.Port8[1].4; udtContrinex_Sensor1.b5ALR1:=IOLINK_1_103.Port8[1].5; udtContrinex_Sensor1.b6ALR2:=IOLINK_1_103.Port8[1].6; udtContrinex_Sensor1.b7ALR3:=IOLINK_1_103.Port8[1].7; bENOTEMP:=WAND(TRUE,IOLINK_1_103.Port8[1],16#FF00,D1000); D1001:=SHR_E(TRUE,bENOTEMP,D1000,8); udtContrinex_Sensor1.r32ScaleValue:=INT_TO_REAL(D1001); udtContrinex_Sensor1.r32MeasureValue:= (INT_TO_REAL(IOLINK_1_103.Port8[0])/16384.0)*110.0; //VERR udtVERR.b0VAUX1Pin1C0:=IOLINK_1_103.VERR.0; udtVERR.b1VAUX1Pin1C1:=IOLINK_1_103.VERR.1; udtVERR.b2VAUX1Pin1C2:=IOLINK_1_103.VERR.2; udtVERR.b3VAUX1Pin1C3:=IOLINK_1_103.VERR.3; udtVERR.b4VAUX1Pin1C4:=IOLINK_1_103.VERR.4; udtVERR.b5VAUX1Pin1C5:=IOLINK_1_103.VERR.5; udtVERR.b6VAUX1Pin1C6:=IOLINK_1_103.VERR.6; udtVERR.b7VAUX1Pin1C7:=IOLINK_1_103.VERR.7; udtVERR.b8NoUsed:=IOLINK_1_103.VERR.8; udtVERR.b9NoUsed:=IOLINK_1_103.VERR.9; udtVERR.bANoUsed:=IOLINK_1_103.VERR.A; udtVERR.bBNoUsed:=IOLINK_1_103.VERR.B; udtVERR.bCVAUX1Pin2C4:=IOLINK_1_103.VERR.C; udtVERR.bDVAUX1Pin2C5:=IOLINK_1_103.VERR.D; udtVERR.bEVAUX1Pin2C6:=IOLINK_1_103.VERR.E; udtVERR.bFVAUX1Pin2C7:=IOLINK_1_103.VERR.F; //Port Diagnostics TURCKPortsDiagnostic[1]:=FC_TURCK_GetIOLINKDiagnostics( bStart2Comm ,bENOTEMP ,IOLINK_1_103.DiagnosticPort1 ); TURCKPortsDiagnostic[2]:=FC_TURCK_GetIOLINKDiagnostics( bStart2Comm ,bENOTEMP ,IOLINK_1_103.DiagnosticsPort2 ); TURCKPortsDiagnostic[3]:=FC_TURCK_GetIOLINKDiagnostics( bStart2Comm ,bENOTEMP ,IOLINK_1_103.DiagnosticsPort3 ); TURCKPortsDiagnostic[4]:=FC_TURCK_GetIOLINKDiagnostics( bStart2Comm ,bENOTEMP ,IOLINK_1_103.DiagnosticsPort4 ); TURCKPortsDiagnostic[5]:=FC_TURCK_GetIOLINKDiagnostics( bStart2Comm ,bENOTEMP ,IOLINK_1_103.DiagnosticsPort5 ); TURCKPortsDiagnostic[6]:=FC_TURCK_GetIOLINKDiagnostics( bStart2Comm ,bENOTEMP ,IOLINK_1_103.DiagnosticsPort6 ); TURCKPortsDiagnostic[7]:=FC_TURCK_GetIOLINKDiagnostics( bStart2Comm ,bENOTEMP ,IOLINK_1_103.DiagnosticsPort7 ); TURCKPortsDiagnostic[8]:=FC_TURCK_GetIOLINKDiagnostics( bStart2Comm ,bENOTEMP ,IOLINK_1_103.DiagnosticsPort8 ); //IOLINK Events TURCKPortsEvent[1]:=FC_TURCK_GetEVENTS( bStart2Comm ,bENOTEMP ,IOLINK_1_103.IOLinkEvents01 ); // fbClass1SetOutputData_00A( i_bEN:= bStart2Comm ,i_stModule:= EIP91_1 ,i_uConnectionNo:= iConnetionNO ,i_uOutputData:= D500 ,o_bENO=> bENO ,o_bOK=> bOK ,o_bErr=> bErr ,o_uErrId=> uErrID ,o_uStatusId=> uStatusID ); ; |
Result
こちらはTURCK IO-Link Masterとcontrinex Smart Sensorを連携する動画です。
こちらはTURCK IO-Link Masterとmurrelektronik IO-Link Coverterを連携する動画です。
こちらはTURCK IO-Link MasteのEvent処理する動画です。
こちらはTURCK IO-Link Masterとmurrelektronik IO-Link Hubを連携する動画です。
こちらはTURCK IO-Link MasterとNass magnetのデバイスを連携する動画です。
こちらはTURCK IO-Link MasterとTURCKのデバイスを連携する動画です。
Download
下記のLinkでプロジェクトをDownloadしてください。
https://github.com/soup01Threes/GXWROKS/blob/main/Project_RJ71EIP91_TURCK.gx3