2016-07-11 6 views
3

私はEclipse Miloを使用してOPC UAクライアントを作成していますが、クライアントが接続の損失をどのように処理するのかという次の質問を見つけました。私はこのSubscriptionManagerとサブスクリプションを使用しない監視値についてクライアントサイドのEclipse Miloでどのように切断/再接続が処理されるのですか?

:私もEclipseのミロを使用して実装されている私のOPC UAサーバーを再起動すると

OpcUaClient client = myCreateClient(); 
List<MonitoredItemCreateRequest> items = myCreateMonitoredItems(); 

UaSubscription subscription = client.getSubscriptionManager().createSubscription(1_000.0).get(); 
List<UaMonitoredItem> result = subscription.createMonitoredItems(TimestampsToReturn.Both, items).get(); 

for (UaMonitoredItem item : result) { 
    if (!item.getStatusCode().isBad()) { 
    item.setValueConsumer(value -> System.out.println("Update: " + value)); 
    } 
} 

は今、私は、クライアントが再接続を参照んが、サブスクリプションはこれ以上更新されません。

09:11:15.734 [ua-shared-pool-0] DEBUG o.e.m.o.s.c.s.OpcUaSubscriptionManager - Publish service failure: StatusCode{name=Bad_NoSubscription, value=0x80790000, quality=bad} 
java.util.concurrent.CompletionException: UaServiceFaultException: status=Bad_NoSubscription, message=There is no subscription available for this session. 
    <stack-trace-omitted> 
    … 

だから、OpcUaSubscriptionManager状況を認識しているようですが、これらのアイテムを再登録しようとしません:ログで、私は次の出力を取得します。それは手動で行うのですか?

答えて

3

クライアントがOPC-UAパート4、セクション6.5で従う必要のある再接続シーケンスを説明するフローチャートがあります。これは、同じセキュアなチャネルを再利用しようと試み、以前のセッションを再アクティブ化しようと試み、さらにそれが失敗した場合に新しいセッションにサブスクリプションを転送しようと試みることを含む。 MiloクライアントSDKはこれをすべて行います。

サーバーを再起動すると、通常のネットワーク中断とは異なり、プロセス内のすべての状態が廃棄されるため、最悪の場合があります。この場合、クライアントSDKはコールバックを介して、再接続後の状態の復元が失敗したこと、およびサブスクリプションを手動で再作成する必要があることを通知します。

SubscriptionListenerUaSubscriptionManagerを追加し、onSubscriptionTransferFailedコールバックを受信した場合は、サブスクリプションと監視対象アイテムを再作成してください。

関連する問題