opc ua java client tutorial - hb-softsolution - · pdf fileopc ua java client tutorial v 1.0.2...

28
OPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel (ClientTutorialExample), mit dem eine einfache Client Applikation erstellt wird und die wichtigsten Services erklärt werden. Thomas Zöchbauer 29.11.2011

Upload: buihuong

Post on 31-Jan-2018

229 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

OPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel (ClientTutorialExample), mit dem eine einfache Client Applikation erstellt wird und die wichtigsten Services erklärt werden. Thomas Zöchbauer 29.11.2011

Page 2: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

2 OPC UA Java Client Tutorial

Inhalt 1. Unterstütze OPC UA Profile .................................................................................................................. 3

1. OPC UA Client Profile ........................................................................................................................ 3

2. Generic Client Object ........................................................................................................................... 7

1. Applikation Konfiguration ................................................................................................................ 7

2. Client Konfiguration.......................................................................................................................... 8

3. Server Connection ................................................................................................................................ 9

4. Security ............................................................................................................................................... 10

5. Connect / Disconnect ......................................................................................................................... 11

1. Verbindung herstellen .................................................................................................................... 11

Endpoints mit Discovery ..................................................................................................................... 11

Endpoints ohne Discovery .................................................................................................................. 12

2. Endpoints filtern ............................................................................................................................. 13

4. Aktivierung einer Session am Server .............................................................................................. 14

Login Identität .................................................................................................................................... 14

5. Verbindung mit einem Server trennen .......................................................................................... 15

6. Browse ................................................................................................................................................ 17

7. Read Values ........................................................................................................................................ 18

8. Write Values ....................................................................................................................................... 19

9. Subscription / Publish ......................................................................................................................... 20

1. Monitor Data Changes.................................................................................................................... 21

2. Monitor Events ............................................................................................................................... 22

10. Calling Methods .............................................................................................................................. 24

11. Register / Unregister Nodes ........................................................................................................... 25

12. History Access ................................................................................................................................. 26

1. History Read ................................................................................................................................... 26

2. History Update ............................................................................................................................... 26

3. Client History Archive ..................................................................................................................... 28

Page 3: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

3 OPC UA Java Client Tutorial

1. Unterstütze OPC UA Profile

1. OPC UA Client Profile

Profil Beschreibung Unterstützt

A & C Address

Space Instance

Client Facet

This Client Facet indicates that the Client make use

of Alarm and Condition instances in the address

space.

Ja

A & C Dialog Client

Facet

This Client Facet indicates that the Client uses the

Alarm and Condition Dialog model. This includes

Event subscriptions and methods.

Nein

Base Client

Behaviour Facet

This Client Facet indicates that the Client supports

behaviour that Clients shall follow for best use by

operators and administrators. They include

allowing configuration of an endpoint for a server

withhout using the discovery service set; Support

for manual security setting configuration and

behaviour with regard to security issues; support

for Automatic reconnection to a disconected

server. These behaviours can only be tested in a

test lab. They are best practice guidelines.

Ja

Event Subscriber

Client Facet

This Client Facet includes ConformanceUnits

needed when subscribing for Event Notifications.

This includes basic Address space concept and the

browsing of it, adding events and event filters as

monitored items and adding subscriptions.

Ja

AddressSpace

Lookup Client Facet

This Client Facet includes all ConformanceUnits

needed to navigate through the AddressSpace. This

includes basic Address space concepts, view and

browse functionality and simple attribute read

functionality.

Ja

Node Management

Client Facet

This Client Facet includes the ConformanceUnits

that Clients will have to use to configure the

Ja

Page 4: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

4 OPC UA Java Client Tutorial

AddressSpace of an OPC UA Server through OPC

UA Node Management Service Set.

A & E Proxy Facet This Client Facet describe the functionality used by

a default A & E Client proxy. Exposing of this Facet

can be used by a server to better understand

command that are being issued by the Client, since

it indicate that the client is an A&E Com Client.

Nein

Core Client Facet This Facet defines core functionality for Clients.

This facet includes the core functions for Security

and Session handling.

Ja

Redundancy Switch

Client Facet

Nein

DataAccess Client

Facet

This Client Facet defines ConformanceUnits

needed for utilizing the DataAccess Information

Model.

Ja

A & C Enable Client

Facet

