Phoenix Contact#LIO_COMライブラリで動的にAXL E PN IOL4/0 IO-Linkパラメータを書き換えよう

今回の記事では、Phoenix Contact AXCF2152Phoenix Contact 製 AXL E PN IOL4/0 DIO8 M12 6M-LPROFINET で接続するだけでなく、
Phoenix Contactのライブラリ「LIO_COM」 を使用し、プログラム上から動的に AXL E IOL DIO8 M12 3M のパラメータを上書きする方法を解説します。

また、本記事で使用する IO-Link デバイス は以下のとおりです。

  • AXL E IOL DIO8 M12 3M
  • PSD-SC IOL S15 AE

さ、FAを楽しもう!

前書き

いつも私の技術ブログとYouTubeチャンネルをご覧いただき、心より感謝申し上げます。また、いまFullさん(full@桜 八重 (@fulhause) / X)と共に毎週水曜日の夜にお届けしている「高橋クリス」ラジオ番組を運営しています。

技術は独り占めせず、届けるもの

私たちは工場の生産技術や制御に関する技術情報を、ブログや動画などで無料公開しています。「知識は誰でもアクセスできるべき」という信念のもと、現場で役立つ具体的なノウハウやトラブル事例などを発信してきました。すべて無料で続けているのは、「知らなかったせいで困る人」を少しでも減らしたいからです。

また、もしあなたの現場で…

  • 「このPLCとデバイスの組み合わせ、ちゃんと動くのかな?」
  • 「EtherCAT通信でうまくいかない部分を検証してほしい」
  • 「新しいリモートI/Oを試したいけど社内に検証環境がない」

など、困っている構成や試してみたいアイデアがあれば、ぜひお知らせください。機器の貸出や構成の共有が可能であれば、検証し、記事や動画で発信します(ご希望に応じて匿名対応も可能です)。

支援のかたち

現在、私達の活動はほぼ無償で続けており、記事や動画の制作には、時間と検証環境の整備が必要です。この活動を継続的にコンテンツを提供するためには、皆様の温かいご支援が大変重要です。

メンバーシップ(ラジオの応援)

Fullさんとのラジオをより充実させるための支援プランです。

https://note.com/fulhause/membership/join

Amazonギフトリスト

コンテンツ制作に必要な機材・書籍をリストにしています。

https://www.amazon.co.jp/hz/wishlist/ls/H7W3RRD7C5QG?ref_=wl_share

Patreon(ブログ・動画活動への応援)

月額での小さなご支援が、記事の執筆・検証環境の充実につながります。

https://www.patreon.com/user?u=84249391

Paypal

小さな支援が大きな力になります。

https://paypal.me/soup01threes?country.x=JP&locale.x=ja_JP

知ってたら助かること、届けたいだけです

あなたの応援が、知識の共有をもっと自由で持続可能なものにしてくれます。これからもどうぞよろしくお願いします。

soup01threes*gmail.com

https://x.com/3threes2

技術はひとりじゃもったいない。

Reference Link

シーメンス#Phoenix ContactのAXL E PN IOL4/0 DIO8 M12 6M-LとProfinetで接続しよう
今回の記事ではシーメンスのS7-1500とPhoenix ContactのAXL E PN IOL4/0 DIO8 M12 6M-L...
シーメンス#LIOLinkライブラリで動的にAXL E PN IOL4/0 IO-Linkパラメータを書き換えよう
今回の記事では、シーメンス製 S7-1500 と Phoenix Contact 製 AXL E PN IOL4/0 DIO8 M1...

http://soup01.com/ja/2026/02/13/post-16691/

IOL_COM?

FB IOL_COMは、Phoenix Contact IO-Linkモジュールとの非同期通信を可能にします。機能ブロックは、IO-Linkマスター上のIO-Linkデバイスでサービスの書き込みおよび/または読み取りに使用できます。

FB IOL_COM、異なるバスシステムで使用できます。AsyncComライブラリには、すべてのバスシステム用の機能ブロックが含まれています。IOL_COMは、udtAsyncCom構造体を介してAsyncComライブラリのFBと通信します。

AsyncComブロックのアドレス(ノードIDまたは通信リファレンス)が変更された場合は、FBを再起動してください。

IO-Linkデバイスにパラメータが書き込まれる場合、以下のIO-Linkマスターはこれらのパラメータをフラッシュメモリに保存します:

  • AXL E PN IOL4/4 EF M12 6M-L (1300926)
  • AXL E PN IOL4/0 DIO8 M12 6M-L (1300923)

注意するのは使用されているストレージ技術により、保持して保存されるパラメータは、特定の回数(通常100,000回から1,000,000回)しか書き込むことができないことです。周期的に変更される用途にはやめてください。

ブロック図

こちらはIOL_COMです。

入力パラメータ

名前

タイプ

説明

xActivate

BOOL

立ち上がりエッジ:Function Blockをアクティブ化します。立ち下がりエッジ:Function Blockを非アクティブ化します。

xPNIO_Data_Valid

