メインコンテンツまでスキップ

仮想タグ

概要​

仮想タグは、センサや PLC から読み取るタグではありません。他の複数のタグの値を用いて計算し、作成する新しいタグです。二つの圧力の差(差圧)、ライン電力の合計、複数のセンサの平均など、現場には「測定はしないが確認したい値」が多くあります。仮想タグとして作成しておけば、その値が一般タグと同様に保存され、画面に描画され、アラームを設定することが可能です。

一つの仮想タグは、以下の二つの要素で構成されます。

項目場所役割
タグ自体接続編集画面 → 接続済みタグ一覧 → [仮想タグ]タグ ID ・ 名前 ・ データ型を登録します
計算式タグ設定フォーム → 計算 タブ元となるタグを読み込み、値を生成する EQL 文です

計算式がなければ、仮想タグに値は生成されません(手動で入力する 仮想ポイント のみ例外となります)。


用途​

用途例計算式の核心
二つのタグの差差圧 = 入口圧力 − 出口圧力、偏差 = 設定値 − 実測値to_double(a.value) - to_double(b.value)
合計ライン電力合計 = 設備電力の合計to_double(a.value) + to_double(b.value) + to_double(c.value)
平均複数センサの平均温度(to_double(a.value) + to_double(b.value)) / 2
最大 · 最小複数センサの中の最高温度CASE WHEN to_double(a.value) >= to_double(b.value) THEN a.value ELSE b.value END
比率原料投入量に対する生産量to_double(a.value) / to_double(b.value)
一つのタグの時間平均直近10秒の平均AVG(TO_DOUBLE(value)) と時間窓 — 計算タブヘルプの例

複数のタグの中から最大値を選択する専用関数(greatest など)は EQL 関数リストにありません。 最大 · 最小は上記のように CASE で記述します。


動作原理​

計算タブに入力した EQL は、保存した瞬間に CEP に文として配布されます。元となるタグに新しい値が入ると、文が結果を一行出力し、その行が 仮想タグの値(ポイント) となり、収集された値と 同じパイプライン に投入されます。そのため、仮想タグの値は一般タグと全く同じように保存され、ストリーム · トレンド画面や API で読み取ることができ、アラームや他の計算式で再利用可能です。

項目仮想タグでの動作
保存一般タグと同じ経路で保存されます。トレンド · ストリーム · API で同様に確認できます
データ型登録時に選択した データ型 に従います
単位登録ダイアログに項目がないため 空欄になります。 タグ設定フォームの タグ属性 タブで入力します
更新タイミング元のタグに新しい値が入ったタイミングです。一定周期で動作する計算ではありません
更新頻度文によって決定されます。OUTPUT LAST EVERY 1 SEC を付与すると、最大で1秒に1回出力されます
品質(quality)元のタグの品質が 自動的に引き継がれません。 文の quality 欄に記述した値がそのまま入ります(例では 192 = GOOD)
元タグの断線時新しい値が生成されません。 «0» で埋められることはなく、最後の値以降は空の状態となります
結果値が空の場合その結果は破棄され、ポイントは生成されません
アラーム一般タグと同様に、アラームバンド · EQL アラームの対象となります
元の品質を引き継ぎたい場合

a.quality · b.quality は整数項目であるため、文の中で直接読み取ることができます。元の品質に応じて quality を使い分ける場合は、その式を文に直接記述する必要があります。Platform が代行して計算することはありません。


作成方法​

1. 仮想タグを登録する​

仮想タグは 一つの接続に属します。 そのため、登録ボタンは接続画面に配置されています。

  1. 接続管理から、仮想タグを配置する接続を開き、編集画面に入ります。 元となるタグが流入する接続に配置するのが一般的です。
  2. フォーム下部の 接続済みタグ一覧 パネルヘッダーにある [仮想タグ] ボタン(ツールチップ «仮想タグ追加»)をクリックします。

接続編集画面の接続済みタグ一覧 — 番号は読み取り順

