.NET Based OPC UA Client/Server SDK

The MachineDemoServer is an example implementation of a server using several Companion Information Models:

OPC 10000-100: Devices
OPC 10000-200: Industrial Automation - Basics
OPC 40001-1: Machinery Basic Building Blocks
OPC 40301: Flat Glass Processing

The UaNodeSet XML files were downloaded from the OPC Foundation and loaded in the UaModeler. A further namespace was added, which defines the custom types used for the example and the instance of the machine. The UaModeler was then employed to generate the Visual Studio solution. The solution contains classes for each UaNodeSet managing the namespace of the UaNodeSet, that is the NodeManager, the DataTypes, the ObjectTypes, etc., basically all you need to build a startable application exhibiting the modeled nodes. The model classes for the ObjectTypes are marked with the partial modifier. Hence, it is possible to add custom code to the models in a separated file. A model instance is than connected to the nodes of the node manager. In the example here, the instance is defined in the UaNodeSet XML file of the MachineDemoServer, but you can of course create it by code as well.

There are two ways this can be done with the .NET SDK. There is the LinkModelToNode method of the BaseNodeManager. A use case is presented in the Program Example. The LinkModelToNode mechanism offers basic Data Access support and to some extend method calls. A more recent approach is the BindModel mechanism via the BindModel method, which will be used in this example.

The server simulates a machine for glass fabrication that process a glass pane with thermal treatment. The machine is internally called GlassTemperingMachine. The machine has a heater which can measure the current temperature and accepts a set-point for the temperature to be used. The machine server implements the job management system from the Companion Specification. If there is a released job present, a glass pane will be loaded, tempered for the given time period as defined in the job related instruction file and finally the glass pane will be unloaded. If the current temperature is not within the range defined in the instruction file, an alarm will be raised.

Disclaimer: We do not have special knowledge in the production of glass panes, nor do we pretend that we have implemented the companion specification correctly. The primary goal is to demonstrate the possibilities of the BindModel mechanism.