BOOL

有効なPROFINET接続を評価するためのステータスビット(オプション)。

udtConfig

IOL_UDT_CONF

構成データ、以下を参照してください。

これらのデータは、現在のIOLマスターにデフォルト設定が適していない場合にのみ必要です。

iMode

INT

0(デフォルト):IOLマスターは書き込み操作後に読み取り操作を必要としません。

1:IOLマスターはIO-Link仕様に従って書き込み操作後に読み取り操作を必要とします。

xTrigger

BOOL

立ち上がりエッジでIO-Linkサービスが読み取りおよび/または書き込みされます。

xRead_Write

BOOL

TRUE:書き込みアクセス<br>FALSE:読み取りアクセス

iPort

INT

読み取りまたは書き込みを行うポート番号

0:IO-Linkマスター

1..8:ポート番号

wIndex

WORD

アクセスするIOLオブジェクトのインデックス

bSubIndex

BYTE

IOLオブジェクトのサブインデックス

iWriteLength

INT

書き込むバイト数。0〜231が許可されます。

iMode

IOLマスター

iMode

AXL E PN IOL8 DI4 M12 6M (2701519)

0

AXL E PN IOL8 DI4 M12 6P (2701513)

0

AXL E PN IOL4/4 EF M12 6M-L (1300926)

1

AXL E PN IOL4/0 DIO8 M12 6M-L (1300923)

1

AXL F IOL8 2H (1027843)

1

AXL SE IOL4 (1088132)

1

IOL MA8 PN DI8 (1072838)

0

udtConfig

構成データ。これらのデータは、現在のIOLマスターにデフォルト設定が適していない場合にのみ必要です。

名前

タイプ

説明

wIndex

WORD

PROFINET通信用のインデックス。詳細についてはIO-Link仕様を参照してください。<br><br>wIndexは以下のIOLマスターに対して設定する必要があります。

IOLマスター

wIndex

AXL E PN IOL8 DI4 M12 6M (2701519)

WORD#16#00FF

AXL E PN IOL8 DI4 M12 6P (2701513)

WORD#16#00FF

IOL MA8 PN DI8 (1072838)

WORD#16#00FF

AXL E PN IOL4/4 EF M12 6M-L (1300926) および AXL E PN IOL4/0 DIO8 M12 6M-L (1300923) には設定しないでください。

名前

タイプ

説明

tRetry

TIME

2回のリトライ間の時間。

tTimeout

TIME

グローバルタイムアウト時間。デフォルト = 5秒。サイクルタイムが長い周期的なタスクの場合は増加させる必要があります。

出力パラメータ

名前

タイプ

説明

xActive

BOOL

FALSE:Function Blockはアクティブではありません。

TRUE:Function Blockはアクティブです。xActiveがTRUEになった後は、それ以上のアクションを開始しないでください。

xDone

BOOL

TRUE:サービスの書き込み/読み取りが正常に完了しました。このパラメータは、xTriggerがTrue である限り(少なくとも1サイクル)Trueになります。

xBusy

BOOL

FALSE:Function Blockは次のアクセスの準備ができています。

TRUE:Function Blockはサービス実行でビジーです。

xError

BOOL

TRUE:エラーが発生しました。

wDiagCode

WORD

診断コード

dwAddDiagCode

DWORD

追加の診断コード。

iReadLength

INT

受信したデータバイト数

udtDiag

IOL_UDT_DIAG

追加の診断情報

udtDiag

名前

タイプ

説明

iState

INT

内部ステートマシンの状態。

入出力パラメータ

名前

タイプ

説明

arrIOL_ReadData

IOL_ARR_B_T_64

この配列には受信したデータが含まれます。読み取りアクセスが成功するたびに、この配列のデータは新しく受信したデータによって上書きされます。

名前

タイプ

説明

arrIOL_WriteData

IOL_ARR_B_T_64

この配列には書き込むデータが含まれます。

udtAsynCom

ASYN_UDT_COM

非同期通信用のデータ交換構造体。

AsynCom Function Blockに接続されます。

Implementation

これからプロジェクトを作成していきましょう。

IO-Link_basicライブラリダウンロード

下記のページから今回記事で使用するIOL_BasicライブラリをDownloadしてください。

https://www.plcnextstore.com/eu/app/1705

PLCNEXT側

次はPLCNEXT AXCF2152側のプロジェクトを作成します。

ライブラリ追加

PLCNEXT Enginnerの右側にあるLibrariesー>Librariesを右クリックし→Add User Libraryをクリックします。

先ほどPLCNEXT StoreからDownloadしたライブラリを選択してください。

Done!新しいUser ライブラリがインストールされました。

プログラム

次はプログラムを作成します。

VAR‐AsynCom関連

名前

タイプ

説明

fbAsynCom_PN_2

AsynCom_PN_2

PROFINET用非同期通信Function Block

xAsynCom_PN_2_Busy

BOOL

非同期通信がビジー状態かを示すステータス

dwfbAsynCom_PN_2_DiagCodeConnect

