# OPC DA

> Ein Client für klassische OPC-Data-Access-Server über COM/DCOM, der in einem 32-Bit-Hilfsprozess läuft, mit Adressierung über die Item-ID und einem Suchlauf nach den Servern eines Rechners.

Der Treiber **OPC DA** ist ein Client für klassische OPC-Data-Access-Server (Versionen 1.0, 2.05a und 3.0), die COM-Server, über die ältere SPS-Gateways, SCADA-Systeme und Simulatoren ihre Daten noch heute veröffentlichen. Ein Server wird über den Rechner benannt, auf dem er läuft, und über seine ProgID, zum Beispiel `Matrikon.OPC.Simulation.1`, jedes Tag über die Item-ID des Servers. Fügen Sie den Treiber und seine Geräte auf der Seite [Connector](connector) hinzu.

## Gerät {#device}

| Feld | Bedeutung | Standard |
| --- | --- | --- |
| **Hostadresse** | Name oder Adresse des Rechners, auf dem der OPC-DA-Server läuft. Leer bedeutet dieser Rechner, auf dem die meisten klassischen Server laufen. | leer: dieser Rechner |
| **Server / Schlüssel** | Die ProgID des Servers, so wie der Hersteller sie in Windows registriert, zum Beispiel `Matrikon.OPC.Simulation.1`. | `OPC.Server.1` |
| **Abfrageintervall (ms)** | Wie oft die Station die Tags des Geräts liest, sofern ein Tag kein eigenes Intervall festlegt. | 1000 |

Die Adresse des Geräts wird aus beiden zusammengesetzt, zum Beispiel `opc.da://localhost/Matrikon.OPC.Simulation.1`. Einen Port gibt es nicht: COM findet den Server über die Registrierung von Windows selbst.

## Adressierung der Tags {#tag-addressing}

Ein Tag wird über seine **Item-ID** adressiert, als Freitext eingegeben und genau so an den Server gesendet, wie sie geschrieben ist, zum Beispiel `Random.Real8` oder `Channel1.Device1.Tag1`. Die Item-IDs gehören dem Server; seine Dokumentation oder ein Suchlauf führt sie auf. Die Station nimmt jedes Item beim ersten Lesen durch ein Tag in eine Gruppe des Geräts auf und liest es vom Gerät, nicht aus dem Zwischenspeicher des Servers.

## Datentypen {#data-types}

Die Auswahl **Datentyp** bietet die Typen an, die ein OPC-DA-Item führt: Boolean, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Float, Double, String und DateTime. Jedes Lesen wird in den Typ des Tags umgewandelt, wählen Sie also den Typ, den der Server für das Item angibt, denselben, den ein Suchlauf vorschlägt: Ein 64-Bit-Gleitkomma-Item verliert als Float gelesen an Genauigkeit und behält sie als Double. Ein Wert, den der Typ des Tags nicht fassen kann, etwa ein Text, der keine Zahl ist, oder ein Array, lässt das Tag ohne Wert. Ein Datum trägt in OPC DA keine Zeitzone, und die Station liest und schreibt es als UTC.

Jeder Wert, mit dem der Server antwortet, trägt seine Qualität. Ein Wert guter Qualität (Good) erreicht das Tag. Einer unsicherer (Uncertain) oder schlechter Qualität (Bad) lässt das Tag ohne Wert, und die Journalzeile des fehlgeschlagenen Lesens nennt die Qualität mit den Worten der OPC-DA-Spezifikation, zum Beispiel `Bad: not connected (0x0008)` oder `Uncertain: last usable value (0x0044)`. Ein Item, dessen Lesen fehlschlägt, lässt sein Tag ohne Wert, und die übrigen Tags des Geräts lesen weiter.

## Gerätesuche {#discovery}

**Geräte suchen** führt die OPC-DA-Server auf, die auf einem Rechner registriert sind: Geben Sie dessen Namen oder Adresse als Ziel des Suchlaufs ein, oder lassen Sie es für diesen Rechner leer. Jeder Server wird als Gerät angeboten, und sein Adressraum wird durchlaufen: Jedes Item, das er führt, wird als Tag mit Nur lesen angeboten, mit dem Typ, den der Server dafür angibt: eine 64-Bit-Gleitkommazahl als Double, eine vorzeichenlose 16-Bit-Ganzzahl als UInt16 und so weiter für jeden Typ oben, ein Währungswert als Double. Ein Item, das keinen Typ angibt, wird als String angeboten, der jeden Wert liest; ein Item eines Typs, den kein Tag liest, etwa ein Array, wird nicht angeboten, und der Suchlauf zählt es zu dem, was er ausgelassen hat. Wie Kandidaten ausgewählt und hinzugefügt werden, steht unter [Gerätesuche](connector-discovery).

