今回の記事では、Phoenix Contact AXCF2152 と Phoenix Contact 製 AXL E PN IOL4/0 DIO8 M12 6M-L を PROFINET で接続するだけでなく、
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
技術はひとりじゃもったいない。
Reference Link
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してください。

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
|
|---|
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