番号場所役割
①パネルヘッダー接続済みタグ一覧 — «現在の接続に登録されたタグ». 保存済み接続の編集画面でのみ表示されます
②パネルヘッダー右側[仮想タグ] — 下記の 仮想タグ追加 ダイアログを開きます
③本文この接続に属するタグ一覧 — タグ ID · タグ名 · データ型 · 単位 · 説明
  1. 仮想タグ追加 ダイアログに以下の内容を入力し、保存します。

仮想タグ追加ダイアログ — 番号は読み取り順

番号項目ルール
①案内«仮想タグを登録します。タグ ID は必ず TAG_ で開始する必要があります。データ型を選択すると、仮想ポイント入力時に該当形式で検証されます»
②タグ ID必須。TAG_ で開始し、大文字 · 数字 · _ のみ使用可能。5〜30文字。仮想タグは慣習的に TAG_V_ と命名します — IDルール
③タグ名必須。プレースホルダーは «説明可能な名称»
④データ型String · Short · Integer · Long · Float · Double · Boolean · Date. デフォルトは String
⑤説明必須。プレースホルダーは «このタグの用途を記述してください» — 空欄では保存されません
⑥右下[保存]
データ型のデフォルト値は String である

ダイアログは String が選択された状態で開きます。数値を計算する仮想タグの場合は Double に変更してください。アラームバンドは数値型とブーリアンタグにのみ設定可能なため、String のままでは後でバンドアラームを設定できません。

新規接続登録画面では作成できない

接続済みタグ一覧は、保存済み接続の編集画面でのみ表示されます (接続管理). 仮想タグはその接続の ID を同時に保存するため、未保存の接続では登録が拒否されます。

接続を削除すると仮想タグも削除される

接続を削除すると、その接続に属するタグが 仮想タグを含めて 削除され、そこに設定されたアラーム設定と計算式も解除されます。元タグと異なる接続に仮想タグを配置した場合は、この点にご注意ください。

2. 計算式を入力する​

  1. タグ画面で、先ほど作成したタグの設定フォームを開きます。
  2. 計算 タブの EQL 欄に文を入力します。
  3. 同タブの 配布 領域にある 適用可否 を 有効 に変更します。
  4. タブ内の保存 をクリックします — タブごとに個別に保存されます(タグ登録/編集フォーム)。

タグ設定フォームの計算タブ — 番号は読み取り順

番号場所役割
①EQL 計算 ヘルプ«EQL を通じてタグに計算されたデータポイントを自動的に生成します» と例示文
②EQL計算式エディタ。保存が拒否された場合、原因がこの欄の直下ボックスに表示されます — 以下
③配布 → 適用可否有効 である必要があります
④右下[保存] — このタブのみを保存します

計算文は以下のルールに従う必要があります。

ルール理由
結果として timestamp · value · quality · error_code の四項目を出力する四項目のうち一つでも欠けているか、value が空の場合、その結果は破棄されます
元の値は to_double(…) で変換して計算するタグ値(value)は文字列として流れます。直接加減算はできません
元タグごとに Point(tag_id = '…').win:length(1) に 別名(a, b …)を付与して列挙するタグごとに最新値を一つずつ組み合わせて計算します
単一の式ではなく SELECT 文全体 を記述する保存時、CEP が文をコンパイルして検証します

保存が拒否される場合​

保存時に文を コンパイル検証 し、誤りがある場合は保存しません(HTTP 422)。原因は画面にそのまま表示されます。

② EQL 欄の直下に赤い案内ボックス «EQL を読み取れません» が表示されます。この拒否通知はトーストでは表示されません。

ボックス内内容
位置チップ«N行 M列». カーソルがその位置に移動し、チップをクリックすると再度移動します。エディタ内の該当箇所にも印が表示されます
本文コンパイラのメッセージ(原因)と修正ヒント
エンジン原文表示折りたたまれたエンジンの元のメッセージ

