PLCNEXT#Smart Element AXL SEIOL4 IO-LINK Master Demo

この記事ではPhoenix ContactのPLCNEXT・Smart Element AXL SE IOL4 IOLINK Master 4Portを使用し、同じくPhoenix Contact製のIOLINK デバイスSupportするSafety RelayとSafety Switchを組み合わせ、FA現場でよくあるSafety 構成を0からどう作るかを説明します。よろしくおねがいします。

Bus Base Module

まずAxiolineのBus システムについて少し話ししましょう。下図のようにCPUの種類により使用するBus Baseモジュールが異なるので、購入するときはきをつけてください。

こちらはInput/Output モジュールのBus base、またCPUと少し違いますからね。

Type of Base Module

実際今回の記事を書くときSmart elementを使ってるときはあれ…CPUの隣に直接さすときどんなBus module使えばよいですか?と思いました。

Manual調べたら、まずBus base Moduleは5種類以上ありますね。最後の…は”他の”という意味で実際どんなモジュール使ってるだろう…

NoTypeUse in Where?
1AXL BSAXC 3xxxのCPU
2AXL BS BKBK BousingのBus CouplerやAXC 1050のCPU
3AXL F BS FF Housing
4AXL F BS HH Housing
5AXL BS H PWRH Housing,電源モジュール
Others

Smart Element 

Axioline Smart Elementsは自由自在にアプリケーションに合わせて必要なモジュールをPlug-And-Playでき、Bus通信なしのデバイスだと思ってください。Smart ElementはI/O Function・IO-LINK・シリアル通信など幅広い製品があるみたいです。Smart Elementは以下のメリットがあります。

  • 盤内のSpaceの節約
  • アプリケーションのFlexibility
  • Push-in技術でインストール簡単

Size

Smart Elemets自体はSwitch Controllerより小さなコンパクトサイズです。

Module carrier – AXL F BP SEx

実際Smart moduleだけでは稼働できませんのでbackplaneが必要です。現時点ではAXL F BP SE4とAXL F BP SE6の2つがあり、いわゆる4Slotや6Slotですね。

Wiring

backplaneのUp+とUp-に24VDCを繋がってください。

Example

もし複数のbackplaneをインストールしてる場合、24VDCのJumperを忘れずに。

Power Supply in backplances

こちらはSmart elementでBackplances内の電源図ですね。

UL=ULogic=通信の電源

UBus=Axioline F のローカルバス電源(普通はULから供給)

USE=USmart element=Axioline Smart elementsの通信電源(UBusから供給)

Up=UPeriphery=Axioline Smart elementsのIO電源

なので、Upを24V入れるのを忘れないでくださいね。

Basic Design

  1. Axioline F backplance
  2. レールとはめるところ
  3. 電源
  4. UpstreamのAxioline F backplaneか、Axioline F Bus base Moduleどっちかと接続
  5. Smart Elementの各Slot
  6. Down StreamのAxioline F backplanceかAxioline F Bus base Moduleどっちかと接続
  7. Axioline Smart Element
  8. Axioline Smart Elementを取り出すときのリリースボタン
  9. IO port

LED

詳細はManualを参考にしてください。基本は:

  • D LED(赤・黄色・緑)があり各Slotの情報を示しています。
  • UP LEDはI/O電源を表してる。


Install Smart element

Smart elementをさし、Bのリリースボタンを押すだけです。

Uninstall Smart element

Smart ElemetのA リリースボタンをあげ、そしてSmart Elemetを取り出すだけです。

Slot

Slotの順番です。上から下、左から右の順で数えています。

その順番はPLCNEXT Engineeringにつかわれています。

AXL SE IOL4 

いよいよ今回の主役AXL SE IOL4、IOLINK MasterのSmart Elementです。そのモジュールを使用しIOLINK Masterを立ち上げることができます。もちろんアプリケーションによってPortはIOLINK PortではなくDI/DOとして稼働してもOKです。

IOLINK デバイスは3線式になります。

Terminal

以下は配線図です。注意するのはTerminal3,7,11,15は使用しないことです。

LED

こちらはモジュールのLED説明です。


Wiring Example

下記の例でAXL SE IOL4をINPUT/OUTPUT/IOLINK Portの配線例になります。

Port1、Port4はIO-LINK、Port2は入力、そしてPort3は出力になります。

Process data

Process dataはBig Endian Formatで、サイクル通信で最大64ByteのProcess dataまでになります。その64Bytesの中に6ByteのIO-LINK Masterデータが含まれ、つまりIO-LINKと最大58 BytesのProcess dataが交換できます。

IN Process Data

こちらは入力のProcess data 64BytesのMappingになります。

