0
私の人生の間、私はOPCノードのデータタイプを見つける方法という単純な質問だったと思った答えを見つけることができません。UA OPCサーバのデータタイプ
私はサブスクリプションの作成とこのサブスクリプション内のタグの監視/更新を含むUA OPCライブラリを作成しています。
タグへの書き込み要求は、外部アプリケーションから取得され、サブスクリプションとタグIDとオブジェクト値で構成されます。問題は、このオブジェクトは必ず文字列(質問しません)であり、タグの適切なデータ型に変換する必要があることです。だから、私はどのデータ型がタグに関連付けられているか調べる必要があります。現時点では、型不一致例外が発生して書き込みが失敗します。
はここに私の更新コードです:
//
// Extension methods
public bool Write<T>(long groupID, long tagID, T item)
{
var sub = FindSubscription(groupID);
try
{
if (sub != null)
{
var node = sub.MonitoredItems.FirstOrDefault(m => (long)m.Handle == tagID);
if (node != null)
{
bool result = false;
var nodesToWrite = BuildWriteValueCollection(node.DisplayName, Attributes.Value, item);
StatusCodeCollection results;
DiagnosticInfoCollection diag;
try
{
_session.Write(
requestHeader: null,
nodesToWrite: nodesToWrite,
results: out results,
diagnosticInfos: out diag);
result = CheckReturnValue(results[0]);
}
catch (Exception ex)
{
}
}
}
}
catch (Exception ex)
{
LogMessage(String.Format("Write GroupID {0}, Tag {1}, Value {2}", groupID, tagID, item.ToString()), ex);
}
return false;
}
私は成功せず、ノードのデータ型を決定する方法を見つけるために年齢のために検索しました。したがって、MonitoredItemの場合、文字列を互換性のある型に変換できるように、データ型を見つける方法はどうでしょうか?
スティーブ
ありがとうございますが、MonitoredItemから取得するにはどうすればいいですか?DataTypeプロパティは表示されません。 –
MonitoredItemからNodeIdを取得し、AttributeId.DataTypeを要求するReadサービスを呼び出します。私はnodeopcuaがどのように動作するのかわかりません。ノードへの参照があれば、基本属性以外のものを読み取っていない可能性があります。そのため、実際にサーバーからDataType属性を読み取る必要があります。 –
余分な情報をありがとう...そして今私は6のDataValueを持っていますか?そして、これはどういう意味ですか?申し訳ありませんが、あなたは誰かと非常に密接に話していることを認識しなければなりません。私はいくつかのDAクライアントアプリケーションを書いてきましたが、私はそのような単純で明白なデータ要求を見つけることがどれほど難しいかに驚いています...それぞれの書き込み(何千分もかかることがあります)私が書いているノードのデータ型を見つけるために別の呼び出しを行う必要があります。私はノードを持っています、ノードを知っています、なぜこれ(データ型)はデフォルトのプロパティではないでしょうか?このノード??? –