今回の記事ではPhoenix Contact PLCNEXT AXCF2152とPhoenix ContactのAXL E PN IOL4/0 DIO8 M12 6M-LをProfinetで接続する手順を説明します。また、こちらは今回使用する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
MEMORY_COPY
今回記事で使用するMEMORY_COPY関数はランタイムシステムのデータ領域間でデータをコピーする関数でコピー元(Source data area)からコピー先(Destination data area)へ、指定したバイト数のデータを転送します。
パラメータ説明
SRC
- データ型:ANY
- 説明:コピー元(ソース)のデータ領域
- 注意:
-
MyArray[5] のような配列要素指定は可能
-
ただし、その場合は配列全体の先頭ではなく、その要素単体を指す
-
MyArray[5] のような配列要素指定は可能
SRC_OFF
- データ型:ANY_INT
- 説明:ソースデータ領域の先頭からのバイト単位オフセット
- 条件:0 以上であること
DST
- データ型:ANY
- 説明:コピー先(宛先)のデータ領域
- 注意:
-
MyArray[5] の指定は可能
-
ただし、配列全体の開始位置ではなく、その要素のみを指す
-
MyArray[5] の指定は可能
DST_OFF
- データ型:ANY_INT
- 説明:宛先データ領域の先頭からのバイト単位オフセット
- 条件:0 以上であること
CNT
- 説明:コピーするバイト数
出力(OUT)
- データ型:UINT
- 説明:コピー処理のステータスコード
OUT値 | 内容 |
|---|---|
0 | 正常終了 |
1 | SRC または DST の VAR_IN_OUT 記述子が不正(内部エラー) |
2 | SRC のサイズ不足、または SRC_OFF が不正(CNT が SRC – SRC_OFF を超えている) |
3 | DST のサイズ不足、または DST_OFF が不正(CNT + DST_OFF が宛先サイズを超えている) |
12 | CNT の値が範囲外 |
エラー動作(Error behavior)
-
OUT ≠ 0 の場合、エラーコードが返される
-
エラー発生時:
- ENO = FALSE
-
コピー処理は失敗扱い
- ENO = FALSE
EN / ENO の動作
- EN = TRUE:POU 実行
- EN = FALSE:POU は実行されず、ENO = FALSE
- 実行中にエラーが発生した場合も ENO = FALSE
Implementation
これからプロジェクトを作成していきましょう。
PLCNEXT 側
最初にPLCNEXT AXCF2152側から構築します。

PLCNEXTコントローラをスキャン
Project ICONをクリックします。

Project→Online Controllersで下記のICONをクリックし、ネットワークにあるデバイスを検索します。

Done!AXCF 2152を検索しました。そのAXCF 2152を右クリック→Add to Projectをクリックします

コントローラーの選択画面が表示されます。

今回記事で使用するのはAXCF 2152 の2025.6バージョンです。

OKをクリックします。

本体のAXCF 2152のUser nameとPassword入力します。

Done!

GDSMLのインポート
PLCNEXT EngineerツールからGSDMLをIMPORTするために、File→Import→Import GSDML Filesをクリックします。

先ほどDownloadしたGSDMLを開きます。

OKをクリックします。

Profinetネットワーク構築
次はProfinetネットワークを構築するために、Project→Profinetを開きます。

今回の記事で使用するAXL E PN IOL4/0 DIO8 M12 6M-Lを挿入します。


IPとデバイス名
次はAXL E PN IOL4/0 DIO8 M12 6M-Lのデバイス名を設定します。

下記で示した枠でAXL E PN IOL4/0 DIO8 M12 6M-LのIPアドレス・デバイス名を設定します。

次はAXL E PN IOL4/0 DIO8 M12 6M-LのPort1・Port2にある”Auto Negotiation”をNOに設定します。

また、AXL E PN IOL4/0 DIO8 M12 6M-LのPort2に接続するProfinetデバイスがないので、Port2の”Check MAU Type”をNoに設定します。