Byte0 Status of the IO-Link Connection For each IO-Link Port

このデータは各IO-LINK Portの状態をBitで示します。

True=PortがIO-LINK Modeとして稼働、なおかつIO-LINK Deviceが検知している状態

False=IO-LINK 通信が確立してない

Byte1 Status of the IO-LINK input process data for each port

そのデータは該当するIO-LINK PortとIO-Device間のProcess dataが有効かどうかを確認できます。

True=該当するIO-Link PortのInput Process dataは有効、使用可能です。

False=該当するIO-Link PortのInput Process data無効、使用できません。

Byte2 Status(Level) of the C/Q Cable for each IO-Link Port

そのデータはPortが稼働してるModeは入力かIO-Linkかよって意味が変わります。

  • DI(入力)
    • True:入力がONしています。(>13V)
  • IOL(IO-LINK)
    • True:Portが13V以上ありますが、IO-Linkデバイスと通信確率してない。

Byte3-5 Reserved

そのデータは使用していません。

Byte6-63 Input Process data

これからの58 Bytes各PortのIO-LINK Devieからの入力データです。もし接続先のIO-LINKデデバイスが58Btyesより少ないProecss dataなら、余ってるBytesはすべて00hになる。

Out Process Data

こちらは出力のProcess data 64BytesのMappingになります。


Byte0-1 Reserved

そのデータは使用していません。

Byte2 Set point(level) of the C/Q Cable for each IO−Link Port

該当するPortがDigital出力モードとして稼働すれば、TrueになるとOutput=1になります。

Byte3-5 Reserved

そのデータは使用していません。

Byte6-63 Output Process Data(User data) of IO-Link Ports

これは58 Bytes各PortのIO-LINK Devieからの出力データです。もし接続先のIO-LINKデデバイスが58Btyesより少ないProecss dataなら、余ってるBytesはすべて00hになる。

PSR-CT-C-SEN-1-8

こちらは今回記事で使用するSafetyスイッチです。そのスイッチはドアや移動する部分やFlapsなど幅広く使用できるデバイスです。(例えば機械の移動部分の確認・装置のセキュリティエリアなど)

Connector Wiring

こちらはConnectorの配線図です。

PinMeaningDescription
1FI1BChannel2の有効信号
2UB24V 電源
3FO1AChannel1 安全出力
4FO1BChannel2 安全出力
5DGN信号・診断出力
6FI1AChannel1の有効信号
70VDC24のGround
8Startスタートやリセット入力

Wiring

IO-LINK通信の配線例になります。

PSR-MC42

こちらは今回記事で使用するPhoenix Contact製のIO-LINK Device – Safety relayです。そのSafety Relayは安全関係の信号を監視できActactorsを制御することできます。

Safety relay自体は2点のSensor 監視入力があり、回路はSingle-channelやTwo-Channleにも対応できます。もしどちらかの監視信号が切断になると、Safety Relayは安全状態に移行します。

使用可能な信号

  • 緊急停止
  • ドアスイッチ
  • Light grids

Interface

  • Sensor 回路x2
  • DelayなしのEnable出力x2
  • DO x1
  • IO-LINK 

Wiring 

こちらはSafety Relayの信号図です。

SignalDescription
L+/L-IO-LINK 電源
C/QIO-LINK 信号
A124V DC 電源
A20V
S11S12のPower Supply 出力
S21S22のPower Supply入力S22
S12Input信号 S0 -Channel1
S22Input 信号S1 -Channel2
DGNSafety switchの診断入力
S34回路スタート
S32OSSD Input sensor S1-Channel1
S42OSSD Input sensor S1-Channel2
M1アラーム出力
13/14/23/24Undelay Enabling current paths

IO-LINK 

IODDs

IODDはIO Device Descriptionの略でIO-LINK Interfaceを持つSensorやActuatorsの特徴を表すドキュメントです。その中にデバイスのidentity・パラメタ・Process data・診断データ・通信設定のプロパティ・User interfaceが含まれています。

そのIODDは複数のFileが含まれて、Main Fileとオプション的な言語File、あとエンジニアツールの表示用の画像(PNG Format)になります。

ですが、理解を含めていくため、今回は手入力することにします。

まずは以下PSR-MC42のVendor・Device情報、そして交換できるPSR-CTドアスイッチデータ数を示しています。

Vendor IDはGoogleでメーカー名 IO-LINK Vendor IDを調べあらIO-LINK orgのWebが表示され、中で調べることができます。

Device IDは例えば30110だとInput sizeは6 Byte、Outputは1Byte、交換できるPSR-CTドアスイッチデータ数は6個までのようなイメージです。

Addressing

以下はPSR-MC42 Safety RelayとPSR-CT安全スイッチを組み合わせるときのアドレス順です。

