2016-10-10 13 views
0

OPC UAプロジェクトを使用してOPC UAクライアントを作成しました。私はまだOPC UAにとっては非常に新しいです。今私は、特定のノードのデータが変更された後、いくつかのノードから値を読み取るベストプラクティスを探しています。OPC UA - クライアント - Milo - ベストプラクティス - データ変更のサブスクリプション

情報モデルは次のようになります。私はこのRfidSensorTypeの複数のオブジェクトを持つことになります私のサーバー上で RfidSensorType

。クライアントは、CurrentAtTagノードにサブスクリプションを作成して、データ変更をリッスンします。

私の質問:CurrentAtTagの値が変更されると、UaMonitoredItemとCurrentAtTagのDataValueを含むクライアントでコールバック関数が呼び出されます。 私のアプリケーションでは、同じ時刻に変更されたStation、IOLPort、およびCurrentValueの値も(同時に)処理する必要があります。 CurrentAtTagからコールバック内の値にアクセスするにはどうすればよいですか?

私の唯一の解決策は次のとおりです。そのコールバック内で同期読み取り要求を使用する - それは正当なアプローチですか?

私の研究: 1)TriggeringService TriggerigServiceが存在することがわかりました。特定のノードが値を変更した場合にのみ、アイテムを監視するレポートが送信されます。 問題:これは、複数のコールバックを呼び出すだけで、1つだけの情報を同時に処理する必要があります。

2)イベントモニタリング イベントモニタリングでは、[イベントフィールド]を選択できます。イベントの通知ごとに返されます。 CurrentAtTag、Station、IOLPort、およびCurrentValueを選択できるかどうかはわかりません。

+0

「CurrentAtTag」と「IOLPort」の更新時間はどういう違いがありますか?最初はスローチェンジャー、もう1つはすばやく変化しますか?そうでない場合、私は単にそれらのすべてにサブスクリプションを行って、パフォーマンスがOKかどうかを確認します。 – astrowalker

+0

こんにちは@astrowalker、 いいえほとんど同じ時刻です。私はすでにすべてのノードに加入していると考えました。 問題は、すべての値を必要とするアプリケーション内で別のメソッドを呼び出す必要があることです。私は別のコールバックで値を取得する場合、私はそれを行うことができるかどうかはわかりません... あなたは私の意味を知っていますか? おそらく、この問題は解決するのは簡単ですが、私は今考えていません。 – Niko

+0

あなたのアーキテクチャを正しく検討していないようです。いくつかのデータフィールドが一緒に変化する場合、それらは実際には異なるフィールドの代わりに単一のコンボユニットに属します。 –

答えて

0

サーバのServerStatus(nodeid "i = 2256")を購読できるように、 'RfidSensor_Station1'に対応するnodeid。サーバーは、ExtensionObjectとしてエンコードされたタイプ「RfidSensorType」のデータを含むPublishResponseを送信します。そのトリックは、ExtensionObjectのデコードです。

「RfidSensor_Station1」はノードクラス「変数」ではないため、値属性はなく、データ変更のノードを監視することはできません。 PLCを使用している場合は、センサのすべてのプロパティを文字列またはバイト配列に組み合わせることができます。次に、新しい変数を監視し、クライアントの文字列を解析します。

また、説明どおりにReadRequestを作成することもできます。それはうまくいくでしょう。

+0

ステーションがObjectType/ObjectNodeとしてモデル化されているため、ステーション自体を購読することはできません。代わりに変数としてモデル化されていれば、すべてのステーションデータのコンポジットを表し、彼がそれを購読できる複雑なデータタイプを持つことができます。読み込み要求として行うことはおそらく、ここに行くための最善の方法です。 –

関連する問題