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

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

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

  • AXL E IOL DIO8 M12 3M
  • PSD-SC IOL S15 AE
  • Murrelektronik 5000-00501-1300001
    (アナログ信号を IO-Link に変換するコンバータ)

さ、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...

FB

今回の記事で使用するシーメンスの標準関数を説明します。

SCALE_X: Scale

「Scale」命令を使用すると、VALUE入力の値を指定した値範囲にマッピングしてスケーリングすることができます。「Scale」命令が実行されると、VALUE入力の浮動小数点値がMINおよびMAXパラメータで定義された値範囲にスケーリングされます。スケーリングの結果は整数となり、RET_VAL出力に格納されます。

以下の図は、値をスケーリングする方法の例を示しています。

「Scale」命令は、次の式を使用して動作します。

OUT = [VALUE ∗ (MAX – MIN)] + MIN

パラメータ

以下の表は「Scale」命令のパラメータを示しています。

パラメータ

宣言

データ型

メモリ領域

説明

MIN

Input

整数、浮動小数点数

I, Q, M, D, Lまたは定数

値範囲の下限

VALUE

Input

浮動小数点数

I, Q, M, D, Lまたは定数

スケーリングする値。定数を入力する場合は、宣言が必要です。

MAX

Input

整数、浮動小数点数

I, Q, M, D, Lまたは定数

値範囲の上限

RET_VAL

Output

整数、浮動小数点数

I, Q, M, D, L

スケーリングの結果

NORM_X: Normalize

「Normalize」命令を使用すると、VALUE入力に与えられたタグの値を、線形スケールにマッピングして正規化できます。

  • MINおよびMAXパラメータを用いて、スケールに適用される値の範囲を定義します。
  • RET_VAL出力には、正規化対象の値がこの範囲内のどの位置にあるかに応じて計算された結果が、浮動小数点数として出力・保存されます。
  • 正規化する値がMIN入力の値と等しい場合、OUT出力は「0.0」となります。
  • 正規化する値がMAX入力の値と等しい場合、OUT出力は「1.0」となります。

次の図は、値を正規化する方法の一例を示しています。

「Normalize」命令は、以下の数式に基づいて動作します。

OUT = (VALUE – MIN) / (MAX – MIN)

パラメータ

次の表は、「Normalize」命令のパラメータを示しています。

パラメータ

宣言

データ型

メモリ領域

説明

MIN

入力

整数、浮動小数点数

I, Q, M, D, L

値範囲の下限

VALUE

入力

整数、浮動小数点数

I, Q, M, D, L

正規化される値

MAX

入力

整数、浮動小数点数

I, Q, M, D, L

値範囲の上限

RET_VAL

出力

浮動小数点数

I, Q, M, D, L

正規化結果

動作モード:Filling Levelモード

PSD-SC IOL S15 AEのFilling Levelでは、アナログ値がシグナルタワーによって表示されます。各セグメントは充填レベルのインジケータとして使用され、すべてのセグメントが消灯している状態を 0%、すべてのセグメントが点灯している状態を 100%とする範囲で表現されます。

これにより、注文の進捗状況や、機械プロセスにおける材料の有無を、上昇または下降する照光表示として正確に可視化することが可能になります。

色の設定は、グローバルパラメータ「Filling level mode(フィリングレベルモード)」によって行われます。選択可能なオプションは次の2つです。

  • セグメント 1~15 または 1~9 の設定を適用
  • セグメント 1 の設定を適用

プロセスデータ:フィリングレベルモード

8ビットのプロセスデータが処理されます。
許容される値の範囲は 0〜 100 です。

ビット

7

6

5

4

3

2

1

0

説明

0 ~ 100(%値)

SIMATIC S7-1500/1200 IO-Link用ライブラリ (LIOLink)

IO-Link 通信規格は、センサやスイッチングデバイスをコントローラレベルへインテリジェントに接続することで、新たな可能性を切り開きます。中核となる要素は、フィールドレベルにおけるスイッチング、保護、そして監視です。

IO-Link システムは、IO-Link マスタと1台以上の IO-Link デバイス(センサまたはアクチュエータ)で構成されます。IO-Link マスタは上位コントローラへのインタフェースとして機能し、接続された IO-Link デバイスとの通信を制御します。

LIOLinkライブラリは、SIMATIC コントローラと IO-Link マスタ、または IO-Link デバイスとの通信を容易にするためのブロックおよび PLC データ型を提供します。

機能の範囲