Der Suchlauf fragt den OPC-Server-Enumerator (OpcEnum) nach den Servern, über die auf diesem Rechner registrierten Proxy- und Stub-Bibliotheken von OPC DA. Solange einer dieser Teile fehlt, führt der Suchlauf nichts auf und sagt stattdessen, was fehlt, mit den Schritten unter [Die OPC Core Components installieren](#installing-the-opc-core-components).

## Schreiben {#writes}

Tags, deren **Zugriff** Lesen und schreiben oder Nur schreiben ist, lassen sich schreiben, und zwar auf dasselbe Item, das der Lesevorgang verwendet. Der Wert wird in dem Typ gesendet, in dem der Server das Item führt (im Typ des Tags selbst, wenn der Server ihn nicht nennt), aus dem Wert des Tags umgewandelt, ohne den Umweg über Text, sodass eine Station in jeder Sprache dieselbe Zahl sendet. Eine Ganzzahl außerhalb des Bereichs des Item-Typs wird abgelehnt, bevor etwas gesendet wird, und nie auf den nächsten Wert gekürzt, den der Typ fassen kann. Ein Schreibvorgang, den der Server ablehnt, kommt abgelehnt zurück, mit dem Grund, wenn die Station ihn benennen kann (ein Item, das kein Schreiben annimmt, ein Wert, den das Item nicht annimmt, ein Item, das der Server nicht kennt, verweigerter Zugriff), und sonst mit dem Fehlercode des Servers, zum Beispiel `OPC DA 0x80004005`; das Journal hält den Code des Servers in jedem Fall fest. OPC DA kennt keine Befehle: Ein Gerät dieses Treibers bietet keine an.

## Der 32-Bit-Hilfsprozess {#the-32-bit-helper}

OPC-DA-Server werden über einen 32-Bit-COM-Client erreicht, den die 64-Bit-Station nicht laden kann. Der Treiber läuft deshalb in einem eigenen Hilfsprozess, `Lab.Desktop.DriverBridge.exe`, den die Station startet, sobald ein OPC-DA-Gerät oder ein Suchlauf ihn zum ersten Mal braucht oder die Station die OPC Core Components prüft, und beendet, wenn der Connector stoppt. An der Bedienung des Treibers ändert sich nichts: Seine Geräte und Tags werden gelesen, geschrieben, durchsucht und im Journal festgehalten wie bei jedem anderen.

Hält der Hilfsprozess an, zeigen seine Geräte den Fehler "Der 32-Bit-Hilfsprozess des OPC DA-Treibers hat angehalten. Die Station startet ihn erneut, und das Gerät verbindet sich über ihn neu.", die Seite Ereignisse enthält seinen Exitcode, und ihre Tags verlieren ihre Werte. Die Station startet den Hilfsprozess erneut, nach einer Pause, die wächst, solange er immer wieder anhält, und die Geräte verbinden sich von selbst über ihn neu. Ein Schreibvorgang, der unterwegs war, als der Hilfsprozess anhielt, kommt als fehlgeschlagen zurück und sagt, dass nicht bekannt ist, ob der Wert das Gerät erreicht hat. Kein anderer Treiber und kein anderer Teil der Station hält mit ihm an.

## Bevor Sie beginnen {#before-you-start}

- Die Station installiert keine OPC-Komponente. Der OPC-Server-Enumerator (OpcEnum) und die Proxy- und Stub-Bibliotheken von OPC DA kommen mit dem OPC-DA-Server oder mit den OPC Core Components. Die Station prüft selbst, ob sie registriert sind, und sagt, solange einer dieser Teile fehlt, wie sie installiert werden: siehe [Die OPC Core Components installieren](#installing-the-opc-core-components).
- Ein Server auf einem anderen Rechner wird über DCOM erreicht, das beide Rechner für das Windows-Konto erlauben müssen, unter dem die Station läuft: DCOM-Berechtigungen, Firewall-Regeln und dasselbe Konto oder eine vertrauenswürdige Domäne. Diese Einrichtung wird in Windows vorgenommen, nie in der Station: siehe [Einen entfernten Server vorbereiten](#prepare-a-remote-server).
- Der Treiber läuft nur unter Windows.

## Die OPC Core Components installieren {#installing-the-opc-core-components}

Die Station prüft selbst, im 32-Bit-Hilfsprozess, ob auf diesem Rechner der OPC-Server-Enumerator
(OpcEnum) und die Proxy- und Stub-Bibliotheken von OPC DA für 32-Bit-Programme registriert sind: wenn die
Seite des Treibers, die Seite eines seiner Geräte oder der Agent zum ersten Mal fragt, und erneut alle 30
Sekunden, solange einer dieser Teile fehlt. Bis der Connector gestartet ist, ist nicht bekannt, ob sie
vorhanden sind, und es wird nichts dazu gesagt. Solange einer fehlt:

| Wo | Was dort steht |
| --- | --- |
| Die Seite des Treibers | Ein Warnhinweis, "Die OPC Core Components fehlen auf diesem Rechner", mit den Schritten unten. Sein Link öffnet die Seite der OPC Foundation im Browser des Rechners. |
| Die Seite jedes Geräts | Derselbe Hinweis, außer das Gerät ist online. |
| Ein Suchlauf | Er führt nichts auf und sagt, was fehlt: Die Abschlusszeile des Suchlaufs verweist auf den Hinweis, und `device_discover` des Agenten nennt die Schritte auf Englisch. |
| Der letzte Fehler eines Geräts, dessen Verbindung scheitert | Was fehlt und dieselben Schritte, auf Englisch, wie die eigenen Ursachen des Treibers geschrieben sind. |
| Der Agent | `driver_capabilities` nennt sie unter `prerequisite`, mit `installed` auf false. |

So installieren Sie sie:

1. Führen Sie das Installationsprogramm Ihres OPC-DA-Servers erneut aus: Es installiert sie meist mit.
2. Andernfalls öffnen Sie die Seite [Core Components](https://opcfoundation.org/developer-tools/samples-and-tools-classic/core-components/) der OPC Foundation und laden die OPC Core Components Redistributables herunter. Nur ein registrierter Benutzer darf sie herunterladen: Wenn die Seite meldet, dass Sie keine Berechtigung zum Herunterladen der Datei haben, melden Sie sich mit "Login" an oder legen Sie mit "Create Account" auf derselben Seite ein Konto an.
3. Nehmen Sie unter 64-Bit-Windows `opc-core-components-redistributable-<version>-x86-x64.msi`, das auch die 32-Bit-Komponenten enthält, und nur unter 32-Bit-Windows die Datei, die auf `-x86.msi` endet.
4. Führen Sie sie als Administrator aus und starten Sie den Rechner neu, wenn das Installationsprogramm es verlangt.

Spätestens 30 Sekunden nach der Installation verschwindet der Hinweis, der Suchlauf führt die
OPC-DA-Server auf, und die Geräte dieses Treibers verbinden sich mit ihrer bestehenden Konfiguration, ohne
dass Ganter Lab neu gestartet wird.

## Einen entfernten Server vorbereiten {#prepare-a-remote-server}

Ein Server auf diesem Rechner braucht nichts weiter. Ein Server auf einem anderen Rechner wird über
DCOM erreicht, und DCOM lässt von einem anderen Rechner nichts herein, bis beide dafür eingerichtet
sind. Die Einrichtung geschieht in Windows auf beiden Rechnern, durch einen Administrator jedes
Rechners, nie in der Station:

1. Verwenden Sie auf beiden Rechnern dasselbe Windows-Konto mit demselben Kennwort (das Konto, unter
   dem die Station läuft) oder ein Domänenkonto, das beide Rechner kennen.
2. Starten Sie auf dem Rechner des Servers `dcomcnfg` und öffnen Sie **Component Services >
   Computers > My Computer > Properties > COM Security**. Erlauben Sie diesem Konto unter **Access
   Permissions** und **Launch and Activation Permissions**, sowohl in **Edit Limits** als auch in
   **Edit Default**, jedes Remoterecht. Erlauben Sie in **Edit Limits** von **Access Permissions**
   außerdem **Remote Access** für ANONYMOUS LOGON, das der OPC-Server-Enumerator (OpcEnum) braucht.
3. Öffnen Sie dort unter **My Computer > DCOM Config** die Properties des OPC-Servers und von
   OpcEnum und passen Sie auf ihrer Registerkarte Security die drei Berechtigungen mit demselben
   Konto an.
4. Starten Sie auch auf dem Rechner der Station `dcomcnfg` und erlauben Sie in **Edit Limits** von
   **Access Permissions** **Remote Access** für das Konto, unter dem der OPC-Server läuft: Der Server
   ruft die Station zurück.
5. Erlauben Sie auf dem Rechner des Servers in der Windows Defender Firewall eingehend den TCP-Port
   135 und die Programme des OPC-Servers und von OpcEnum (`OpcEnum.exe`), und prüfen Sie unter
   **Dienste**, dass OpcEnum läuft und automatisch startet.

**Edit Default** ändert nichts, solange **Edit Limits** das Recht verweigert: Setzen Sie beide. DCOM
antwortet auf Port 135 und führt die Aufrufe dann über einen Port, den Windows wählt: Eine Firewall
zwischen den beiden Rechnern, die nur 135 öffnet, sperrt den Server also weiterhin.

| Was Windows antwortet | Was die Seite des Geräts sagt |
| --- | --- |
| Zugriff verweigert (0x80070005) | „*Host* lehnt diese Station über DCOM ab“, mit dem Konto, unter dem die Station läuft, und den Schritten 1 bis 4 |
| Der RPC-Server ist nicht verfügbar (0x800706BA) | „*Host* antwortet nicht auf DCOM“: Der Rechner ist aus oder nicht erreichbar, seine Firewall sperrt DCOM, oder OpcEnum läuft dort nicht, mit Schritt 5 |

Jeder Hinweis steht an der Stelle des Fehlers des Geräts und verschwindet von selbst, sobald der
Server sich verbindet. Das Journal und der Agent lesen dieselben Schritte auf Englisch. Ein Server
auf diesem Rechner wird nie so gemeldet.

Wo die Anlage kein DCOM erlaubt, umgeht es ein Wrapper oder Tunnel, der den OPC-DA-Server auf dem
Rechner des Servers über OPC UA anbietet, ganz: Die Station liest den Server dann mit dem Treiber
[OPC UA](driver-opc-ua).