スロット
今度はAXL E PN IOL4/0 DIO8 M12 6M-Lのスロットを設定します。

下図の赤枠に示したのはAXL E PN IOL4/0 DIO8 M12 6M-Lの現在のスロット設定です。Default上ではPort1-Port4まではデジタル入力になっています。

次はPLCNEXT EnginnerからSlotに設定変更を行います。

各Portに接続してるIO-LINKデバイスに合わせてByteIN/OUT数を設定します。

Done!また最後のPORTはPhoenix ContactのAXL E IOL DIO8 M12 3M に設定しましょう。

IO-LINKデバイスパラメータ
また、各IO−LINK PORTにも接続されているIO-LINKデバイスに個別の初期パラメータを設定することが可能です。

DUT
プロジェクトに4Bytes・3Bytesと1Bytesの配列を定義します。
TYPE
|
|---|
次はplc next engineerからGlobal変数を宣言するためにProject→IEC 61131-3をクリックします。

プロジェクトで必要な変数を定義します。

新しい変数を追加する場合は、右クリック→Add Variablesしてください。

fbshitbits
こちらのFBはxshiftの立ち上がりエッジで、ビットを左または右にシフトしながら積み上げるプログラムです。
変数 | 型 | 説明 |
|---|---|---|
xshift | BOOL | シフト実行トリガー |
xdirection | BOOL | FALSE=左シフト / TRUE=右シフト |
bValue | BYTE | ビットパターン出力 |
iCount | INT | シフト回数カウンタ |
iresetOffset | INT | リセットまでの回数設定 |
fbR_TRIG | R_TRIG | 立ち上がりエッジ検出 |

初期: 0000_0001
1回目: 0000_0011
2回目: 0000_0111
3回目: 0000_1111
↓
リセット → 0000_0001
の動きになります。
fbR_TRIG(CLK:=xshift);
|
|---|
MAIN
次はMAINプログラムを作成するために、PLC ENGINEER→右側→COMPONENTS→Programs→新しいプログラムを作成しましょう。

2つの異なる周期でビットシフトを行い、PROFINETデバイス(Axioline E I/O-Linkモジュール)へ出力するプログラムになります。

ビットパターンの変化に関しては:
wControlWord(0.1秒周期)- 流れるパターン:
0000_0000_0000_0001
0000_0000_0000_0010
0000_0000_0000_0100
↓ (1ビットが移動)
1000_0000_0000_0000
↓ リセット
0000_0000_0000_0001
bControlByte(1秒周期)- 積み上げパターン:
0000_0001
0000_0011
0000_0111
0000_1111
↓ リセット(4回到達)
0000_0001
fbTimer(in:=not fbTimer.Q,PT:=T#0.1s);
|
|---|
プログラムをタスクに追加
次はプログラムをRuntimeに実装するように設定しましょう。ここでPLCnextをクリックします。

先ほど追加したプログラムをTaskに追加しましょう。

接続
今度はPLC ENGINEERとAXF2152と接続するために、PLCを選択し→右クリック→Connect/Disconnectします。

ダウンロード
次はWrite and start Project(With sources)をクリックしプログラムをAXF2152にDownloadしましょう。

結果
AXF2152のProfinet通信状態を確認するために、AXF2152のWeb Serverにアクセスし→Overviewを開きます。下図のようにBF-Cが赤ではなければ通信OKです。

また、Diagnostics→PROFINET→TREE VIEWからもPROFINETの通信状態を確認できます。
各Portの通信状態も正常です。

こちらの動画から動作確認できます。
https://youtube.com/shorts/VYD2tp0OLcc
プロジェクトダウンロード
こちらのLINKから今回の記事のプロジェクトをDownloadしてください。
https://github.com/soup01Threes/PLCNEXT/blob/main/PROJECT_IOLINK_BasicConfiguration.pcweax