グラフィックシンボル部品

<< Click to Display Table of Contents >>

トレーニング(PA-Panel) > エンジニアリングガイド > DCSサンプル解説 > DCSサンプル付属部品 >

グラフィックシンボル部品

グラフィックシンボル部品

グラフィックシンボル部品のサンプル画面には、構造化タグの各クラスに対応したグラフィック部品がいくつか用意されています。

 

pap_0225

 

グラフィックシンボル部品は、複数のオブジェクト(四角形、ラベルなど)がグループ化されたグループ部品として構築されています。グラフィック部品を利用する際の設定作業としては、部品に用意されているカスタムプロパティ「_Point」に対して、構造化タグアドレスを指定するだけで動作します。

 

以下は、PID部品の_Pointプロパティに構造化タグ名を指定した例です。

 

pap_0226

 

実行すると、以下のように表示されます。

 

pap_0227

 

グラフィックシンボル部品の「_Point」プロパティに構造化タグ名を指定して実行しただけで、PID.001構造化タグの、PVメンバ(値)、コード、単位が自動的に表示されています。また、警報時には「○」ランプに警報色が表示されます。

 

このようにDCSサンプルのグラフック部品では、指定された構造化タグアドレスに基づいて、部品自身の表示のために必要となるバインド式を起動時に自動的に生成してくれます。この機能により画面開発者のタグ割り付け作業の負荷軽減を実現します。

 

上のようなグラフィックシンボル部品のバインド式自動生成ロジックの実体は、CORE上に配置された「SymbolV6」オブジェクト上に実装されています。このロジックのことを、「シンボルロジック」と称します。

 

各グラフィックシンボル部品には、以下のスクリプトコードが記述されています。

 

■グラフィックシンボルのスクリプト

event OnInitialize()
{
	::CORE.SymbolV6.gBindSymbolScript(this);
}

event OnMouseUp(button)
{
	if(button == 1) {
		::CORE.SymbolV6.gPopupSymbol(this);
	}
}

event OnTerminate()
{
	::CloseDialog("%" & this._Point & "%", T);
}

 

部品の初期化時に呼び出されるOnInitializeイベント内で、::CORE.SymbolV6.gBindSymbolScript() 関数を呼び出しています。この関数の引数に「this」キーワードで自身のオブジェクトを渡して呼び出すことにより、シンボルロジックが実行されて呼び出し元オブジェクトのバインド式が動的に生成されます。

 

また、グラフィック部品をマウスでクリックすると部品に対応したフェースプレートがポップアップ表示されますが、このポップアップ処理は上スクリプトのOnMouseUpイベント内に記述されている::CORE.SymbolV6.gPopupSymbol() 関数によって行われます。この仕組み(自身に対応した適切なフェースプレートを自動的に認識してポップアップ表示する)についても、シンボルロジック側に実装されています。

 

 

続いて、シンボルロジック側の仕組みについて解説します。

 

シンボルロジックは、COREフォーム上の以下のラベルオブジェクト「SymbolV6」上に実装されています。

 

pap_0228

 

SymbolV6オブジェクトのスクリプトコードでは、以下のような処理記述が行われています。

 

■シンボルロジック側のスクリプト(抜粋)

function gBindSymbolScript(vObj)
{
	var vType = vObj._Type;
	var vAddr = vObj._Point;

	・・・

	switch (vType) {

		case "PVI_TYPE1":

			vValueStr		= "CNumToLocale(" & vAddr & ".PV ," & vAddr & ".DecimalPlace," & vDQ & this.fGetFormatNum() & vDQ &")";
			vFaultStr		= "(" & vAddr & ".Reliability == 0 || " & vAddr & ".Reliability == 2 || " & vAddr & ".PVFailure == TRUE)";
			
			vBindStr = "IN:{" & vFaultStr & "}{" & vDQ & "***" & vDQ & "}," &
										"{default}{" & vValueStr & "}";
			vObj.SetBindScript("_Value", vBindStr);

			vDefault = vObj._FillColor;
			vBindStr = "IN:{" & vFaultStr & "}{SV(" & ::gcBLINK_FAST & ",::gColor_Fault_Blink(1),::gColor_Fault_Blink(0))}," &
									"{default}{" & vDQ & vDefault & vDQ &"}";
			vObj.SetBindScript("_FillColor", vBindStr);

			・・・

			break;
	}
	・・・
}

 

上スクリプトでは「SetBindScript()」メソッドが重要な役目を持ちます。構造化タグアドレスからバインド式の文字列を編集してSetBindScriptメソッドに渡すことにより、オブジェクト自身のバインド式を動的に設定しています。

 

また、このケースでは、シンボルのバインドタイプが「PVI_TYPE1」だった場合の処理が記述されています。バインドタイプの文字列は、グラフィック部品自身が何の部品であるのかを識別するためのものです。この識別文字列は、グラフィック部品に用事されたカスタムプロパティの「_Type」に定義します。

 

 

hint

グラフィック部品サンプルに含まれていない新たな部品を作成したい場合は、目的のクラスに対応した部品のグループ構造を参考に、同様の仕組みのグループとして部品をデザインすることで、ユーザー自身が自由に部品の追加を行うことができます。グラフィック部品のカスタマイズに関する詳細は、本書中の「DCSサンプルのカスタマイズ」の記述を参照してください。

 

hint

CORE上に配置されているシンボルロジックには、「Symbol」と「SymbolV6」があります。「Symbol」はVer5以前の旧仕様のロジックであり、下位互換のために残されているものです。例えば、Ver5のDCSサンプルのシンボルで構築されたフォームをVer6に取り込んだ場合にも問題なく動作させることができます。