DWORD

接続時の診断コード

dwfbAsynCom_PN_2_DiagCodeRead

DWORD

読み取り時の診断コード

dwfbAsynCom_PN_2_DiagCodeWrite

DWORD

書き込み時の診断コード

VAR-IOL_COM関連

名前

タイプ

説明

fbIOL_COM_5

IOL_COM_5

IO-Link通信Function Block

xActivate

BOOL

Function Blockのアクティブ化信号

xTrigger

BOOL

読み取り/書き込み操作のトリガー信号

xRead_Write

BOOL

読み取り(FALSE)/書き込み(TRUE)の選択

arrIOL_ReadData

IOL_ARR_DATA

IO-Linkから読み取ったデータを格納する配列

arrIOL_WriteData

IOL_ARR_DATA

IO-Linkに書き込むデータを格納する配列

udtAsynCom

ASYN_UDT_COM

非同期通信用データ交換構造体

xfbIOL_COM_5_Busy

BOOL

Function Blockがビジー状態かを示すステータス

xfbIOL_COM_5_Done

BOOL

操作が正常に完了したことを示すステータス

xfbIOL_COM_5_Error

BOOL

エラー発生を示すステータス

wfbIOL_COM_5_DiagCode

WORD

診断コード

dwfbIOL_COM_5_AddDiagCode

DWORD

追加の診断コード

ifbIOL_COM_5_ReadLength

INT

読み取ったデータのバイト数

udtDiag

IOL_UDT_DIAG

追加の診断情報

xfbIOL_COM_5_Active

BOOL

Function Blockがアクティブ状態かを示すステータス

bfbIOL_COM_5_SubIndex

BYTE

IO-Linkオブジェクトのサブインデックス

wfbIOL_COM_5_Index

WORD

IO-Linkオブジェクトのインデックス

xDefaultColor_LightYellow

BOOL

デフォルトカラー:ライトイエローの設定フラグ

xDefaultColor_Purple

BOOL

デフォルトカラー:パープルの設定フラグ

ifbIOL_COM_5_WriteLength

INT

書き込むデータのバイト数

Code

今回はラダーとSTにも兼用します。

Code1

このコードは、IO-Linkデバイスに色設定を書き込む処理です。

  • 書き込みモード(xRead_Write = TRUE)の場合のみ実行
  • パープル選択時:インデックス0x65、サブインデックス6に値7を書き込み
  • ライトイエロー選択時:インデックス0x65、サブインデックス6に値5を書き込み
  • どちらも1バイトのデータ書き込み

if xRead_Write THEN
if xDefaultColor_Purple THEN
wfbIOL_COM_5_Index:=16#65;
bfbIOL_COM_5_SubIndex:=byte#6;
arrIOL_WriteData[0]:=7;
ifbIOL_COM_5_WriteLength:=1;
ELSIF xDefaultColor_LightYellow THEN
wfbIOL_COM_5_Index:=16#65;
bfbIOL_COM_5_SubIndex:=byte#6;
arrIOL_WriteData[0]:=5;
ifbIOL_COM_5_WriteLength:=1;
end_if;
end_if;

IOLINK BLOCK

こちらのラダープログラムはIOL_COM_5がIO-Linkデバイスとの通信を管理し、AsynCom_PN_2がPROFINETネットワーク経由での非同期通信を処理します。

dwNodeID設定

AsynCom_PNにdwNodeIDというパラメータを個別に設定する必要があります。

例えば今回の記事ではAXL E PN IOL4/0 DIO8 M12 6M-Lを使用してますので、IOL4/0→Slot1を開きます。

All→Node IDに18が自動的に設定され、その値をdwNodeIDに入れてください。

ダウンロード

プロジェクトをAXCF2152にDownloadしてください。

結果

最初にxActivateをTRUEにします。IOL_COMのwDiagCodeが16#8000に変わります。

最初にはPort2ついてるIO‐LINKデバイスのProduct Keyを呼び出すだけなので、xRead_WriteをFalseにします。

xTriggerをTrueにし、通信を開始します。そしてiReadLengthが16だと返してます。

こちらは読み出しされたデータです。

そのByte配列のデータはASCIIコードだと1801970になります。

Index

HEX

ASCII

[0]

31

1

[1]

38

8

[2]

30

0

[3]

31

1

[4]

39

9

[5]

37

7

[6]

30

0

実際PORT2と接続してるPSD-SC IOL S15 AEと一致しています。

今度はIOL_COM経由でPSD-SC IOL S15 AEのパラメータを書き込んでみます。下図のプログラムはPSD-SC IOL S15 AEのSeg1のDefault色を紫するか黄色にするかを設定します。

Done!なにもエラーがありません。

下記のLinkから動作確認できます。

ダウンロード

こちらのLinkから今回記事で作成したプロジェクトをDownloadできます。

https://github.com/soup01Threes/PLCNEXT/blob/main/PROJECT_IOLINK_Basic_Libraray_Example.pcweax

シェアする

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

フォローする