コンパイラが位置を特定できない場合は、チップなしで文のみが表示されます。文を修正すると表示は消えます。

CEP が起動しておらず検証できない場合も保存しません — 検証されていない文は保存されません。 この場合は文の誤りではなく、エディタには何も表示されず、トーストに «CEP エンジンに接続できず、EQL を検証できませんでした» と表示されます(HTTP 503)。CEP 起動後に再度保存してください。 ステートメント · アラーム設定 · クエリ実行など、EQL を保存または検証する他の機能も同様の形式(原因文と行 · 列)で拒否されます(仮想タグ運用)。

文法全般については EQL および CEP — EQL 言語 を参照してください。

3. 値の出力確認​

ストリーム画面で仮想タグを選択し、値が流れているか確認します。元タグに値が入っている状態でなければ、仮想タグに値は生成されません。

計算式なく値を入力する場合 — 仮想ポイント​

ストリーム画面の [仮想ポイント] ボタンは、タグ一つに対して 時刻と値を手動で入力 するダイアログを開きます。時刻は ISO 8601 形式(2024-01-15T17:10:15.123Z)で入力します。計算式がまだない段階で、画面表示やアラームをテストする目的で使用します。


例 — フィルタ差圧​

フィルタ前後の圧力タグ二つを用いて 差圧 を作成する例です。以下のタグ ID は説明用の例です。

タグID (例)備考
フィルタ入口圧力TAG_PT_FILTER_IN元タグ
フィルタ出口圧力TAG_PT_FILTER_OUT元タグ
フィルタ差圧TAG_V_FILTER_DP仮想タグ · データ型 Double · 単位 bar

計算タブの EQL:

SELECT current_timestamp() AS timestamp,
to_double(a.value) - to_double(b.value) AS value,
192 AS quality,
0 AS error_code
FROM Point(tag_id = 'TAG_PT_FILTER_IN').win:length(1) a,
Point(tag_id = 'TAG_PT_FILTER_OUT').win:length(1) b
OUTPUT LAST EVERY 1 SEC
部分意味
win:length(1) a, win:length(1) b入口 · 出口それぞれの 最新値一つ を組み合わせてペアにします
to_double(a.value) - to_double(b.value)差圧 = 入口 − 出口
192 AS quality結果の品質を GOOD と宣言します(元の品質は引き継がれません)
OUTPUT LAST EVERY 1 SECどちらに値が来ても再計算しますが、1秒に最大1回 のみ出力します

同様の形式で - を + に変更すれば合計、/ に変更すれば比率となります。元タグが三つ以上ある場合は、c, d … を同様に続けて記述します。


アラームは «設定一つ = タグ一つ»​

アラーム設定は、バンドアラームであっても EQL アラームであっても、一つのタグに対して設定されます。

アラームタグ一つに紐付ける方法
バンドアラームタグ設定フォームの アラームバンド タブ — そのタグ自身の値に閾値を設定します。タグあたり一つです
EQL アラームアラーム設定フォームの 対象タグ が必須です — アラームはそのタグのアラームとして記録されます

複数のタグを組み合わせた条件でアラームを設定したい場合は、まずその組み合わせを仮想タグとして作成し、アラームをその仮想タグに設定してください。 「入口 − 出口 > 0.5」を EQL アラーム内で二つのタグを読み込んで計算するのではなく、差圧仮想タグを作成し、そのタグに 「> 0.5」を設定する形式です。これにより、組み合わせた値自体が保存されてトレンドで確認でき、どの方値によってアラームが発生したかがそのタグ一つに記録されます。

他のタグを読み込む EQL アラームは保存および検証が拒否される

EQL アラームの文が 対象タグ以外のタグを読み込む、複数のタグを混合させる、またはタグ条件がない場合、保存が拒否されます(エラーコード alarm.eql.one_tag, HTTP 422)。 フォームの [EQL 実行] も保存と同じルールで検証されるため、その場で拒否されます。 位置が特定できないルール違反であるため、EQL エディタ 下のオレンジ色ボックス に以下のように表示されます。

