1 ユーザ定義タグFB
こんにちは。SMATEXエンジニアリングです。
この記事では、PID制御のまわりで毎回必要になりやすい工学値変換、フィルタ、上下限警報、モード切換を、ユーザ定義タグFBとしてひとつの標準部品にまとめる流れを紹介します。
1.1 ユーザ定義タグFBとは
先に結論から言うと、ユーザ定義タグFBは「現場ごとに繰り返し作るPID周辺回路を、再利用しやすい形にまとめるための仕組み」です。通常のFBによる部品化に加えて、タグFBとして扱えるため、フェースプレートとの連携まで見据えられる点が特徴です。
ユーザ定義FBとは、メーカ定義タグFBの機能を利用しながら、ユーザー自身で作成した処理を組み込めるFBです。タグFBとして扱えるため、フェースプレート連携も可能です。
たとえばPID制御のタグFBに対して、運転許可条件、インターロック、上下限警報、手動/自動切替の条件、異常時の出力固定処理などを追加し、それらをひとつのFBとしてまとめることができます。
これにより、毎回同じようなPID周辺回路を作り込む必要がなくなり、設備ごとの標準制御部品として再利用できます。単にメーカ定義タグFBをそのまま使うのではなく、自社仕様や装置仕様に合わせた処理を加えたオリジナルのタグFBを作れる点がメリットです。
つまり、メーカ定義タグFBをベースに、よく使う周辺処理をセット化して、監視・操作はフェースプレートと連携させながら使えるようにする仕組みです。
1.2 メリット
ユーザ定義タグFBのメリットは、メーカ定義タグFBをそのまま使うだけでは足りない部分を、自社標準の処理としてまとめられる点です。PID制御の周辺には、運転許可条件、インターロック、上下限警報、フィルタ、モード切換など、毎回似たような回路が出てきます。これをループごとに個別で作り込むと、修正漏れや仕様違いが出やすくなります。
ユーザ定義タグFBにしておけば、たとえばLIC001、FIC001、TIC001のようにタグ名を変えて配置するだけで、同じ考え方の制御ループを横展開できます。ポンプやバルブの共通FBと同じで、一度標準形を作っておけば、以降は設定値や接続先を変えるだけで使い回せるので、設計工数とデバッグ工数を減らせます。
さらに、タグFBとして登録できるので、タグデータやフェースプレートと連携できます。通常のユーザ定義FBでも部品化はできますが、フェースプレートで監視・操作する計装ループとして扱いたい場合は、ユーザ定義タグFBにするメリットが大きいです。
正直言うと、最初は通常のFBとの違いが少し分かりづらいです。ただ、メーカ定義タグFBをベースにして、現場ごとの標準処理を足した「自社標準のPID部品」を作るもの、と考えるとイメージしやすいと思います。
2 使ってみよう(ユーザ定義FB)
今回はPID制御のタグFBに工学値変換、フィルタ回路、上下限警報、モード切換機能をつけていきます。なお、「MELSEC計装テクニカルガイドの2.3.1 ユーザ定義タグFBのしくみ(概念)」と同じ回路を作っていきます。
前回はメーカ定義タグFBをそのまま使用してPIDループを作成しました。今回はそこから一歩進めて、PIDの前後に必要になる処理をまとめて、ひとつのユーザ定義タグFBとして作成します。
計装ループを実際の設備で使う場合、PID演算だけでは少し足りません。アナログ入力値を工学値へ変換したり、入力値にフィルタをかけたり、上下限警報を判定したり、手動・自動・カスケードのモード切換を行ったりします。これらを毎回バラバラに作るのではなく、PIDループ用の標準部品としてまとめるのが今回の目的です。
2.1 設定
まずはユーザ定義タグFBの器を作成します。通常のFBを作る時と同じようにFB/FUNからデータを新規作成しますが、ここでは「タグFBとして使用する」を「はい」にするのがポイントです。
タグタイプを今回は「PID」を選択します。これにより、作成したFBを通常のFBではなく、PID系のタグFBとして扱えるようになります。フェースプレートと連携させたい場合、この設定が重要になります。
FB/FUNを右クリック。
「データ新規作成」をクリック。
| データ名 | PID |
| タグFBとして使用する | はい |
| タグタイプ | PID |
ここまでの設定で、PIDという名前のユーザ定義タグFBを作る準備ができました。タグタイプとは、使用するフェースプレートのことになります。ここの設定を変えれば、PIDのフェースプレート以外も使えます。次は、このPIDの中に必要な部品を配置していきます。

