# Beispielanwendungen

> Referenz: Vollständig lauffähige Clients und Server mit dem OPC UA .NET SDK in C# und VB.NET, filterbar nach Art und Sprache, mit Links auf GitHub.

Die Beispielanwendungen im Repository [opcuanet-samples](https://github.com/Traeger-GmbH/opcuanet-samples) auf GitHub sind vollständige Programme, die Sie klonen, starten und als Ausgangspunkt für eigene Anwendungen verwenden können. Zu den meisten Clients gibt es einen passenden Server im selben Bereich. Starten Sie in diesem Fall zuerst den Server und dann den Client.

So starten Sie ein Beispiel, hier den Client `Basic/Client`:

```sh
git clone https://github.com/Traeger-GmbH/opcuanet-samples.git
cd opcuanet-samples
dotnet run --project cs/Basic/Server -f net8.0
dotnet run --project cs/Basic/Client -f net8.0
```

Server und Client laufen dabei in zwei getrennten Konsolen. Die Beispiele verwenden das SDK in der Evaluation, also ohne Lizenzschlüssel.

## Grundlagen

- Client (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Client), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Client)): Verbindet sich mit einem Server, liest einen Node, schreibt einen neuen Wert und liest ihn erneut.
- Server (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Server), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Server)): Stellt mit einem eigenen Node-Manager eine Maschine mit einigen Nodes bereit.
- Client.AE (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Client.AE), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Client.AE)): Abonniert die Ereignisse einer Maschine, gefiltert nach Schweregrad, quittiert Alarme und beantwortet Dialoge an der Konsole.
- Server.AE (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Server.AE), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Server.AE)): Stellt eine Maschine mit Dialog-Bedingung, Grenzwert-Alarm und Temperatur-Alarm bereit und ändert deren Zustände laufend.
- Client.Authentication (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Client.Authentication), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Client.Authentication)): Meldet sich mit Benutzername und Passwort am Server an und liest und schreibt einen Node.
- Server.Authentication (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Server.Authentication), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Server.Authentication)): Lässt nur Benutzer zu, die mit Benutzername und Passwort angemeldet sind, und prüft sie über eine Zugriffsliste.
- Client.Browsing (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Client.Browsing), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Client.Browsing)): Durchsucht den Adressraum des Servers ab dem ObjectsFolder und gibt die Nodes mit ihren Attributen eingerückt aus.
- Client.DataTypes (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Client.DataTypes), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Client.DataTypes)): Liest Nodes mit strukturierten Datentypen des Servers und arbeitet mit ihnen über eigene .NET-Klassen.
- Server.DataTypes (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Server.DataTypes), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Server.DataTypes)): Stellt Nodes bereit, deren Werte eigene strukturierte Datentypen und Aufzählungen haben.
- Server.DataTypes.Complex (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Server.DataTypes.Complex), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Server.DataTypes.Complex)): Stellt Nodes mit eigenen strukturierten Datentypen bereit und bildet deren Felder zusätzlich als eigene Kind-Nodes ab.
- Client.EventTypes (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Client.EventTypes), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Client.EventTypes)): Abonniert Ereignisse eines eigenen Ereignistyps und liest ihre strukturierten Ereignisdaten über eine eigene Ereignisklasse.
- Server.EventTypes (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Server.EventTypes), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Server.EventTypes)): Stellt einen eigenen Ereignistyp aus einem NodeSet bereit; ein Methodenaufruf durch den Client löst Ereignisse mit strukturierten Daten aus.
- Client.HDA (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Client.HDA), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Client.HDA)): Liest die Historie eines Nodes, als Rohdaten, seitenweise und mit den Änderungen an der Historie.
- Server.HDA (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Server.HDA), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Server.HDA)): Stellt Nodes mit Historie bereit, die der Server im Speicher führt.
- Server.HDA.Sql (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Server.HDA.Sql), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Server.HDA.Sql)): Stellt Nodes mit Historie bereit, die der Server in einer SQLite-Datenbank ablegt, einschließlich der Änderungen an der Historie.
- Client.Methods (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Client.Methods), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Client.Methods)): Ruft Methoden des Servers auf, nacheinander und parallel, und misst die Dauer.
- Server.Methods (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Server.Methods), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Server.Methods)): Stellt Methoden-Nodes bereit, synchron und asynchron ausgeführt, mit Ein- und Ausgabeargumenten.
- Server.NodeTypes (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Basic/Server.NodeTypes), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Basic/Server.NodeTypes)): Importiert eigene Node-Typen aus einem NodeSet und stellt Instanzen davon über eigene Node-Klassen bereit.

