Skip to main content
Skip table of contents

OPC UA Subscriber Adapter

Dieser Adapter stellt eine Verbindung zu einem OPC UA Server her und abonniert oder storniert Datenänderungen oder Ereignisse.

Eigenschaften (Properties)

Operation

Vom Adapter ausgeführte Operation

Mögliche Werte:

  • Subscribe: Abonniert Datenänderungen oder Ereignisse entsprechend dem Input-XML-Dokument

  • UnSubscribe: Storniert bestehende Abonnements für einen bestimmten Client

Parameter

Adapter

Adapter-Hauptklasse (nicht verändern!)

Mögliche Werte: de.softproject.integration.adapter.opcua.OpcUaSubscriberAdapterHauptklasse (Standard)

clientAlias

Alias zur Kennzeichnung der Verbindungseinstellungen

Mögliche Werte: Beliebige Zeichenkette mit dem Client Alias

process

X4DB-Pfad zu einem Technical Process, der nach jedem Abonnentenempfang ausgeführt wird

Mögliche Werte: Beliebiger gültiger X4DB-Pfad, z. B. x4db://1/SampleProject/SampleProcess.wrf

url

Server-URL

Mögliche Werte: Beliebige gültige URL, z. B. opc.tcp://SP-WS-204.softproject.local:53530/OPCUA/SimulationServer

user

Benutzername, um eine Verbindung zum Server aufzubauen

Mögliche Werte: Beliebige Zeichenkette mit dem Benutzernamen, z. B. myUser

password

Passwort, um eine Verbindung zum Server aufzubauen

Mögliche Werte: Beliebige Zeichenkette mit dem Passwort, z. B. myPassword

security mode

Sicherheits-Modus und Server-Richtlinien

Mögliche Werte:

  • NONE
  • BASIC256_SIGN
  • BASIC256_SIGN_ENCRYPT
  • BASIC128RSA15_SIGN
  • BASIC128RSA15_SIGN_ENCRYPT
  • BASIC256SHA256_SIGN
  • BASIC256SHA256_SIGN_ENCRYPT
autoReconnect

Angabe, ob sich der Client automatisch wieder mit dem Server verbinden soll oder nicht.

Statuswerte

1

Die Adapter-Operation wurde erfolgreich ausgeführt

-1Bei der Ausführung des Adapters kam es zu einem Fehler

Input