このライブラリに含まれるブロックは、次の4つのグループに分類されています。

  • 汎用ベースブロック
    SIMATIC IO-Link マスタおよびあらゆる IO-Link デバイスとの通信や、IO-Link 診断情報の読み出しに使用される基本ブロックです。
  • マスタ専用ブロック
    SIMATIC IO-Link マスタのバックアップおよびリストア、ならびにポート機能の実行に使用されるブロックです。
  • デバイス専用ブロック
    特定の IO-Link デバイスとの通信を簡素化するため、それぞれ専用に最適化されたインタフェースと、あらかじめ定義された PLC データ型を備えています。これらのブロックはベースブロックを基盤としています。
  • プロファイルブロック
    特定の IO-Link プロファイルを介したデバイス通信を簡素化するブロックです。これらもベースブロックを基盤としています。

有効範囲

このライブラリは TIA Portal V18 以降で使用可能です。ライブラリ内のすべてのブロックは、SIMATIC S7-1200 / S7-1500 コントローラで利用できます。

LIOLink_Device

今回の記事ではこちらのFBを使用しIOLinkデバイスのパラメータを上書きします。

パラメータ一覧

制御・設定系

名前

Pタイプ

データ型

説明

execute

IN

Bool

機能を実行する要求

hwID

IN

HW_IO

IO-Link マスタ、または最初のサブモジュールのハードウェア識別子

cap(任意)

IN

Int

アクセス点(Client Access Point)Siemens の IO-Link マスタ使用時は自動検出されるため通常は不要。このパラメータを変更すると自動検出は行われない

readWrite

IN

Bool

モード指定FALSE:読み取りTRUE:書き込み

port

IN

Int

IO-Link デバイスが接続されているポート番号有効範囲:0..63

index

IN

Int

パラメータインデックス有効範囲:0..3276765535(0xFFFF):IOL-D ポート機能

subindex

IN

Int

パラメータサブインデックス0:レコード全体1..255:レコード内のパラメータ

writeLen

IN

Int

書き込みデータ長(バイト、正味データ)有効範囲(書き込み時):1..232読み取り時は無関係

timeout

IN

Time

コマンドがキャンセルされるまでの時間

pollingPeriod(任意)

IN

Time

データセットが送信されるまでブロックが待機する可変調整時間デフォルト値:100 ms

ステータス系

名前

Pタイプ

データ型

説明

done

OUT

Bool

TRUE:コマンドが正常に実行された

busy

OUT

Bool

TRUE:コマンドを処理中

error

OUT

Bool

TRUE:FB 処理中にエラーが発生した

status

OUT

Word

16#0000–16#7FFF:FB のステータス16#8000–16#FFFF:エラーコード(セクション 3.1.4 参照)

データ・診断系

名前

Pタイプ

データ型

説明

diagnostics

OUT

“IOLink_typeDiagnostics”

FB の詳細診断情報(セクション 3.1.4 参照)

readLen

OUT

Int

読み取ったデータ長(バイト、正味データ)

record

IN_OUT

Array[*] of bytes

読み取り/書き込み対象データの送受信バッファ有効範囲:0..231

動作原理

アドレッシング

目的のデータセットは、「index」および「subindex」パラメータによって一意に指定されます。
データを書き込む場合、「writeLen」パラメータで指定されたデータ量が IO-Link デバイスへ送信されます。このパラメータは読み取り時には無関係です。

IO-Link マスタへのアクセスポイントは、「cap」パラメータ(Client Access Point)によって定義されます。Siemens AG 製の IO-Link マスタを使用する場合、検出は自動的に行われます。ただし、このパラメータを変更すると自動検出は無効になります。通常、アクセスポイントは 0xB400 または 0x00E3 です。

通信の時系列シーケンス

データ通信は、入力「execute」に立ち上がりエッジが入ることで開始されます。
出力「done」「busy」「error」「status」は、コマンドの実行状態を示します。

正常に実行された後、「len」パラメータには、受信または書き込みされたデータの長さが表示されます。

入力「execute」がセットされている間、出力パラメータはその値を保持します。
FB の処理が完了する前に「execute」入力がリセットされた場合でも、コマンド処理後の1サイクル間は出力パラメータの値が出力されます。

処理時間が「timeout」パラメータで指定された時間を超えた場合、処理は中断され、エラーが出力されます。

注意

データ転送は、生データ(バイト配列=ARRAY of bytes)の形式で行われます。そのため、この状態のままではデータを直接解釈することはできません。

データの整形や解釈は、デバイスメーカーの仕様に従ってユーザー側で行う必要があります(データ構造体やデータ型へコピーするなど)。