This Client Facet indicates that the client makes

uses of enabling and disabling of alarms, including

browsing for disabled alarms.

Ja

Method Client Facet This Client Facet indicates that the client makes

uses of Method calls.

Ja

Redundant Client

Facet

This Client Facet indicates that the client can make

uses of the redundancy feature available for

redundant Client.

Nein

Discovery Client

Facet

This Client Facet indicates that the client makes

uses of discovery of Servers and their Endpoints.

Ja

A & C Previous

Instances Client

Facet

This Client Facet indicates that the client makes

uses of the Alarm and Condition model including

support for maintaining the previous instance of

alarms. This include the ability to understand

branchIds.

Nein

DataChange

Subscriber Client

This Client Facet indicates that the client makes

uses of monitoring Attribute values for data

Ja

Page 5: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

5 OPC UA Java Client Tutorial

Facet change.

Advanced Type

Programming Client

Facet

This Client Facet indicates the behaviour of Clients

when processing instances based on Type

Definitions in that a client that expose this Facet

makes use of the type model and can process the

instance address space based on the type model.

For example a client may contain generic displays

that are based on a type, in that they contain a

relative path from some main type. On call up this

main type is matched to an instance and all of

display items are resolved based on the provided

type model.

Ja

A & C Non-Exclusive

Alarming Client

Facet

This Client Facet indicates that the client makes

uses of the non-exclusive Alarm model. This

includes understanding the various subtypes such

as RateOfChange, Limit and Deviation.

Nein

Auditing Client

Facet

This Client Facet indicates that the Client makes

uses of the Auditing features available in OPC UA.

Nein

A & C Simple Client

Facet

This Client Facet indicates that the Client makes

uses of the Alarm and Condition basic model. This

includes the ability to subscribe for Events and to

initiate a Refresh method.

Ja

A & C Alarm Client

Facet

This Client Facet indicates that the Client makes

uses of the Alarm and Condition alarming model

including acknowledgement with optional confirm,

discrete alarms and shelving of alarms.

Ja

Attribute Write

Client Facet

This Client Facet indicates that the Client makes

uses of writing to Attribute values of Nodes.

Ja

A & C Exclusive

Alarming Client

Facet

This Client Facet indicates that the Client makes

uses of the Exclusive Alarm model. This includes

understanding the various subtypes such as

RateofChange, Limit and Deviation

Nein

Attribute Read This Client Facet indicates that the Client makes Ja

Page 6: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

6 OPC UA Java Client Tutorial

Client Facet uses of reading Attribute values of Nodes.