## Konfiguration

- Client.ConfiguredViaCode (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Configuration/Client.ConfiguredViaCode), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Configuration/Client.ConfiguredViaCode)): Zeigt verschiedene Wege, einen Client im Code zu konfigurieren, von der Standardkonfiguration bis zu eigenen Einstellungen.
- Server.ConfiguredViaCode (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Configuration/Server.ConfiguredViaCode), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Configuration/Server.ConfiguredViaCode)): Zeigt verschiedene Wege, einen Server im Code zu konfigurieren, von der Standardkonfiguration bis zu eigenen Einstellungen.
- Client.ConfiguredViaXml (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Configuration/Client.ConfiguredViaXml), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Configuration/Client.ConfiguredViaXml)): Lädt die Konfiguration eines Clients aus einer XML-Datei.
- Server.ConfiguredViaXml (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Configuration/Server.ConfiguredViaXml), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Configuration/Server.ConfiguredViaXml)): Lädt die Konfiguration eines Servers aus einer XML-Datei.

## Node-Typen

- Client.AnalogItemNode (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Nodes/Client.AnalogItemNode), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Nodes/Client.AnalogItemNode)): Liest Analogwerte mit Einheit und Messbereich und gibt sie aus.
- Server.AnalogItemNode (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Nodes/Server.AnalogItemNode), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Nodes/Server.AnalogItemNode)): Stellt Analogwerte mit Einheit, Messbereich und Gerätebereich bereit.
- Client.DataTypeNode (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Nodes/Client.DataTypeNode), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Nodes/Client.DataTypeNode)): Liest einen Node mit eigenem Aufzählungstyp, zeigt die möglichen Werte und schreibt einen neuen Wert.
- Server.DataTypeNode (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Nodes/Server.DataTypeNode), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Nodes/Server.DataTypeNode)): Stellt einen eigenen Aufzählungstyp als Datentyp-Node bereit und verwendet ihn für einen Status-Node.
- Client.MethodNode (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Nodes/Client.MethodNode), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Nodes/Client.MethodNode)): Findet die Methoden des Servers, zeigt ihre Argumente und ruft eine ausgewählte Methode mit eingegebenen Werten auf.
- Server.MethodNode (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Nodes/Server.MethodNode), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Nodes/Server.MethodNode)): Stellt Methoden-Nodes auf verschiedene Arten bereit: über Delegaten, Methoden und Befehlsobjekte, mit Ein- und Ausgabeargumenten.

## Subscriptions

- Client.BulkChanges (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Subscriptions/Client.BulkChanges), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Subscriptions/Client.BulkChanges)): Abonniert sehr viele Nodes und verarbeitet ihre Datenänderungen in einem eigenen Thread.
- Server.BulkChanges (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Subscriptions/Server.BulkChanges), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Subscriptions/Server.BulkChanges)): Ändert die Werte sehr vieler Nodes gleichzeitig in einem festen Intervall.
- Client.BulkChanges.HiRes (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Subscriptions/Client.BulkChanges.HiRes), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Subscriptions/Client.BulkChanges.HiRes)): Empfängt Datenänderungen sehr vieler Nodes mit minimaler Verzögerung, mit PublishingInterval 0 und einem Callback je Datensatz.
- Server.BulkChanges.HiRes (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Subscriptions/Server.BulkChanges.HiRes), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Subscriptions/Server.BulkChanges.HiRes)): Ändert die Werte sehr vieler Nodes im Abstand weniger Millisekunden, mit hoch aufgelöstem Publishing.
- Client.HandshakeChanges (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Subscriptions/Client.HandshakeChanges), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Subscriptions/Client.HandshakeChanges)): Liest einen Datenblock, sobald der Server ihn als verfügbar meldet, und bestätigt die Verarbeitung über einen Handshake-Node.
- Server.HandshakeChanges (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Subscriptions/Server.HandshakeChanges), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Subscriptions/Server.HandshakeChanges)): Stellt Datenblöcke mit Handshake bereit: meldet neue Daten und wartet, bis ein Client deren Verarbeitung bestätigt.

