This site uses Cookies. By using the site you accept our usage of Cookies. Dismiss More info

OPC-Server Data Sheet

Created by Werner Krings, Tani GmbH
Date: 2019.03.18

Technical Data Opc Server


The Tani OPC Server is a multi protocol and multi opc OPC server. It allows access to coltrollers and devives from various manufactuters. It is easily to configure. It offers a lot of diagnostics functions.

OPC Interfaces

The maximum number of OPC clients is depending on used resources only. A PC from 2014 can handle multiple hundred connections.
All OPC interfaces are working locally in one PC or over network.
in case of Classic OPC Classic please do not use DCOM over networks, but it will be supported.
OPC UA supports the fast binary protocol. Security is supported in all variants. Multicast discovery is supported.
Data access data items are supported up to 200K each.

OPC UA functionality and limitations

The OPC UA implementation conforms to the specification 1.04.
An internal discovery server is active on standard, it supports multicast discovery also. It can be used as a global discovery server. Alternatively an external discovery server can be configured.

The session timeout will be limited to one hour.
AddNodes is supported with the following restrictions:

Traffic between different OPC interfaces (tunneling) is supported. It will be used for the OPC DA tunnels.

Controller Interfaces

All controllers will be connected over network. Often this is Ethernet, WLAN or other networks. All serial Ethernet and MPI Ethernet gateways for industrial controllers usage are supported.

Configuration Interfaces

The configuration can be done with the shipped configuration software or over OPC with the System topic.
The connection  for the configuration is encrypted with TLS 1.2. The encryption can be switched off for usage in countries where encryption is forbidden.

Network Redundancy for connections to controllers and devices

Connections to devices and controllers are supporting network redundancy.
Double and triple redundancy can be selected.
Two redundancy operation modi are possible.
In dynamic redundancy any of the connections is working as master. If it breaks another connection becomes the master connection.
In static redundancy the first connection is the master. If it breaks another connection becomes the master. If the first connection works again it will become the master connection again.

The connections of the redundancy should work on different netaork adapters.The adapters need different IP subnets for proberly work..

Controller Types and Controller Protocols

Communicates via Ethernet.


Bacnet will be used over IP / UDP.
BBMD (BACnet Broadcast Management Device) is supported.
Maximum length of strings: 256 Byte
Status text elements are supported (state_text)
Supported charsets: UTF-8, UTF-16, Latin-1
Unions ("Choice") and struktures ("Sequence") are existing for important values. All not implemented instances will not be shown.
Enum values are represented as UINT32. Some special enum are handled as bool.
Values in "Octet-String" and "Bit-String" can be written in whole only.

BACnet - Writing values with priority-array

These object types have a priority-array in addition to their present-value property:
- analog-output
- analog-value
- binary-output
- binary-value
- multi-state-output
- multi-state-value
- access-door

The BACnet spec says:
- priority-array is read-only and contains 16 entries (that can be a valid value or NULL).
- present-value is read-write and contains 1 value (the non-NULL value with the lowest priority from priority-array, or the value from relinquish-default if no non-NULL value in priority-array exists).
- Writing to present-value uses an optional priority parameter to write to the correct entry in priority-array.

The TANI implementation works as follows:
- priority-array is read-write and contains 16 structure entries with 2 fields:
* Value: the data value in this entry (or 0 if no valid value is present)
* ValueValid: a boolean value; 1 if Value is valid, 0 if not (NULL value).
- Writing to an element of priority-array implicitly uses a "write present-value with priority" operation to change the desired value
- Writing to priority-array[i].Value always creates a non-NULL entry
- Writing 0 to priority-array[i].ValueValid creates a NULL entry
- Writing 1 to priority-array[i].ValueValid creates a non-NULL entry with value 0 (this is usually not very useful)
- Writing to priority-array[i] (as a structured data type) creates a NULL entry when ValueValid is 0. Else a non-NULL entry with the specified Value is created.
- present-value is read-write and contains the value obtained by BACnet protocol.
- Writing to present-value doesn't transfer the priority parameter. The BACnet device will implicitly write to priority entry 16 in this case.

This mechanism was chosen to allow choosing the write priority via OPC without changing the read syntax for present-value property. This also allows writing NULL values via OPC.


The OPC Server contains a logger for diagnostics purposes during plant startup. The logger can be configured. The system load can be big if all controller ; data are logged.


Maximum number of configurable connections: 4000.
Maximum length of a single item: 4GB.
Maximum number of elements each connection: 1 Million.
Maximum number of elements (Items): 16 Million.
Maximum OPC groups each connection: 100.
Maximum number of passive connection for each port is 999.
The OPC synchronous functions returning a bad quality immediately if the PLC connection is not established.
Changes in controller configuration will be checked all 10 seconds.
Fields can be up to 64K in length each.
Multi dimensional arrays can have up to six dimensions.

Simulation of plc connections

Connections and their data can be simulated.
Read data creates the elements with value zero. Write will change the content. The changed values will be returned as new data.

Depending on the license the limits can be less.


The throughput will be mainly limited by the controller speed or the reaction time of OPC applications.
Read requests to the controller will be optimized as much the controller is supporting this. For that elements will be collected to blocks reading more than requested, but not for inputs and outputs. These optimizing can be affected by configuration separately for each connection. Optimizing can be switched off, too.
Write requests to the controller are collected or handled in that order the application did called the system.
On OPC all optimizing the individual OPC uses is supported.
The normal time in cyclic controller requests is 50ms.It can be faster if the controller polling interval is set to zero.
Only data are sent to OPC which did change in the controller between two read requests.

Field and text optimizings

The from version 1.8 existing field optimizings will prevent reading the long fields too often, the index is requested on standard only.This optimizing bases of the fact that the index does net changed too frequently.

Usage of memory

Usage of computation time

The consumed computation time is depending on the load with communication. Most the time it will be waited for controller data or OPC application reaction.
All software is working with events. This maximizes the throughput and minimizes the usage of computation time.
Multiple CPU are supported. Up to ten CPU will be used, the main work will be handled by three CPU.


The installation does depending on the product install multiple parts separately. On uninstall not all products are deleted automatically. But all installed products can be deleted over the menu or the software part in the system control manager.
The user settings will be preserved and not deleted during uninstall.

Operating systems