(https://www.opcfoundation.org/profilereporting/, Client, 08.11.2011)

Page 7: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

7 OPC UA Java Client Tutorial

2. Generische Client Objekt

Die UAClient Klasse ist die Haupt-Instance die benutzt wird um Services an einen OPC-

UA Server mittels des OPC Java Stacks zu senden. Das Client SDK ist eine übergeordnete

Schicht der Kommunikation und dient zum Senden von OPC UA Services.

Die Erstellung einer OPC UA Client Applikation beginnt mit dem Erstellen einer UAClient

Instanz.

Beispiel:

/** Erstellen der Client Instanz */

UAClient client = new UAClient();

1. Applikation Konfiguration

Um die Konfiguration einer Client - Applikation anzugeben, wird eine

ClientConfiguration Klasse erstellt. Diese Klasse beinhaltet den Pfad der Client

Konfiguration, den Pfad des Zertifikates und den Pfad des Privaten Schlüssels.

Beispiel:

/** Setzen der default ClientConfiguration */

client.setClientConfiguration();

/** Setzen einer ClientConfiguration*/

client.setClientConfiguration(configurationFile, certFile, privKeyFile);

Page 8: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

8 OPC UA Java Client Tutorial

2. Client Konfiguration

Einstellungen des OPC UA Clients:

Tag Beschreibung

<ApplicationName> Name der Applikation

<ApplicationUri> Uri der Applikation

<ProductUri> Uri des Server Produkts

<ApplicationType> Typ der Applikation (Client,- Server)

<SecurityConfiguration> Zertifikatseinstellungen

<TransportQuotas> Verbindungseinstellungen

<ClientConfiguration> Clienteinstellungen

<Extensions> Zusätzliche Typen

<TraceConfiguration> Loggingeinstellungen

Page 9: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

9 OPC UA Java Client Tutorial

3. Server Connection

Um eine Verbindung mit einem Server aufzubauen, wird eine ServerUri benötigt.

/** Syntax einer ServerUri */

<Protokoll>://<Hostname>:<Port><ServerName>

Beispiele von ServerUris:

URI SERVER

opc.tcp://<hostname>:62541/Quickstarts/DataAccessServer OPC UA DataAccess Server

opc.tcp://<hostname>:4841 Some Discovery Servers

<hostname> ist der Hostname des Computers auf dem der Server läuft.

Page 10: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

10 OPC UA Java Client Tutorial

4. Security

Der Java Stack unterstützt Transport-Security in der Kommunikation von Server und

Client. In einer Client-Applikation kann man sich die Security-Konfiguration, je nachdem

welche Einstellungen der Server implementiert hat, auswählen. Alle Clients müssen ein

Applikations Zertifikat besitzen, die für die Validierung der „Vertrauenswürdigen

Clients“ benötigt werden.

Die Verbindung wird nur dann aufgebaut, wenn die Security Einstellungen richtig gesetzt

werden. Die Security Prinzipien OPC UA sind die einer PKI (Public Key Infrastructure).

(weiteres Specification OPC UA Part 2 - Security Model)

Page 11: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

11 OPC UA Java Client Tutorial

5. Connect / Disconnect

1. Verbindung herstellen

Um sich mit dem UA Client auf einen OPC Server zu verbinden wird ein Server Endpoint

benötigt. Ein Endpoint beinhaltet Informationen die zur Erzeugung der Verbindung und

Session benötigt werden. Es gibt 2 Möglichkeiten Server Endpoints abzufragen, mittels

Discovery oder der GetServerEndpoints Methode des UAClients.

Endpoints mit Discovery

Mittels eines Discovery Clients werden Server Applikationen oder Endpoints abgefragt

und es besteht die Möglichkeit, diese nach dem SECURITYMODE zu filtern.

ApplicationDescription[] findServer(String discoveryUri) throws

ServiceResultException

Sendet ein FindServer-Service an einem Discovery-Server und liefert

Informationen über die verfügbaren Server zurück.

EndpointDescription[] getEndpoints(String serverUri) throws

ServiceResultException

Sendet ein GetEndpoint-Service an die angegebene Server Uri und liefert

Informationen über die zu verbindenden Server Endpoints zurück.

Beispiel:

/** Variablen */

String discoveryUri = “opc.tcp://localhost:4841”;

String serverUri = “opc.tcp://localhost:4841”;

/** Discovery Client Instanz erstellen */

UADiscoveryClient discoveryClient = new UADiscoveryClient();

Page 12: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

12 OPC UA Java Client Tutorial

/** Discover all ServerApplications */

ApplicationDescription[] findServerResults = discoveryClient. findServer(discoveryUri);

/** Discover all Endpoints from a DiscoveryServer */

EndpointDescription[] endpoints = discoveryClient. getEndpoints(serverUri);

Endpoints ohne Discovery

Der generische UA Client besitzt die Funktionalität um Endpoints von einem Server ohne

die Verwendung von Discovery – Services herauszufinden.

EndpointDescription[] getServerEndpoints(String serverUri, boolean async)

throws ServiceResultException

Liefert die Endpoints von der ServerUri zurück ohne der Verwendung von

Discovery Services.

Beispiel:

/** Variablen */

String serverUri = “opc.tcp://localhost:4841”;

Boolean async = false;

/** Endpoints */

EndpointDescription[] serverEndpoints = client. getServerEndpoints(serverUri, async);

Page 13: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

13 OPC UA Java Client Tutorial

2. Endpoints filtern

Es wird für das Filtern der Endpoints eine Discovery Client Instanz benötigt. Nach dem

Erstellen des Discovery Clients, kann man folgende Methoden zum Filtern der Security

Modes verwenden.

EndpointDescription[] filterEndpoints(EndpointDescription[] endpoints,

SecurityMode securityMode) throws IllegalArgumentException

Filtert die Endpoints nach dem gewünschten Security Mode.

EndpointDescription selectEndpointWithHighestSecurity(EndpointDescription[]

endpoints)

Liefert den Endpoint mit der besten Sicherheit zurück.

EndpointDescription selectEndpointNone(EndpointDescription[] endpoints)

Liefert den Endpoint ohne Sicherheit zurück.

Beispiel:

/** Variablen */

String serverUri = opc.tcp://localhost:4841

/** Discovery Client Instanz erstellen */

UADiscoveryClient discoveryClient = new UADiscoveryClient();

EndpointDescription[]endpoints = discoveryClient.getEndpoints(serverUri);

/** Filter Endpoints */

EndpointDescription[] filteredEndpoints = discoveryClient .filterEndpoints(endpoints, SecurityMode.BASIC128RSA15_SIGN_ENCRYPT);

EndpointDescription endpointHIGH = discoveryClient. selectEndpointWithHighestSecurity(endpoints);

EndpointDescription endpointLOW = discoveryClient.selectEndpointNone(endpoints);

Page 14: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

14 OPC UA Java Client Tutorial

3. Erstellen einer Session

Um eine Client Session zu erstellen wird das CreateSession - Service verwendet. Der

Endpoint wird verwendet um eine Verbindung zu einem Server herzustellen.

ClientSession createSession(EndpointDescription endpoint, String sessionName,

boolean async) throws ServiceResultException

Erzeugt eine Session.

Beispiel:

/** Erstellt eine Session */

ClientSession session = client.createSession(endpoint, “Session1”, false);

4. Aktivierung einer Session am Server

Um eine Session am Server zu aktivieren, wird ein ActivateSession - Service verwendet.

Dieses Service aktiviert die erstellte Session mit einer Login Identität und ermöglicht ab

sofort die Verwendung von OPC UA Services auf dem Server. Ohne die Session auf

einem Server zu aktivieren, ist es nicht möglich UA Services auf einen Server zu senden.

Login Identität

Das Aktivieren der Session kann in 3. verschiedenen Authentifizierungsmöglichkeiten

erfolgen.

ActivateSessionResponse activateSession(ClientSession session, boolean async)

throws ServiceResultException

Aktiviert eine Session mit einem Anonymen-Token.

Page 15: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

15 OPC UA Java Client Tutorial

ActivateSessionResponse activateSession(ClientSession session, String username,

String password, boolean async) throws ServiceResultException

Aktiviert eine Session mit einem Benutzername/Passwort-Token.

ActivateSessionResponse activateSession(ClientSession session, Cert certificate,

boolean async) throws ServiceResultException

Aktiviert eine Session mit einem Zertifikats-Token.

Beispiel:

/**Anonym, Ohne Benutzerinformationen */

client.activateSession(session, false);

/** Benutzername/Passwort – Authentifizierung */

client.activateSession(session, “username”, “password”, false);

/** Zertifikat - Authentifizierung */

client.activateSession(session, cert, false);

5. Verbindung mit einem Server trennen

Um sich von einem Server zu trennen, wird ein CloseSession - Service verwendet. Dieses

Service löscht eine Session am Server und es ist möglich mittels Parameter, alle

Subscriptions zu entfernen.

CloseSessionResponse closeSession(ClientSession session, boolean

deleteSubscriptions, boolean async) throws ServiceResultException

Schließt eine Session und erlaubt es alle dazugehörigen Subscriptions mit

zu löschen.

Page 16: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

16 OPC UA Java Client Tutorial

Beispiel:

/** Trennt eine Session von einem Server */

client.closeSession(session, true, false);

Page 17: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

17 OPC UA Java Client Tutorial

6. Browse

Um den AddressSpace am Server zu durchsuchen, werden Browse- Services verwendet.

Das Model befindet sich in einem oder mehreren AddressSpaces auf einem oder

mehreren Servern. Bei einem hierarchischen Browse wird vom Root Folder ausgegangen

und dessen Referenzen laut restlicher Parameter zwischen den Knoten verfolgt.

ReferenceDescription[] browse(ClientSession session, NodeId nodeToBrowse,

BrowseDirection browseDirection, boolean includeSubtype, UnsignedInteger

nodeClassMask, NodeId referenceTypeId, UnsignedInteger resultMask,

UnsignedInteger maxReferences, ViewDescription view, boolean async) throws

ServiceResultException

Sendet ein Browse Service mit dem gewählten Filter Parameter.

Beispiel:

/** Startknoten */

NodeId serverObjectId = Identifiers.Server;

/** Referenz Typ zum durchsuchen */

NodeId referenceTypes = Identifiers.References;

ReferenceDescription[] browseresult = client.browse(serverObjectId, BrowseDirection.Forward, true, NodeClass.getMask(NodeClass.ALL), referenceTypesToBrowse, BrowseResultMask. getMask(BrowseResultMask.ALL), new UnsignedInteger(1000), null, true);

Page 18: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

18 OPC UA Java Client Tutorial

7. Read Values

Attribute von UA Knoten werden mittels eines Read Services gelesen.

DataValue read1(ClientSession session, NodeId nodeToRead, UnsignedInteger

attributeId, String indexRange, QualifiedName dataEncoding, double maxAge,

TimestampsToReturn timestampToReturn, boolean async) throws

ServiceResultException

Liest ein oder mehrere Attribute von einem oder mehreren Knoten.

Beispiel:

/** Variablen */

NodeId nodeToReadValue = Identifiers.Server_NamespaceArray;

UnsignedInteger attributeId = Attributes.Value;

Double maxAge = 0.0;

String indexRange= "";

QualifiedName dataEncoding = QualifiedName.NULL;

/** Lesen eines Wertes */

DataValue value = client.read1(nodeToReadValue, attributeId, null, null, maxAge, TimestampsToReturn.Both, false);

Page 19: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

19 OPC UA Java Client Tutorial

8. Write Values

Auf Attribute von UA Knoten wird mittels eines Write Services geschrieben.

Boolean write1(ClientSession session, NodeId nodeToWrite, UnsignedInteger

attributeId, String indexRange, DataValue value, boolean async) throws

ServiceResultException

Schreibt ein oder mehrere Attribute auf einen oder mehreren Knoten.

Liefert bei erfolgreichen schreiben TRUE zurück und bei einem

aufgetrettenen Fehler FALSE.

Als Antwort bekommt man einen Status, ob das Schreiben erfolgreich war, oder nicht.

Beispiel:

/** Variablen */

NodeId nodeToWriteValue = Identifiers.Server_NamespaceArray;

UnsignedInteger attributeId = Attributes.Value;

Double maxAge = 0.0;

String indexRange= "";

QualifiedName dataEncoding = QualifiedName.NULL;

/** Schreibt einen Wert */

client.write1(session, nodeToWriteValue, attributeId, indexRange, value, true);

Page 20: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

20 OPC UA Java Client Tutorial

9. Subscription / Publish

Wenn man Wertänderungen, Events oder Alarme am Server beobachten will, werden

Subscriptions erstellt. Diese beinhalten MonitoredItems um diese Notifications

aufzuzeichnen.

Zum Erstellen einer Subscription wird ein CreateSubscription - Service verwendet.

Subscription createSubscription(ClientSession session, boolean async) throws

ServiceResultException

Erstellt eine Subscription zum Sammeln von Monitored Items.

Subscriptions senden über das Publish-Service die Nachrichten um die

Monitored Items mit deren Werte zu aktualisieren.

Dies ist das einfache Erstellen einer Subscription, da die Default-Werte zum Erzeugen

der Subscription vom Server genommen werden. Um alle Monitored Items auf der

Subscription mitzubekommen, kann man SubscriptionListener auf der Subscription

registrieren.

Beispiel:

/** Erstellt eine Default Subscription */

Subscription subscription = client.createSubscription(session, false);

subscription.addSubscriptionListener(new SubscriptionListener()

{

@Override

public void receiveNotificationMessage(Subscription subscription, MonitoredItem monitoredItem, DataValue notification) {

// Code

}

@Override

Page 21: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

21 OPC UA Java Client Tutorial

public void receiveNotificationMessage(Subscription subscription, MonitoredItem monitoredItem, EventFieldList eventFields) {

// Code

});

1. Monitor Data Changes

Um Wertänderungen mit zu bekommen, beobachtet ein Monitored Item einen Variable

Knoten.

MonitoredItem createMonitoredItem(ClientSession session,UnsignedInteger

subscriptionId, NodeId nodeId,UnsignedInteger attributeId, String

indexRange,QualifiedName dataEncoding, double samplingInterval,

ExtensionObject filter, UnsignedInteger queueSize,boolean discardOldest,

MonitoringMode monitoringMode,TimestampsToReturn timestampToReturn,

boolean async) throws ServiceResultException

Erstellt ein Monitored Item um Wertänderungen, Events oder Alarme am

AddressSpace zu überwachen.

Mittels der SubscriptionId wird angegeben, in welche Subscription das Monitored Item

hinzugefügt wird.

Beispiel:

/** Knoten */

NodeId publish = Identifiers.Server_NamespaceArray

/** Erstellt das Monitored Item */

MonitoredItem item = client.createMonitoredItem( subscription.getSubscriptionId(), publish, Attributes.Value, null, null, 1000.0, null, new UnsignedInteger(1), true, MonitoringMode.Reporting, TimestampsToReturn.Both, true);

Page 22: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

22 OPC UA Java Client Tutorial

item.addMonitorListener(new DataChangeMonitorListener () {

@Override

public void monitorDataChange (MonitoredItem item, DataValue newValue, DataValue oldValue) {

// Code

}

});

2. Monitor Events

Um Events mit zu bekommen, beobachtet ein Monitored Item einen Objekt Knoten.

Mittels der SubscriptionId wird angegeben, in welche Subscription das Monitored Item

hinzugefügt wird. Der EventFilter gibt an, welche Felder des Events über das Service

geschickt wird.

Beispiel:

/** WhereClause */

ContentFilter whereClause = new ContentFilter();

/** Erstellt die SelectClause für den Filter */

List<SimpleAttributeOperand> selectClause = new ArrayList<SimpleAttributeOperand>();

QualifiedName[] eventFields = { new QualifiedName("EventId"), new QualifiedName("Message"), new QualifiedName("Severity"), new QualifiedName("SourceName"), new QualifiedName("BranchId"), new QualifiedName("Time"), new QualifiedName("ConditionName") };

/** Setzt die Attribute */

for (QualifiedName eventField : eventFields) {

SimpleAttributeOperand attributeOperand = new SimpleAttributeOperand();

attributeOperand.setAttributeId(Attributes.Value);

Page 23: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

23 OPC UA Java Client Tutorial

attributeOperand .setBrowsePath(new QualifiedName[] { eventField });

attributeOperand.setIndexRange(null);

attributeOperand.setTypeDefinitionId(Identifiers.BaseEventType);

selectClause.add(attributeOperand);

}

/** EventFilter Objecc */

EventFilter filter = new EventFilter();

filter.setSelectClauses(selectClause.toArray(new SimpleAttributeOperand[selectClause.size()]));

filter.setWhereClause(whereClause);

/** Encode the Filter */

ExtensionObject eventFilter = null;

try {

eventFilter = ExtensionObject.binaryEncode(filter);

} catch (EncodingException e) {

//

}

/** Erstellt das Monitored Item */

MonitoredItem eventMonitoredItem = client.createMonitoredItem(subscription.getSubscriptionId(), Identifiers.Server, Attributes.EventNotifier, null, null, 500, eventFilter, UnsignedInteger.MAX_VALUE, true, MonitoringMode.Reporting, TimestampsToReturn.Both, false);

item.addMonitorListener(new EventMonitorListener () {

@Override

public void monitorEvent(MonitoredItem monitoredItem, EventFieldList newevent) {

// Code

}

});

Page 24: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

24 OPC UA Java Client Tutorial

10. Calling Methods

Methoden sind definierbare Funktionen eines Objekt-Knotens im Informationsmodel.

Solche Methoden werden mit einem Call-Service aufgerufen. Dieses Service sendet

Eingabe/Ausgabe Argumente von einer Methode. Argumente sind in den Properties

Knoten der Methode definiert.

CallMethodResult callMethod(ClientSession session, NodeId objectId, NodeId

methodId, Variant[] inputArguments, boolean async) throws

ServiceResultException

Ruft eine Methode eines Objekt Knotens auf. Benötigt wird die ID des

Objekt-Knoten und dessen dazugehörige ID für die Methode mit den

Argumenten mit der diese aufgerufen wird.

Beispiel:

/** Aufruf */

client.callMethod(session, objectId, methodId, inputArguments, false);

Page 25: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

25 OPC UA Java Client Tutorial

11. Register / Unregister Nodes

Mit den Register/Unregister Service können Knoten die im AddressSpace häufiger

verwendet werden performanter abgelegt werden, um deren Zugriff zu verbessern.

NodeId registerNode(ClientSession session, NodeId nodeToRegister, boolean

async)

Registriert einen Knoten am Server. Dieses Service dient zur Verbesserung

der Zugriffe auf Knoten.

Beispiel:

/** Variablen */

NodeId nodeToRegister = Identifiers.Server_NamespaceArray

/** Registrieren des Knotens */

client.registerNode(session, nodeToRegister, false));

/** Freigeben des Registrierten Knoten */

client.unregisterNode(session, nodeToRegister, false));