Operation Subscribe

  • Vollständiges Beispiel mit verschiedenen Abonnement-Typen:

    Input für die Operation Subscribe

    XML
    <?xml version="1.0" encoding="UTF-8"?>
    <Subscriptions>
    	<!-- Subscription to a data value change -->
     	<Subscription type="DATA_CHANGE" nodeIndex="3" nodeIdentifier="Counter" nodeIdentifierType="String"></Subscription>
    
    	<!-- Subscription to an event, specifying a condition -->
     	<Subscription type="EVENT" nodeIndex="5" nodeIdentifier="MyLevel.Alarm" nodeIdentifierType="String">
     		<Field name="SourceName">
     			<Literal>LIKE</Literal>
    			<Operand>Server</Operand>
     		</Field>
     	</Subscription>
    
    	<!-- Subscription to an event, specifying more than one condition -->
    	<Subscription type="EVENT" nodeIndex="5" nodeIdentifier="MyLevel.Alarm" nodeIdentifierType="String">
    		<Field name="ActiveState" attributeId="13">
     			<Operand>EQUALS</Operand>
     			<Literal>Active</Literal>
    		</Field>
    		<Field name="AckedState" attributeId="13">
     			<Operand>EQUALS</Operand>
     			<Literal>Unacknowledged</Literal>
    		</Field>
    		<Field name="Comment" attributeId="13"></Field>
    		<Field name="EnabledState" attributeId="13"></Field>
    		<Field name="EventType" attributeId="1">
    			<Operand>EQUALS</Operand>
    			<Literal>i=9482</Literal>
    		</Field>
    		<Field name="Quality">
     			<Operand>EQUALS</Operand>
      			<Literal>GOOD (0x00000000) ""</Literal>
    		</Field>
    		<Field name="Severity">
     			<Operand>LESS_THAN</Operand>
     			<Literal>600</Literal>
    		</Field>
    		<Field name="SourceName"></Field>
    		<Field name="Time"></Field>
    	</Subscription>
    
    	<!-- Configuring  -->
     	<OnAfterCreate>x4db://1/TestingOPCUA/Processes/OnAfterCreate.wrf</OnAfterCreate>
     	<OnAlive>x4db://1/TestingOPCUA/Processes/OnAlive.wrf</OnAlive>
    </Subscriptions>
  • Datenwertänderung abonnieren:

    Um eine Datenwertänderung zu abonnieren, muss ein Subscription-Knoten mit folgenden Pflichtattributen angelegt werden:

    • type, um die Art des Abonnements festzulegen
    • nodeIndex, nodeIdentifier, um den OPC UA-Knoten zu identifizieren, von dem die Änderungen abonniert werden
    • nodeIdentifierType, um den Datentyp des Knotenbezeichners zu spezifizieren

    Der Subscription-Knoten kann folgende optionale Attribute enthalten:

    • samplingInterval: Wert in Millisekunden, mit dem der OPC UA Server, die Datenquelle (SPS) abtastet.
    • publishingInterval Wert in Millisekunden, mit dem der OPC UA Server, die Daten an den Client (z.B. X4) sendet.
    XML
    <?xml version="1.0" encoding="UTF-8"?>
    <Subscriptions>
    	<Subscription type="DATA_CHANGE" nodeIndex="3" nodeIdentifier="Counter" nodeIdentifierType="String" samplingInterval="1000" publishingInterval="1000">
    	</Subscription>
    </Subscriptions>
  • Events abonnieren, ohne Felder zu spezifizieren:

    XML
    <?xml version="1.0" encoding="UTF-8"?>
    <Subscriptions>
    	<!-- We will receive an empty event -->
    	<Subscription type="EVENT" nodeIndex="5" nodeIdentifier="MyLevel.Alarm" nodeIdentifierType="String">
    	</Subscription>
    </Subscriptions
  • Events abonnieren und Felder spezifizieren:

    XML
    <?xml version="1.0" encoding="UTF-8"?>
    <Subscriptions>
    	<!-- In the Field node, we define the field we want to retrieve on each event reception. -->
    	<Subscription type="EVENT" nodeIndex="5" nodeIdentifier="MyLevel.Alarm" nodeIdentifierType="String">
    		<Field name="SourceName"></Field>
    		<Field name="Time"></Field>
    	</Subscription>
    	<!-- Any number of Field nodes possible. -->
    </Subscriptions>
  • Events abonnieren und Filter für die spezifizierten Felder definieren:
    Es ist möglich, Bedingungen für die Attribute zu definieren, die bei jedem Ereignisempfang erhalten werden. Dazu müssen entsprechend viele Field-Knoten angelegt werden. Jeder Field-Knoten enthält dabei die Elemente Literal und Operand.

    Event mit Filtern abonnieren

    XML
    <?xml version="1.0" encoding="UTF-8"?>
    <Subscriptions>	
    	<!-- In the Field node, we define the field we want to retrieve on each event reception. Inside this node Operand and Literal are defined in order to create the condition over the field. -->
    	<Subscription type="EVENT" nodeIndex="5" nodeIdentifier="MyLevel.Alarm" nodeIdentifierType="String">
    	<!-- Severity less than 600 -->
    	<Field name="Severity"> 
    		<Operand>LESS_THAN</Operand> 
    		<Literal>600</Literal>
    	</Field>
    	</Subscription>
    	<!-- Any number of Field nodes possible. If there is more than one Field node containing conditions, the logical operator applied between fields will be 'OR' -->
    </Subscriptions>

    Beachten Sie:

    • Das name-Attribut innerhalb von Field ist erforderlich.
    • Operand kann folgende Werte haben:
      • LESS_THAN
      • LESS_THAN_OR_EQUALS
      • GREATER_THAN
      • GREATER_THAN_OR_EQUALS
      • EQUALS
      • NOT
      • LIKE
    • Literal enthält die verschiedenen literalen Werte, die innerhalb des Ausdrucks berücksichtigt werden sollen.

Operation Unsubscribe

Die Operation UnSubscribe benötigt keinen Input, da eine Stornierung des Abonnements erfolgt. Daher muss im Parameter clientAlias lediglich der Alias des Mandanten angegeben werden. 

