仮想タグ
概要
仮想タグは、センサや 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. 仮想タグを登録する
仮想タグは 一つの接続に属します。 そのため、登録ボタンは接続画面に配置されています。
- 接続管理から、仮想タグを配置する接続を開き、編集画面に入ります。 元となるタグが流入する接続に配置するのが一般的です。
- フォーム下部の 接続済みタグ一覧 パネルヘッダーにある [仮想タグ] ボタン(ツールチップ «仮想タグ追加»)をクリックします。

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

| 番号 | 項目 | ルール |
|---|---|---|
| ① | 案内 | «仮想タグを登録します。タグ ID は必ず TAG_ で開始する必要があります。データ型を選択すると、仮想ポイント入力時に該当形式で検証されます» |
| ② | タグ ID | 必須。TAG_ で開始し、大文字 · 数字 · _ のみ使用可能。5〜30文字。仮想タグは慣習的に TAG_V_ と命名します — IDルール |
| ③ | タグ名 | 必須。プレースホルダーは «説明可能な名称» |
| ④ | データ型 | String · Short · Integer · Long · Float · Double · Boolean · Date. デフォルトは String |
| ⑤ | 説明 | 必須。プレースホルダーは «このタグの用途を記述してください» — 空欄では保存されません |
| ⑥ | 右下 | [保存] |
String であるダイアログは String が選択された状態で開きます。数値を計算する仮想タグの場合は Double に変更してください。アラームバンドは数値型とブーリアンタグにのみ設定可能なため、String のままでは後でバンドアラームを設定できません。
接続済みタグ一覧は、保存済み接続の編集画面でのみ表示されます (接続管理). 仮想タグはその接続の ID を同時に保存するため、未保存の接続では登録が拒否されます。
接続を削除すると、その接続に属するタグが 仮想タグを含めて 削除され、そこに設定されたアラーム設定と計算式も解除されます。元タグと異なる接続に仮想タグを配置した場合は、この点にご注意ください。
2. 計算式を入力する
- タグ画面で、先ほど作成したタグの設定フォームを開きます。
- 計算 タブの EQL 欄に文を入力します。
- 同タブの 配布 領域にある 適用可否 を 有効 に変更します。
- タブ内の保存 をクリックします — タブごとに個別に保存されます(タグ登録/編集フォーム)。

| 番号 | 場所 | 役割 |
|---|---|---|
| ① | 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 アラームの文が 対象タグ以外のタグを読み込む、複数のタグを混合させる、またはタグ条件がない場合、保存が拒否されます(エラーコード 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 メソッドは タグサービス にあります。