エラーハンドリング

出力「status」は現在のステータスおよびエラー状態を出力します。一方、出力「diagnostics」は、エラー発生時に詳細情報を含む診断構造体を提供します。

ステータス

意味

16#0000

処理完了。警告なし、追加情報なし

16#7000

処理中の操作なし(初期値)

16#7001

新しいコマンドの最初の呼び出し(「execute」の立ち上がりエッジ)

16#7002

2回目以降の呼び出し

16#8201

未対応のポート

16#8202

未対応のインデックス

16#8203

未対応のサブインデックス

16#8205

「writeLen」パラメータの長さが、書き込まれるデータセットと一致していない

16#8401

IO-Link マスタがエラーコードを報告(詳細は「diagnostics」を参照)

16#8402

受信したデータセットが操作に一致していない

16#8403

指定された時間内に処理を完了できなかった

16#8600

内部ステートマシンが未定義状態に到達した

16#8601

システム関数 WRREC がエラーを報告

16#8602

システム関数 RDREC がエラーを報告

診断

エラーが発生した場合、出力「diagnostics」には、現在保留中のエラーに関する詳細情報が提供されます。

タグ

説明

status

FB のインタフェースパラメータ「status」における、直前のステータスコード

subfunctionStatus

システム関数 RDREC/WRREC、または IO-Link マスタからのエラーコードのステータス

(%W1:IO-Link マスタのエラーコード、%W0:ISDU エラーコード)

詳細については、該当するシステム関数のオンラインヘルプ、または IO-Link マスタ/デバイスのマニュアルを参照

stateNumber

エラーが発生した際の FB 内ステートマシンの状態番号

Implementation

シーメンス側

最初にシーメンスS7-1500側を構築します。

ライブラリダウンロード

シーメンスのLIOLINKライブラリを使用するには、下記のLinkからライブラリをDownloadしてください。

https://support.industry.siemens.com/cs/document/82981502/simatic-s7-1500-1200-library-for-io-link-(liolink)?dti=0&lc=en-BD

次はDownloadしたZIP Fileを解凍します。

TIAを開き、Global Library→下図に示すボタンをクリックします。

先程解凍したFileにある.al18を開きます。

今回記事で使用するにはTIA V20なので、Upgradeボタンをクリックします。

少々お待ち下さい…

Done!LIOLINKライブラリが追加されました。

次はBase blocks→LIOLink_Deviceをプロジェクトに追加します。

Done!

AXL E IOL DIO8 M12 3M-IO-Linkパラメータ

前回の記事ではAXL E IOL DIO8 M12 3Mを構築し、初期パラメータを構築しました。今回は下記の”Restore factory settings”Checkboxを設定することによって、毎回AXL E IOL DIO8 M12 3Mにもパラメータが初期化されます。

プログラム

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

udt4Bytes

データ型名は udt4Bytes で、内部に 4バイト分の生データを保持するための構造になっています。

udtAXL_E_PN_IN_IOLINKStatus_Module

この UDT は、IO-Link モジュールの各ポート状態をまとめて扱うためのステータス用データ型です。各ポート(1〜4)の状態を、用途別に Bool 配列で保持します。

udtAXL_E_PN_IN_StatusModule

この UDT は、IO-Link モジュール全体の電源・デバイス状態・各ポート系統のエラー状態を集約して保持するためのステータス用データ型です。

「モジュールとして今正常なのか」を判断するための情報が一か所にまとめられています。

udtAXL_E_PN_IN

この UDT は、これまでに見てきた 2つのステータス用 UDT を内包し、

AXL E PN IN モジュール全体の状態を1つの構造体として扱うためのデータ型です。

dbILINKTypeDiagnos

Data Blockをさくせし、TypeをLIOLink_typeDiagnosticsに指定します。

Done!

dbIOLINKRecordArray

こちらは長さ1000のByte配列を定義したDBです。

dbSt136InData

こちらはAXL E IOL DIO8 M12 3Mの入力データを分解し格納するDBです。

PLC Tags

こちらは今回記事で定義したTagsです。

fbAXL_E_PN_IN

こちらのFBはAXL E IOL DIO8 M12 3Mの入力データを分解し格納します。

IO-Link から受信した ステータス生データ(IOLinkStatus/InputStatus)を入力として受け取り、AXL E PN IN モジュール用の構造化ステータス(udtAXL_E_PN_IN)に変換して出力します。

VAR

こちらはFBのインタフェースです。

Prgoram

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

Network2