2.2 プログラム作成
「部品選択」から下記の部品を選択。
下記機能の詳細は「MELSEC iQ-R プログラミングマニュアル (プロセス制御FB/命令編) _付1_タグデータ一覧」参照
部品名だけを見ると難しく感じますが、流れとしては「入力を取り込む」「値を整える」「警報を判定する」「PID演算する」「出力へ渡す」という順番です。表では、それぞれのFBがこの流れのどこを担当するかを確認します。
ユーザ定義タグFBの中では、タグアクセスFBやプロセス制御FBを組み合わせて処理を作ります。今回は下記の部品を使って、入力処理、フィルタ処理、警報判定、PID演算、出力処理、モード切換をひとつの流れにします。
ざっくり言うと、タグを触る窓口がタグアクセスFBで、制御演算をする部品がプロセス制御FBです。
タグアクセスFBは、タグFBが持っているタグデータに対して、入力値を入れたり、出力値を取り出したり、運転モードを切り換えたりするためのFBです。今回でいうと「M+P_IN」「M+P_OUT1」「M+P_MCHG」がこれにあたります。タグFBの外側の信号と、タグFB内部のデータをつなぐ役割ですね。
一方で、プロセス制御FBは、実際の制御処理を行うFBです。PID演算、フィルタ処理、上下限警報の判定など、計装制御でよく使う処理が部品として用意されています。今回でいうと「M+P_PID」「M+P_LLAG」「M+P_PHPL」がこれにあたります。
つまり、タグアクセスFBでデータを出し入れし、そのデータをプロセス制御FBで演算・判定して、最後にまたタグアクセスFBで外側へ渡す、という流れになります。
| 部品名 | タグ名 | 機能 |
| M+P_MCHG | MCHG | 制御モードを切り換える |
| M+P_IN | IN | アナログ入力値を取り込む |
| M+P_LLAG | LLAG | 入力信号にフィルタ処理を行う |
| M+P_PHPL | PHPL | PV値の上下限警報を判定する |
| M+P_PID | PID | PID制御演算を行う |
| M+P_OUT1 | OUT | 操作量を出力処理する |
下図のように配置。
配置の考え方は、左から右へ信号が流れるように並べることです。INで入力を受け、LLAGでなまし処理を行い、PHPLで警報判定、PIDで制御演算、OUT1で操作量を出力する、という読み方にすると全体像を追いやすくなります。
部品を配置するときは、信号の流れが左から右へ読めるように並べると見やすくなります。入力値を取り込み、必要な変換やフィルタを通して、PID演算を行い、最後に出力へ渡すという流れです。

「FB/FUN」の「PID」の「ローカルラベル」に下記を登録。
ローカルラベルには、このユーザ定義タグFBの内部で使用する変数を登録します。
内部処理だけで使う値と、外部から設定したい値を分けて考えると整理しやすいです。
特に、フィルタの時定数や上下限警報の設定値のように、ループごとに調整したい値は外部から扱える形にしておくと便利です。
下図のようにつなぎます。
ここで大事なのは、PIDだけを単独で置くのではなく、PIDの前後にある実設備向けの処理まで同じ部品の中に入れることです。これにより、外側のプログラムではLIC001_FBをひとつ配置するだけで、標準化したPIDループとして扱いやすくなります。
接続の考え方としては、入力処理で取り込んだPV値を工学値に変換し、その値をフィルタ処理へ渡します。フィルタ後の値をPID制御や警報判定に使用し、PID演算後のMV値を出力処理へ渡す形です。
このように接続しておくと、PIDループに必要な周辺処理がPIDタグFBの中にまとまります。外から見たときはひとつのFBですが、中では複数の処理が順番に動いているイメージです。

これによって、下記のような機能がメーカ定義FBに追加されました。
メーカ定義タグFBをそのまま使う場合は、PID制御部分を中心に扱います。今回のユーザ定義タグFBでは、その前後にある実設備向けの処理を追加しています。
A. PVNのアナログ入力値を工学値に変換
B. アナログ入力の急峻な変動に対してのフィルタ機能が追加
C. 工学値の上下限警報HH,H,L,LLの設定および、警報出力。
D. モード切換機能。「E_」がTRUEのとき、MODEINの値によって「OUT1」の出力が変化。それぞれ1:手動 2:自動 3:カスケードとモードの切換で出力が変化。
続いて、各FBのパラメータを設定するラベルとFBにある公開変数を接続していきます。
公開変数は、ユーザ定義タグFBでつまずきやすいポイントです。難しく考えすぎず、「FB内部の調整値を、外側から設定・確認するために出しておく窓口」と捉えると理解しやすくなります。
公開変数とは、FBの内部で使用している変数のうち、FBの外側から参照・設定できるようにした変数です。通常、FBの内部ラベルはFBの中だけで使用されますが、公開変数にしておくことで、FBDシート上から「FB変数名.公開変数名」の形でアクセスできます。
今回のようにユーザ定義タグFBの中へ複数のタグアクセスFBやプロセス制御FBを組み込む場合、各FBの設定値を外側から変更したい場面があります。たとえばフィルタの時定数、上下限警報の設定値、制御モード切換の入力などです。こうした値を公開変数として外に出しておくことで、ユーザ定義タグFBを配置したあとでも、構造体ラベルのメンバとして接続したり、FBプロパティから確認・設定したりできます。
ここでいうメンバとは、構造体やFBの中に含まれている個別の項目名のことです。たとえば LLAG.T1_ であれば、LLAG がまとまりの名前、T1_ がその中にある設定項目です。
イメージとしては、FB内部の設定値を完全に隠してしまうのではなく、必要なパラメータだけを外に出すための窓口です。全部を公開すると管理が大変になりますが、調整が必要な値だけ公開しておくと、部品化したあとも使いやすくなります。
MELSEC iQ-Rのラベルの使い方(ファンクションブロックダイアグラム-FBD)公開変数はMELSEC iQ-Rのラベルの使い方(ファンクションブロックダイアグラム-FBD)で紹介した構造体ラベルと同じように扱えます。ラベルデータは「LLAG.T1_」のように、構造体名とメンバ名をドットでつないで指定します。

