마일로-OPC UA 구독 및 처리 트리거링

구독 두 가지 모드 중 하나는 다른 하나는 샘플링이다,보고되고있다.

샘플링이 정의되면, 이는 가입 트리거 부품, 즉 음원 구독 정의 구독을보고하기위한 요구는 접속 (아이템 트리거링 함)이다. 트리거링 항목 업데이트가 실행 된 항목 업데이트를 고무시킬 때 그래서. 다음과 같이 코드입니다 :

공용 클래스 TriggeringExample 구현 UaClient {

// 공공 정적 무효 메인 (문자열 []에 args) {예외 발생
// TriggeringExample 예 = 새로운 TriggeringExample을 ();
//
// 새로운 ClientExampleRunner (예) .RUN ();
//}

개인 최종 로거 로거 = LoggerFactory.getLogger (getClass ());

개인의 최종 AtomicLong clientHandles = 새로운 AtomicLong (1L);

@Override
{예외를 throw 공공 무효 실행 (OpcUaClient 클라이언트, CompletableFuture <OpcUaClient> 미래를)
// 동기 연결
client.connect () 수 ().;

// 생성 구독 @ 1000MS 정액제 아이템을 모니터링하는 복수를 포함 할 수있다
UaSubscription 정액제 client.getSubscriptionManager = ()
.createSubscription (1000.0)
갔지 ();

//보고 정적 값에 가입
(ReadValueId readValueId1 = 새로운 ReadValueId
), 새로운 NODEID (2 "ch1.d1.tag1"를
AttributeId.Value.uid ()
NULL,
QualifiedName.NULL_VALUE를
);

//보고 모드의 첫 번째 모니터 용 항목을 만듭니다

UaMonitoredItem reportingItem createMonitoredItem = (회원 가입, readValueId1, MonitoringMode.Reporting);

//, 그것이 샘플링 모드 자극하기 위해 필요한 제 항목 제 감시 항목을 생성
ReadValueId readValueId2 = 새로운 새 ReadValueId (
새로운 새 NODEID (2 "ch1.d1.tag2")
AttributeId.Value.uid ()
NULL,
QualifiedName.NULL_VALUE
);


UaMonitoredItem samplingItem createMonitoredItem = (회원 가입, readValueId2, MonitoringMode.Sampling);

 

// 트리거링 항목 트리거 항목에 연결 (비동기 모드의 사용을 참고)까지 (복수가있을 수 있습니다)

. subscription.addTriggeringLinks (reportingItem, newArrayList (samplingItem))) (얻을;

정적 항목에 기록하고 그 값의 변화에 의해 모두 트리거보고 //
// VariableNode 노드를 client.getAddressSpace = () createVariableNode (.
// 새로운 NODEID (2 "ch1.d1.tag1"));

// 하나 또는 두 개의 뉴스 업데이트를 얻을 수 있습니다) 항목 비동기 모드를 사용하여 여기 writeValue 나에게 메시지에주의를 보내기 트리거링 변경하지 않을 경우 가져 오기를 (트리거 항목을 자극하는
(인터넷 용을 나는 = 0; 나는 <10000; 내가 ++ ) {
언트 = 새로운 새 된 newval 언트 (Unsigned.ushort (I))을,
DataValue 새로운 새 VA = DataValue (된 newval, NULL, NULL);
client.writeValue합니다 (NODEID 새로운 새 (2 "ch1.d1.tag1"), VA). GET ();

}
//node.writeValue(va);

// client.writeValue (
// 새로운 새로운 기능 NODEID (2, "ch1.d1.tag1")
// VA
//) 갔지 ();

// 5 초 동안 예를 실행 후 종료하자
에 Thread.sleep (500000);
future.complete (클라이언트);
}

개인 UaMonitoredItem createMonitoredItem은 (
UaSubscription 가입,
ReadValueId readValueId,
MonitoringMode monitoringMode
) ExecutionException, 예외 : InterruptedException을 {던졌습니다

// 중요 : 클라이언트 핸들은 항목 당 고유해야합니다
UInteger clientHandle = UINT (clientHandles.getAndIncrement ());

MonitoringParameters 파라미터 = 새로운 MonitoringParameters (
clientHandle,
1000.0,
NULL,
UINT (10)
에 해당
);

MonitoredItemCreateRequest 요청 = 새로운 MonitoredItemCreateRequest (
readValueId,
monitoringMode,
파라미터
);

BiConsumer <UaMonitoredItem 정수> = onItemCreated
(항목 ID) -> item.setValueConsumer (이 :: onSubscriptionValue);

목록 <UaMonitoredItem> 항목 = subscription.createMonitoredItems (
TimestampsToReturn.Both,
newArrayList (요청)
onItemCreated
) 갔지 ();

items.get (0)을 리턴;
}

개인 무효 onSubscriptionValue (UaMonitoredItem 항목 DataValue 값) {
logger.info (
"回调: 정액제 값받은 : 항목 = {} = {} 값"
. item.getReadValueId () getNodeId () value.getValue ());
}

}

추천

출처www.cnblogs.com/myboat/p/11891148.html