IO-Link から受信した ステータス生データの0バイト目・0ビット目(raw000.%X0)を、デバイスの過温/低温異常フラグに変換 しています。

Network3

IO-Link から受信した ステータス生データの0バイト目・1ビット目(raw[0].%X1)を、センサ電源の低電圧(UnderVoltage)異常フラグに変換 しています。

Network4

IO-Link から受信した ステータス生データの0バイト目・2ビット目(raw[0].%X2)を、センサ電源の過電圧(OverVoltage)異常フラグに変換 しています。

Network5

IO-Link から受信した ステータス生データの1バイト目の各ビット(raw[1].%X0~%X3)を、ポート1~4それぞれのセンサ電源異常フラグ(SensorSupplyError)に変換 しています。

Network6

IO-Link から受信した ステータス生データの2バイト目の各ビット(raw[2].%X0~%X3)を、ポート1~4の出力電源異常フラグ(OutputSupplyError)に変換 しています。

Network7

IO-Link から受信した ステータス生データの3バイト目の各ビット(raw[3].%X0~%X3)を、ポート1~4の IO-Link 電源異常フラグ(IOLINKSupplyError)に変換 しています。

Network9

IO-Link から受信した リンクステータス生データの0バイト目の各ビット(raw[0].%X0~%X3)を、ポート1~4それぞれの IO-Link 接続状態フラグ(IOLINKStatus)に変換 しています。

Network10

IO-Link から受信した リンクステータス生データの1バイト目の各ビット(raw[1].%X0~%X3)を、ポート1~4それぞれの IO-Link プロセスデータ有効フラグ(IOLINKPDValid)に変換 しています。

Network11

IO-Link から受信した リンクステータス生データの2バイト目の各ビット(raw[2].%X0~%X3)を、ポート1~4それぞれの Pin4 の DI 状態フラグ(IOLINKDIStatePin4)に変換 しています。

OB1

最後はOB1のプログラムを作成します。

VAR

こちらはOB1で定義した変数です。

Program

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

Network2

IO-Link マスタから取得した IO-Link ステータス生データ(IOLinkStatus)と入力ステータス生データ(InputStatus)を FB に渡し、AXL E PN IN モジュール用の構造化ステータス(udtAXL_E_PN_IN)へ変換・集約 しています。

Network3

Murrelektronikの5000-00501-1300001アナログからIOLINKへの変換器から取得した アナログ生値(Int)を、NORM_X で 0~1 に正規化し、その結果を SCALE_X で 0.0~11.7 の実スケール値に変換 しています。

Network4

入力ビットの状態から 点灯段数(LightOrder)を数値化し、それを10倍して IO-Link 用の照光レベル指令値(バイトデータ)を計算 しています。

Network5

シグナルタワーモード/フィリングレベルモードの切り替え入力(b1.%X6/b1.%X7)を検出し、IO-Link パラメータ書き込み要求フラグ(xIOLINKParasWrite)をセット しています。

Network6

モード切替ビット(b1.%X6)が ON のとき、

IO-Link パラメータ書き込み用に「Index・SubIndex・WriteLen・Record 値(16#64)」を設定 しています。

Network7

モード切替ビット(b1.%X7)が ON のとき、

IO-Link パラメータ書き込み用に「Index・SubIndex・WriteLen・Record 値(16#64)」を設定 しています。

Network8

設定した Index/SubIndex/データを使って、IO-Link_Device FB を実行し、IO-Link デバイスへパラメータの読み書きを行い、その結果(完了・ビジー・エラー・ステータス)を取得しています。

LIOLinkの使用方法

補足ですが、LIOLinkライブラリの使用はいつものFB操作と同じです。

Instanceのタイプを指定します。

Cap入力変数

capというパラメータがDefault上に隠されており、Blockの一番下にある矢印ボタンをクリックしてください。

capパラメータが表示されます。

そこに16#B400をいれてください。

hwID

LIOLink_Deviceライブラリを使用するには、もう1つ必要なパラメータはhwIDです。

AXL E IOL DIO8 M12 3MをDevice Viewに切り替え→Properties→System constantsを開き、中にある”AXL-E-PN-IOL4-0-DIO8~Head”を選択すればOKです。

Network9

IO-Link 通信が完了(Done)またはエラー(Error)になった時点で、パラメータ書き込み要求フラグ(xIOLINKParasWrite)をリセット** しています。

ダウンロード

最後はプロジェクトをS7-1500にDownloadしましょう。

結果

Done!Profinet通信はエラーなく成立しました。

こちらの動画で動作確認できます。

シェアする

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

フォローする