OPC UA Java Client Tutorial - HB

Werbung
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
2
OPC UA Java Client Tutorial
Inhalt
1.
Unterstütze OPC UA Profile .................................................................................................................. 3
1.
2.
OPC UA Client Profile........................................................................................................................ 3
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
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
Ja
needed to navigate through the AddressSpace. This
includes basic Address space concepts, view and
browse functionality and simple attribute read
functionality.
Node Management
Client Facet
This Client Facet includes the ConformanceUnits
that Clients will have to use to configure the
Ja
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
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
6
OPC UA Java Client Tutorial
Client Facet
uses of reading Attribute values of Nodes.
(https://www.opcfoundation.org/profilereporting/, Client, 08.11.2011)
7
OPC UA Java Client Tutorial
2.
Generische Client Objekt
Die UAClient Klasse ist die Haupt-Instance die benutzt wird um Services an einen OPCUA 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);
8
OPC UA Java Client Tutorial
2. Client Konfiguration
Einstellungen des OPC UA Clients:
Tag
Beschreibung
<ApplicationName>
<ApplicationUri>
<ProductUri>
<ApplicationType>
<SecurityConfiguration>
<TransportQuotas>
<ClientConfiguration>
<Extensions>
<TraceConfiguration>
Name der Applikation
Uri der Applikation
Uri des Server Produkts
Typ der Applikation (Client,- Server)
Zertifikatseinstellungen
Verbindungseinstellungen
Clienteinstellungen
Zusätzliche Typen
Loggingeinstellungen
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.
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)
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();
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);
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);
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.
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.
16
OPC UA Java Client Tutorial
Beispiel:
/** Trennt eine Session von einem Server */
client.closeSession(session, true, false);
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);
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);
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);
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, DataValue notification) {
// Code
}
@Override
MonitoredItem
21
OPC UA Java Client Tutorial
public void receiveNotificationMessage(Subscription subscription,
monitoredItem, EventFieldList eventFields) {
MonitoredItem
// 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);
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);
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
}
});
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);
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));
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.
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);
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);
Herunterladen