EQL アラームはタグ一つ - アラームのタグのみを読み込みます。複数タグ、タグ条件なし、他タグとの結合は拒否されます。タグごとにアラームを一つずつ設定するか、タグ比較(差圧・偏差)は仮想タグで計算した後にそのタグにアラームを設定してください。

既に保存されていたアラームが他のタグの行を出力した場合でも、判定時に対象タグではない行は無視され、診断 diagnostic.tag.alarm_foreign_tag_rows が残ります。そのようなアラームは仮想タグへ移行してください。

例 — 差圧 0.5 bar 超過が 5分間持続​

上記の TAG_V_FILTER_DP に EQL アラームを設定します。 高度なアラーム 画面で アラーム設定追加 → 対象タグ は TAG_V_FILTER_DP, コンディション (EQL) の EQL は以下の通りです。

SELECT timestamp, tag_id, tag_name, value, quality, error_code,
CASE WHEN to_double(value) > 0.5 THEN 'HIGH' ELSE 'NORMAL' END AS band
FROM Point(tag_id = 'TAG_V_FILTER_DP').win:length(1)
部分意味
CASE … END AS band値ごとに band 欄を出力します。'HIGH' が出ればアラームON、'NORMAL' が出ればOFFとなります — band 欄と 'NORMAL' がなければ保存が拒否されます
Point(tag_id = 'TAG_V_FILTER_DP')対象タグ一つのみ を読み込みます。二つの圧力を組み合わせる処理は仮想タグが既に行っています

5分間持続 という条件は文ではなく、フォームの 検知設定 (ISA-18.2) → ON 遅延 に 300000(ms) を入力して設定します — 画面ヘルプ «条件がこの時間(ms)の間継続した場合にアラームが発生します。0 でオフ、最大 3,600,000 ms(1時間)です»

  • 通知(プッシュ)が頻発する場合は、アラーム設定フォームの 重複アラーム抑制 → 抑制時間 (分) で調整します。
  • 保存前にフォームの [EQL 実行] で検証してください。保存と同じルール(タグ一つ · band 欄 · コンパイル)で検証されます — アラーム設定フォーム。
  • 持続条件なく 閾値を超えた瞬間に 通知したい場合は、EQL アラームは不要です — 差圧タグの アラームバンド タブに閾値を設定してください。

限界と注意点​

項目内容
元タグ数製品上の上限はありません。ただし元タグごとに時間窓が付与されるため、win:length(1) のように 時間窓を小さく 設定してください — 時間窓を大きくすると、組み合わせの数が爆発的に増加します
仮想タグの仮想タグ可能です。計算結果が一般タグの値として再投入されるため、別の計算式で元タグとして読み取ることができます
自己参照計算保存時の検証ではチェックしません。 自己参照や循環参照(A が B を、B が A を読み込む構成)を作成しないでください
計算式の長さV5 API で入力する場合、最大 4,000 文字までです
CEP バックエンド上記の例はデフォルトバックエンド(Aster CEP)基準です。他のバックエンドで構築された環境は CEP — バックエンド の表を確認してください
元の品質自動的に伝播されません — 動作原理 参照

API と MCP​

パス仮想タグでの動作
V5 API — 登録POST /api/v5/tag — 一般タグの登録と同様です。opc_id が必須であり、tag_id は TAG_V_… と命名します
V5 API — 計算式PATCH /api/v5/tag/{tag_id}/calculation — calculation_eql と use_calculation(true/false). 保存後、計算式を再配布します
V5 API — 読み取りGET /api/v5/tag/{tag_id}/config が calculation_eql · use_calculation を返します
MCP仮想タグ専用ツールはありません。MCP ツールはタグ ID で値を読み取るため、仮想タグも list_latest_tag_values · get_tag_history で一般タグと同様に読み取ります。計算式を作成または変更する MCP ツールはありません

SDK メソッドは タグサービス にあります。


関連ドキュメント​