このようにByte0はPSR-MC42本体・Byte1は1個目のPSR-CT…のように。

Cyclic data

先ほども言いましたがIODDにより6/11/21/31 input process dataを設定することできます。

Input Data

Byte0 IO-Link diagnostic bits/status of PSR-MC42
BitDescriptionValue
0Sensor 回路S0False=S0無効中True=S0有効中
1Sensor 回路S1False=S1無効中True=S1有効中
2出力回路K1とK2False=K1かK2無効中True=K1とK2有効中
3回路リセットFalse:Start Ack要求してないTrue:Start Ack要求済み
4…7エラー情報
Device status and error messages
Bit4-7Description
0111システムエラー
0110入力エラー
0101IO-Link 電圧低下
0100PSR-MC42  電圧低下
0011Communication エラー
0010パラメタエラー
0001診断情報あり
0000
Byte 1 (IO-Link diagnostic bits/status of PSR-CT No. 1)
BitDescriptionValue
0ActuactorFalse=Actuatorがエラー・検知されないTrue=正常
1Limit Range ActuatorFalse=正常True=Limit範囲内
2Reset CircuitFalse=スタートリクエスト確認要求してないTrue=スタートリクエスト確認要求した
3使用してません
4使用してません
5入力エラーTrue=エラー
6出力エラーTrue=エラー
7内部エラーTrue=エラー
Byte2..30 IO-LINK Diagnostic bits/status of PSR-CT 2-30

Byte1と同じ構造で、Byte2は2つ目のPSR-CT、Byte3は3つ目のPSR-CT…

Output Data

Byte0 IO-Link diagnostic bits/status of PSR-MC42
BitDescriptionValue
0Enable信号False=無効True=有効
1Chain reset信号がたち下げでリセットする
2…7使用してない

Configuration

こちらは今回の構成です。PLCNEXT PLCNEXT 2152にはSmart ElementのIOLINK があり、そして同じくPhoenix Contact製のIO LINK Safety Relay とProcess dataを交換します。

Safety Relay はPSR-CTの安全スイッチと緊急停止が安全入力で、Resetボタンがそのデバイスをリセットするために使います。最後はLAMPが現在Safety Relayの出力状態を表示しています。

Implemention

せっかくなので、今回はOOPのコンセプトを取り込んでみます。

Function Block FB_PSR_MC42は1SETのPSR-MC42とPSR-CTの組み合わせになります。

Function Block FB_AXL_SE_IOL4は1個は一つのAXL_IOL4になります。

Hardware Configuration

まずHardware Configurationから構築します。

Project>YourPLC>Axioline Fをクリックします。

PLCNEXTはSmart ElementのBase Backplaneを挿入する必要がありませんので、Device Listから直接Smart ElementのBase Backplane上にさしてるSmart Elementを上から下、左から右のようにいれてください。

このようですね。

今回はこのような構成になっています。次はIo-1 AXL SE IOL4をクリックします。

Port1はSafety RelayのIO-LINK Device Interfaceと接続するので、Parameter>Port 1を開きます。

Operating mode of the portをIO-Linkにします。

PD IN LengthとPD OUT LengthはProcess Dataの長さです、注意するのはBitで計算しますので、88Bitは11Bytesになります。実際のデータはManualを参考にしながら設定してください。

Vendor IDも同じくManualを参考してください。

このDevice IDは結構大事で、実際もManualを参考にしますが、このDevice ID値により実際交するProcess Data IN/OUT数がわかりますので。他のパラメタはDefaultのままでOKです。


DUT

まず構造体を定義します。もちろんMUSTではないが、構造体を定義することによってFunction BlockのInput Output Intefaceが短くなり、よりクリアなコードができます。

構造体は複数の変数をまとめて一つの変数として再定義するものだと思ってください。

DUT_AXL_SE_IOL4

  • DUT_AXL_SEL_IOL4_PortStatusはSmart element AXL_SE_IOL4のStatusに合わせて作ったSTRUCTです。
  • DUT_AXL_SEL_IOL_4PortはモジュールのPort4つあるので配列4のDUT_AXL_SEL_IOL4_PortStatusを定義します。
  • DUT_IOLinkDataとDUT_IOLink_Device_DataはDUT_AXL_SE_IOL4の仕様に合わせて作成した構造体です。Totol Process dataは64 BytesでIO-Link デバイスと交換するのは58Bytesです。
TYPE
    DUT_AXL_SEL_IOL4_PortStatus : STRUCT
        CommunicationOK : bool; //
        ProcessDataValid: bool; /                CQStatus        : bool;                Normal          : bool;     END_STRUCT
   
    DUT_AXL_SEL_IOL_4Port:array[1..4]of DUT_AXL_SEL_IOL4_PortStatus;
    DUT_IOLinkData:array[0..63]of BYTE;
    DUT_IOLink_Device_Data:array[0..57]of BYTE;
   