Output

Operation Subscribe

Die Ausgabestruktur hängt vom Typ der Empfangsnachricht ab. 

  • Wird ein Event mit Feldern empfangen (mit oder ohne Bedingungen), die im Abonnement konfiguriert wurden, ähnelt die Antwort-Struktur folgender Beispielausgabe:

    Output für Event-Antworten

    XML
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Message type="EVENT">
        <Node description="ns=5;s=MyLevel.Alarm"/>
        <Fields>
            <Field fieldName="ActiveState">Active</Field>
            <Field fieldName="AckedState">Unacknowledged</Field>
            <Field fieldName="Comment">EMPTY</Field>
            <Field fieldName="EnabledState">Enabled</Field>
            <Field fieldName="EventType">i=9482</Field>
            <Field fieldName="Quality">GOOD</Field>
            <Field fieldName="Severity">500</Field>
            <Field fieldName="SourceName">MyLevel</Field>
            <Field fieldName="Time">1576741128000</Field>
        </Fields>
    </Message>

    Die Angabe von Bedingungen führt dazu, dass mehr oder weniger Events empfangen werden. Sobald jedoch ein Event empfangen wird, enthält die Antwort die Felder, die im Abonnement angegeben wurden. 

  • Wird ein Event ohne Feld-Spezifikationen empfangen, ähnelt die Antwort-Struktur folgender Beispielausgabe:

    Output für Event-Antworten

    XML
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Message type="EVENT"/>
  • Wird eine Datenwertänderung empfangen, ähnelt die Antwort-Struktur folgender Beispielausgabe:

    Output für Datenwertänderungen

    XML
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Message type="DATA_CHANGE">
        <Node description="ns=3;s=Counter"/>
        <OldValue>
    		<!-- 0 means null timestamp  -->
            <sourceTimestamp>0</sourceTimestamp>
    		<!-- No value and statusCode present in 'OldValue' node happens only just after subscribing on the first reception -->
        </OldValue>
        <NewValue>
            <sourceTimestamp>13221214634996</sourceTimestamp>
            <statusCode>GOOD</statusCode>
            <value>2312.11</value>
        </NewValue>
    </Message>

Operation UnSubscribe

Die Operation UnSubscribe hat keine Ausgabe, da der Status 1 bedeutet, dass die Operation erfolgreich ausgeführt wurde.

Alive Listener Konfiguration

Es gibt einen Alive Listener, der es ermöglicht, Aktionen für jede Live-Benachrichtigung eines Abonnements zu konfigurieren.

Dabei lassen sich Prozesse für folgende Situationen definieren:

  • After create: Das Abonnement wurde auf dem Server (neu) erstellt. Dies ist der Fall, wenn die Abonnierung aufgrund einer Kommunikationsunterbrechung in einen Timeout geriet und nach der Wiederverbindung neu erstellt werden muss.
  • Alive: Der Server bestätigte, dass die Verbindung aktiv ist, obwohl es keine Änderungen zu senden gab.
  • Life timeout: Der Server hat nicht bestätigt, dass die Verbindung aktiv ist, und der Life-Timeout wurde überschritten.
  • Timeout: Der Server hat nicht bestätigt, dass die Verbindung aktiv ist, und die maximale Keepalive-Anzahl wurde überschritten.

Die Aktionen werden als Teil des Input-XML-Dokuments wie folgt definiert:

Input for Subscribe operation

XML
<?xml version="1.0" encoding="UTF-8"?>
<Subscriptions>
 	<Subscription ...></Subscription>
 	<Subscription ...></Subscription>

	<!-- Alive listener actions  -->
	<!-- We can define some of them or none, they are not required -->

 	<OnAfterCreate>x4db://1/TestingOPCUA/Processes/OnAfterCreate.wrf</OnAfterCreate>
 	<OnAlive>x4db://1/TestingOPCUA/Processes/OnAlive.wrf</OnAlive>
 	<onLifetimeTimeout>x4db://1/TestingOPCUA/Processes/onLifetimeTimeout.wrf</onLifetimeTimeout>
 	<onTimeout>x4db://1/TestingOPCUA/Processes/onTimeout.wrf</onTimeout>
</Subscriptions>
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.