## Anwendungsszenarien

- App.LicenseUsage (Anwendung; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/App.LicenseUsage), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/App.LicenseUsage)): Setzt die Lizenzschlüssel des SDK und schützt sie bei der Obfuskation der Anwendung durch Verschlüsselung der Zeichenketten, hier mit Eazfuscator.NET.
- Client.Blazor (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Client.Blazor)): Verbindet sich aus einer Blazor-Server-Anwendung mit einem Server und liest Werte von Nodes.
- Client.ClientAddedNodesWithHistory (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Client.ClientAddedNodesWithHistory), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Client.ClientAddedNodesWithHistory)): Legt am Server einen Variablen-Node mit Historie an und schreibt Werte, die der Server in die Historie übernimmt.
- Server.ClientAddedNodesWithHistory (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.ClientAddedNodesWithHistory), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.ClientAddedNodesWithHistory)): Erlaubt Clients, Variablen-Nodes mit Historie anzulegen, und zeichnet die geschriebenen Werte als Historie auf.
- Server.CustomFile (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.CustomFile), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.CustomFile)): Stellt über die Schnittstelle IOpcFileInfo eine Datei aus einer eigenen Quelle als Datei-Node bereit, hier von einem FTP-Server.
- Client.DynamicNamespaces (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Client.DynamicNamespaces), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Client.DynamicNamespaces)): Adressiert Nodes über die Namespace-URI statt den Index und erneuert die Subscriptions nach jedem Wiederverbinden, sodass wechselnde Namespaces des Servers keine Rolle spielen.
- Server.DynamicNamespaces (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.DynamicNamespaces), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.DynamicNamespaces)): Stellt jeden Namespace über einen eigenen Node-Manager bereit und startet den Server mit einer wechselnden Auswahl davon neu.
- Server.DynamicNodes (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.DynamicNodes), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.DynamicNodes)): Legt Nodes zur Laufzeit an, gesteuert über Pfade, die an der Konsole eingegeben werden.
- Client.GenericEvents (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Client.GenericEvents), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Client.GenericEvents)): Empfängt Ereignisse eines eigenen Ereignistyps ohne eigene Klasse für dessen Felder und gibt alle ausgewählten Felder über eine generische Ereignisklasse aus.
- Server.LightweightEvents (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.LightweightEvents), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.LightweightEvents)): Verwendet einen einzigen Ereignis-Node für Ereignisse verschiedener Quellen, statt je Quelle einen eigenen Ereignis-Node anzulegen.
- Client.Localization (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Client.Localization), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Client.Localization)): Fordert Anzeigenamen und Beschreibungen in bevorzugten Sprachen an und zeigt, wie der Server auf eine Ersatzsprache ausweicht.
- Server.Localization (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.Localization), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.Localization)): Stellt Anzeigenamen und Beschreibungen in mehreren Sprachen bereit, über die Globalisierungsressourcen des Servers.
- Server.NodeAccess (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.NodeAccess), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.NodeAccess)): Beschränkt den Zugriff auf Nodes je Benutzer über Zugriffskontrolllisten und liefert über abgeleitete Node-Klassen benutzerabhängige Metadaten.
- Client.NodeExplorer (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Client.NodeExplorer), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Client.NodeExplorer)): Durchsucht den Adressraum eines Servers und zeigt ihn als Baum in einer Windows-Forms-Anwendung.
- Server.NodeSet.PackML (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.NodeSet.PackML), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.NodeSet.PackML)): Importiert das NodeSet der PackML-Companion-Spezifikation und implementiert dessen Objekte und Methoden für mehrere Maschinen.
- Server.NodeSet.Umati.Legacy (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.NodeSet.Umati.Legacy), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.NodeSet.Umati.Legacy)): Importiert die NodeSets des früheren umati-Informationsmodells und meldet Alarme einer Werkzeugmaschine.
- Server.NodeSet.Umati.MachineTool (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.NodeSet.Umati.MachineTool), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.NodeSet.Umati.MachineTool)): Importiert die NodeSets der Companion-Spezifikationen für Werkzeugmaschinen (umati) und meldet Alarme, die ein Client bestätigen kann.
- Client.PackML (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Client.PackML), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Client.PackML)): Ruft eine Methode der PackML-Companion-Spezifikation mit strukturierten Argumenten auf, mit Datentypen, die aus dem PackML-NodeSet erzeugt sind.
- Server.Playground (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.Playground), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.Playground)): Stellt viele Arten von Nodes bereit, statisch, sich laufend ändernd und als Methoden, um Clients dagegen zu testen.
- Client.RecursiveSubscription (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Client.RecursiveSubscription), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Client.RecursiveSubscription)): Legt Job-Nodes unterhalb eines überwachten Nodes an und empfängt die Ereignisse, die der Server dafür meldet.
- Server.RecursiveSubscription (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.RecursiveSubscription), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.RecursiveSubscription)): Überwacht von Clients neu angelegte Nodes, verarbeitet sie und meldet Ereignisse dazu.
- Client.SignalR (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Client.SignalR)): Leitet Datenänderungen von Nodes über einen ASP.NET-Core-SignalR-Hub an den Browser weiter.
- Server.SignalR (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.SignalR), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.SignalR)): Stellt Nodes bereit, deren Werte sich laufend ändern; sie sind die Datenquelle für das Beispiel Client.SignalR.
- Server.SimaticNodes (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.SimaticNodes), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.SimaticNodes)): Bildet NodeIds im Stil von SIEMENS SIMATIC mit Punkten und Anführungszeichen über eine eigene Factory für NodeIds.
- Server.SimaticNodeSet (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.SimaticNodeSet), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.SimaticNodeSet)): Importiert das NodeSet einer SIMATIC S7-1500 und tritt wie deren Server auf, etwa um Clients ohne die Hardware zu testen.
- Client.StateMachine (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Client.StateMachine), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Client.StateMachine)): Überwacht den aktuellen Zustand eines Zustandsautomaten auf dem Server.
- Server.StateMachine (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.StateMachine), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.StateMachine)): Implementiert einen Zustandsautomaten mit eigenen Zuständen und wechselt dessen Zustand auf Tastendruck.
- Client.Temperature (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Client.Temperature), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Client.Temperature)): Verbindet sich mit einem Server und liest einmal je Sekunde den Wert eines Temperatur-Nodes.
- Server.Temperature (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.Temperature), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.Temperature)): Stellt einen Temperatur-Node bereit und ändert seinen Wert einmal je Sekunde.
- Client.Umati.Legacy (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Client.Umati.Legacy), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Client.Umati.Legacy)): Abonniert die Alarme einer Werkzeugmaschine nach dem früheren umati-Informationsmodell und liest ihre spezifischen Felder.
- Client.Umati.MachineTool (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Client.Umati.MachineTool), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Client.Umati.MachineTool)): Empfängt Meldungen einer Werkzeugmaschine nach der OPC-UA-Companion-Spezifikation für Werkzeugmaschinen (umati) und bestätigt sie.
- Server.UserIdentities (Server; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Scenarios/Server.UserIdentities), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Scenarios/Server.UserIdentities)): Implementiert eigene Benutzeridentitäten über Zugriffslisten und abgeleitete Klassen, hier mit Windows-Anmeldung.

## Plattformen

- Client.Uwp (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Platforms/Client.Uwp)): Verbindet sich in einer UWP-Anwendung mit einem Server und zeigt den Wert eines Temperatur-Nodes an. Das Anwendungszertifikat liegt als Datei in den Assets, weil das SDK es unter UWP nicht automatisch erstellen kann.
- Client.Wpf (Client; [C#](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/cs/Platforms/Client.Wpf), [VB.NET](https://github.com/Traeger-GmbH/opcuanet-samples/tree/master/vb/Platforms/Client.Wpf)): Abonniert in einer WPF-Anwendung einen Node und zeigt seinen Wert in der Oberfläche an.