END_TYPE

DUT_PSR-CT

まずDUT_PST_CT_Statusを安全スイッチの状態を一つ定義し、先も最大30個まで接続できるといいましたので、配列長さ30の変数をさらに定義します。

TYPE
  DUT_PST_CT_Status:STRUCT
      Actuatordetection:Bool;
      LimitRangeActuator:Bool;
      ResetCircuit:Bool;
      InputError:Bool;
      OutputError:Bool;
      InteneralError:Bool;
      Error         :Bool;
  END_STRUCT

  DUT_PST_CTs: ARRAY[1..30]of DUT_PST_CT_Status;

END_TYPE

Function Block

次はFunction Blockです。Function Blockを作成する目的はIO-LINK MasterのロジックとIO-LINK Device And Safetyスイッチのロジックを分離させることです。

つまりもしIO-LINK Masterが増やしたら、FB_AXL_SE_IOL4のInstanceを定義しIN/OUTパラメタを割り付ければよいですし、IO-LINK DeviceとSafetyスイッチの組み合わせがもう1セット追加したらFB_PSR_MC424のInstanceを定義しIN/OUTパラメタを割り付ければよいのです。これは構造化プログラムの力です…!

FB_AXL_SE_IOL4

こちらはIOLINK Master AXL_SE_IOL4のFunction Blockです。モジュールの現在の状態を取得できます。

Variables

Portsは4Portの現在状態をまとめて出力する変数です。

VAR_INPUT3つの変数はモジュールのStatus 出力と割り付けます。

Code

各Bitの割り付け先程も説明しました。

Method-Normal

そのMethodは現在モジュール状態を返答します。

Return Value

Boolで、True=Normal。

Variables

取得したいPort番号です。1-4までになります。

Code

IndexをCheckし、有効であれば該当するPortの情報を返答します。

FB_PSR_MC42

こちらはPSR_MC42とPSR_CTの組み合わせのFunction Blockです。

Variables

Input パラメタはIOLINK のProcess InputData、OutputパラメタはIOLINKのProcess OutputDataになります。

Code

Method-Enable

現在Safety RelayをEnable信号に送信します。

Return Value

True=有効してる

Variables

inがTrueであれば有効信号を送信します。

Code

Mappingは詳しく説明しませんが、EnableのReturn値はいまK1_K2のON/OFF状態を返答します。

Method-Get_K1_K2

Safety RelayのK1 K2状態を取得します。

Return Value

True=K1K2をONにしています。

Code

Mappingは詳しく説明しません。

Method-Get_PSR_CT_Status

PSR-CTの安全スイッチの現在状態をReturnします。

Return Value

ここで注目するのは、Returnできるのは普通のBOOL・RealなどのTypeだけではなく、実際User定義したData typeもReturnできます。

今回のExampleではDUT_PST_CT_StatusをReturnする、つまり一個分の安全スイッチデータをReturnします。

Variables

実際どっちの安全スイッチ状態を返すとには、そのiIndex Inputパラメタから設定できます。

Code

Indexが1から30までの有効数字かをCheckし、OKであればIOLINK DeviceのProcess dataからそのIndexのデータを取り出します。

MappingはTutorialの機器説明部分やManualに参考してください。

Get_S0

安全RelayのS0 Channel0 Input状態を取得します。

Return Value

True=ON

Code

MappingはTutorialの機器説明部分やManualに参考してください。

Get_S1

安全RelayのS0 Channel0 Input状態を取得します。

Return Value

MappingはTutorialの機器説明部分やManualに参考してください。

Code

MappingはTutorialの機器説明部分やManualに参考してください。

Reset

安全RelayをリセットするMethodです。

Return Value

True=Resetした


Variables

InputパラメタがTrueになるとリセットを行います。

Code

MappingはTutorialの機器説明部分やManualに参考してください。

MAIN

最後はMAINプログラムですね。

Assign 

まずはIO-LINK Masterのデータを割り付けます。

Process dataとプログラム変数をひもつけます。

Variables

Code

先作成したIO LINK Master Function blockと安全RelayFunction blockを呼び出し、状態の取得やRelayを制御します。

Result

こちらの動画で実際の構成説明や動作が見られます。

https://youtu.be/RheCi_nvSVI

Sample Code

こちらでProjectをDownloadできます。

https://github.com/soup01Threes/PLCNEXT/blob/main/PROJECT_AXL_SE_IOL4_SampleProject.pcwex

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

シェアする

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

フォローする