Page 26: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

26 OPC UA Java Client Tutorial

12. History Access

Das History Access Service bietet die Möglichkeit, historische Daten Schreiben, Lesen

und zu Löschen.

1. History Read

Das History Read Service besitzt den HistoryReadDetails Parameter um ein historisches

Lesen genauer festzulegen.

HistoryReadResult historyRead(ClientSession session, NodeId nodeId, byte[]

continuationPoint, String indexRange, QualifiedName dataEncoding, boolean

releaseContinuation, TimestampsToReturn timestampToReturn,

HistoryReadDetails details, boolean asyncOperation) throws

ServiceResultException

Generelles History Read Service. Dieser Aufruf des History Read Services

bietet eine komplette Parametrisierung der Funktion. Der

HistoryReadDetails Parameter liefert die Information des Lesevorgangs.

Dieser kann folgende Form annehmen:

ReadRawModifiedDetails

Lesen in einem Zeitbereich mit den Parametern Start-, Endzeit und

ein Maximum an zu returnierenden Werte. Es sind mindestens 2 der

Parameter nötig um ein gültiges Lesen abzusenden.

ReadAtTimeDetails

Liest Werte an genauen Zeitpunkten.

2. History Update

Das History Update Service besitzt den HistoryUpdateDetails Parameter um ein