FB/FUNの設定はここまで。
ここまでで、ユーザ定義タグFB側の作成は完了です。ただし、この段階ではまだ部品を作っただけなので、実際のプログラム上に配置して使用する必要があります。
続いて、プログラムファイル「MAIN」に「LIC001」のデータを作成します。
※必ず、MAINファイルは「プロセス制御拡張を使用する」を「はい」にしてください。
詳細はこちら

「タグFB」にてタグ名を「LIC001」、タグFB型の選択時に「ユーザ定義」から「PID」を選択。
タグFB型の選択で「ユーザ定義」からPIDを選ぶことで、先ほど作成したユーザ定義タグFBをLIC001として使えるようになります。
ここが、作成した部品と実際の制御ループを結びつける操作になります。
最後に右下の「適用」をクリック。

「部品選択」の「タグFB」から「LIC001_FB」をドラッグして、シート上に貼り付けます。
ここから先は、メーカ定義タグFBを配置するときとほとんど同じ感覚で扱えます。部品選択にLIC001_FBが表示されるので、それをFBDシート上に配置します。

下記のように接続します。
シート上では、LIC001_FBに対してアナログ入力、アナログ出力、モード指令、必要な設定値を接続します。内部には工学値変換やフィルタ、警報判定、PID演算が入っているので、外側の回路はかなりすっきりします。
ここで少し分かりづらいのが、LIC001_FBのローカルラベルです。ユーザ定義タグFBを配置すると、内部で使用している公開変数が、外側からは構造体タグのような形で見えるようになります。
たとえば、フィルタ用の「LLAG」の時定数を指定したい場合は、「LLAG.T1_」のように、タグ名と公開変数名をドットでつないで指定します。通常のラベルを並べて設定している感覚で見ると、急に構造体のメンバを触っているように見えるので、ここは少し戸惑いやすいです。
ただし、これは構造体を自分で作って便利にまとめているというより、ユーザ定義タグFBの内部パラメータに外側からアクセスするための書き方です。最初は「FBの中の変数を、ドットで指定して触っている」と考えると分かりやすいと思います。

2.3 テスト
では、動作確認をします。
動作確認では、まず全変換を行い、エラーが出ないことを確認します。
タグFBや公開変数、構造体ラベルの設定に不備があると、この段階でエラーになることがあります。
次にモニタ状態にして、LIC001_FBのフェースプレートを開きます。
SV、PV、MV、MANUAL/AUTOなどの表示が確認できれば、ユーザ定義タグFBとしてフェースプレート連携できていることが分かります。
あわせて、入力値を変化させたときにフィルタ後の値がなまって変化するか、上下限警報が設定値に応じて出力されるか、モード切換時にOUT側の出力が変化するかを確認します。ここまで確認できれば、PIDループ用の標準部品として使える状態です。

今回のゴールは、LIC001のようなPIDループを、工学値変換、フィルタ、上下限警報、モード切換まで含めて標準部品化することです。計装ループが増えるほど、同じ考え方で横展開できるため、設計のばらつきや修正漏れを減らしやすくなります。
今回はユーザ定義タグFBについてご紹介しました。
ユーザ定義タグFBは、最初に作るときは少し手間がかかります。ただ、一度標準形を作ってしまえば、以降のPIDループ作成では同じ部品を横展開できます。計装ループが多いシステムほど、この効果は大きくなります。
特に、工学値変換、フィルタ、上下限警報、モード切換のように毎回必要になる処理は、ユーザ定義タグFBにまとめておくと設計のばらつきを減らせます。現場ごとの標準回路を作りたい場合には、かなり相性が良い機能だと思います。
次回からは、プロセスCPUを使ったシステム構築方法を紹介していきます。
今回作成したユーザ定義タグFBは、次回以降のシステム構築で実際の設備構成に組み込んでいくための土台になります。
次回もぜひご一読ください。






この記事へのコメントはありません。