historisches Update genauer festzulegen, da dieses ein Einfügen, Modifizieren oder

Löschen sein kann.

Page 27: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

27 OPC UA Java Client Tutorial

HistoryUpdateResult historyUpdate(ClientSession session, NodeId nodeId,

HistoryUpdateDetails historyUpdateDetails, boolean asyncOperation) throws

ServiceResultException

Generelles History Update Service. Dieser Aufruf des History Update Services

bietet die komplette Parametrisierung der Funktion. Der

HistoryUpdateParameter liefert die Information des Updatevorganges. Dieser

kann folgende Form annehmen:

UpdateDataDetails

Einfügen und/oder Ändern von historischen Werten.

DeleteRawModifiedDetails

Löschen von historischen Werten in einem Zeitbereich.

DeleteAtTimeDetails

Löschen von historischen Werten an einem genauen Zeitpunkt.

Beispiel:

/** History Read */

HistoryReadDetails details = new ReadAtTimeDetails(new DateTime[]{someDateTimes});

client.historyRead(null, id, null, null, null, true, TimestampsToReturn.Both, details, false);

/** History Update */

HistoryUpdateDetails details = new UpdateDataDetails(id, HistoryUpdateMode.Insert, new HistoryData(new DataValue[]{new DataValue()}));

client.historyUpdate(session, id, details , false);

Page 28: OPC UA Java Client Tutorial - HB-Softsolution - · PDF fileOPC UA Java Client Tutorial V 1.0.2 Tutorial zur Erstellung eines OPC UA Java Clients. Das SDK beinhaltet ein Testbeispiel

28 OPC UA Java Client Tutorial

3. Client History Archive

Das Client SDK bietet zu diesen beiden Methoden noch eine alternative Lösung um auf

historische Werte zugreifen zu können, das HistoryArchive.

Beispiel:

/** HistoryArchive */

HistoryArchive archive = client.historyArchive(session);

/** History Read */

HistoryReadResult result = archive.readHistoryAtTime(id, timestamp, false);

HistoryReadResult result = archive.readHistoryRaw(id, start, end, 1000, false);

/** History Update */

HistoryUpdateResult updateResult = archive.updateHistory(id,datavalues, false);

HistoryUpdateResult updateResult = archive.updateOrInsertHistory(id, datavalues, false);

HistoryUpdateResult updateResult = archive.deleteHistory(id, timestamp, false);

HistoryUpdateResult updateResult = archive.deleteHistory(id, start, end, false);