OPC Interfaces
- OPC Pipe Открытый интерфейс
- OPC UA (Единая архитектура)
- OPC DA (Классический OPC поверх DCOM, доступен только под Windows)
Максимальное количество OPC клиентов зависит только от используемых ресурсов. С 2014
года один ПК может обрабатывать несколько сотен соединений.
Все интерфейсы OPC работают локально на одном ПК или по сети.
в случае Classic OPC Classic, пожалуйста, не используйте DCOM по сети, но он
будет поддерживаться.
OPC UA поддерживает быстрый двоичный протокол. Безопасность поддерживается во всех вариантах. Поддерживается многоадресное обнаружение.
Элементы данных для доступа к данным поддерживаются до 200 000 штук каждый.
OPC UA functionality and limitations
The OPC UA implementation conforms to the specification 1.04.
The OPC UA Standard Model is supported, some extensions exist.
The OPC UA Alarms & Conditions module is supported.
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.
The server and client certificate will be renewed if the Tani self signed certificate is used. All other certificates remain unaffected on expiring.
The certificate validity is checked all 12h.
It will be renewed seven days before it expires.
Running connections will not be affected, new connections will use the new certificate.
AddNodes is supported with the following restrictions:
- AddNodes is possible only in Objects.Topics.Memory tree
- Reference type must be OpcUaId_Organizes
- NodeId can't be specified
- BrowseName can't contain a dot
- NodeClass must be Variable or Object
- NodeAttributes for Variable:
- DisplayName: unspecified or equal to BrowseName
- Description: unspecified or any text
- Value: is ignored; new variables will always be initialized to 0 (if numeric) or "" (if string type)
- DataType:
- OpcUaType_Boolean
- OpcUaType_SByte, OpcUaType_Byte
- OpcUaType_Int16/32/64, OpcUaType_UInt16/32/64
- OpcUaType_Float, OpcUaType_Double
- OpcUaType_String
- OpcUaType_LocalizedString. This will be handled outside OPC UA as a normal string. The LocaldId always is a null string
- OpcUaType_DateTime
- OpcUaType_ExtendedObject, OpcUaType_ExtendedObjectEx. Mostly this are structures. One of the structure types under Types -> DataTypes -> BaseDataType -> Structure -> UserStructures; these are the structures known to the PLC Engine core.
- if the structure is given both here and via TypeDefinition, both settings must match
- if unspecified, OpcUaType_Byte or the structure type of the TypeDefinition is used
- ValueRank, ArrayDimensions: unspecified (= scalar), scalar or a one-dimensional array of any size
- AccessLevel, UserAccessLevel: unspecified or (OpcUa_AccessLevels_CurrentRead | OpcUa_AccessLevels_CurrentWrite)
- MinimumSamplingInterval: unspecified or 0
- Historizing: unspecified or 0
- WriteMask, UserWriteMask: unspecified or OpcUa_NodeAttributesMask_Value
- NodeAttributes for Object:
- DisplayName: unspecified or equal to BrowseName
- Description: unspecified or any text
- EventNotifier, WriteMask, UserWriteMask: unspecified or 0
- TypeDefinition for Variable:
- OpcUaId_BaseDataVariableType
- one of the structure types under Types -> VariableTypes -> BaseVariableType -> BaseDataVariableType -> UserStructures; these are the structures known to the PLC Engine core.
- TypeDefinition for Object:
- OpcUaId_FolderType
- Each RPC as a calling queue of 10. If the requests are coming faster before handled they will return a memory error.
The security certificate key minimum length are
- Basic128Rsa15: RSA Key Length 1024 .. 4096
- Basic256: RSA Key Length 1024 .. 4096
- Basic256Sha256: RSA Key Length 2048 .. 4096
Поддерживается трафик между различными интерфейсами OPC (туннелирование). Он будет использоваться для туннелей OPC DA.
MQTT Interfaces
- MQTT Client if a station need to be a device
- MQTT Broker, the server
MQTT comes from the Internet of Things world. It is simple and fast.
A device can simultanously send data to multiple devices.
You can use the client and broker on the same device at the same time.
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 network adapters.The adapters need different IP subnets for properly work.
Типы контроллеров и протоколы контроллеров
- Siemens семейства S7 1200 и 1500. Поддерживаются оптимизированные блоки данных, все символы и комментарии просматриваются в режиме онлайн.
- Siemens S7 через RFC1006 и Sinec H1. Поддерживаются S7 200, 300 и 400, Logo 8. Siemens CP или Ethernet-интерфейс на плате процессора может быть использован. Mainstream MPI Gateways как Hilscher Netlink, Helmholz Netlink, IBH Softec Netlink, INAT Echolink, Process Informatik S7Lan или Softing Netlink тоже поддерживаються. S7 также совместимо с системами как VIPA Speed7.
- Siemens S5 через RFC1006, PLC Header, RAW или Sinec H1. Поддерживаются Siemens CPs, INAT CPs, Helmholz CPs, IBH Softec S5Net, Process Informatik S5Lan.
- Rockwell Compact Logix и Control Logix, все версии прошивок. Rockwell Micro 8 серии 800, 810.
- Mitsubishi Melsec Q семья.
- Устройства BACnet. BACnet широко используется в автоматизации зданий
- Устройства, использующие Modbus TCP протокол.
- Modicon
- Schneider
- Wago
- Beckhoff
- Phoenix Contact
- Omron
- B&R
- Fanuc
- ABB
- Все системы и устройства, к которым можно получить доступ с помощью следующих инструментов OPC UA или Classic OPC.
- RaW данные.
BACnet
BACnet will be used over IP / UDP.
Maximum length of strings: 256 Byte
Status text elements are supported (state_text)
Supported charsets: UTF-8, UTF-16, Latin-1
Unions ("Choice") and structures ("Sequence") are existing for important values as trend, shedule, calendar, prioriry.
The trend data are offered as history data.
All unimplemented 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.
BBMD (BACnet Broadcast Management Device) details
BBMD will be used during the connection establishing and the device search
if the devices do not be all in the same collision domain.
BACnet uses broadcast during ist connection establishing.
There are several procedures in BBMD:
- Search ussing broadcast.
- Search using the IP device address, receive the BACnet ID.
- Search using the BACnet id, receice the IP address.
COV (Change Of Values) details
COV represents the event subsystem of BACnet.
Events will be offered in browsing the variables, they will be subscribed.
If the device will send the data the event will be generated.
Because BACnet is working with UDP the COV receive can not be guaranteed.
Tani is offering an option: If no event will be received during the reconnection time from the configured connection it will be polled.
If the value did not change no event is send for this polling.
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
- 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.
- 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.
Implemented Properties
The following object properties are implemented:
Object Type | Property | BACnet Type | OPC Type | Remarks |
---|---|---|---|---|
all | all | BACnetObjectIdentifier | UInt32 | |
all | all | Bit String | Array of Boolean | |
all | all | Boolean | Boolean | |
all | all | Character String | String | |
all | all | Double | Double | |
all | all | Enumerated | UInt32 | |
all | all | Octet String | Array of UInt8 | |
all | all | Real | Float | |
all | all | Signed | Int32 | |
all | all | Unsigned | UInt32 | |
all | Change of State Time (16) | BACnetDateTime | DateTime | |
all | Event Time Stamps (130) | Sequence of BACnetTimeStamp | Array of Structure "Timestamp" | |
all | Object Type (79) | BACnetObjectType | UInt32 | |
all | Time of Active Time Reset (114) | BACnetDateTime | DateTime | |
all | Time of State Count Reset (115) | BACnetDateTime | DateTime | |
Access Door (30) | Door Alarm State (226) | BACnetDoorAlarmState | UInt32 | |
Access Door (30) | Present Value (85) | BACnetDoorValue | UInt32 | |
Access Door (30) | Priority Array (87) | BACnetPriorityArray | Array(1..16) of Structure "UnsignedPriorityValue" | see section "Priority Array" |
Access Door (30) | Status Flags (111) | BACnetStatusFlags | Array(0..3) of Boolean | |
Analog Input (0) | Present Value (85) | Real | Float | |
Analog Input (0) | Status Flags (111) | BACnetStatusFlags | Array(0..3) of Boolean | |
Analog Output (1) | Present Value (85) | Real | Float | |
Analog Output (1) | Priority Array (87) | BACnetPriorityArray | Array(1..16) of Structure "AnalogPriorityValue" | see section "Priority Array" |
Analog Output (1) | Status Flags (111) | BACnetStatusFlags | Array(0..3) of Boolean | |
Analog Value (2) | Present Value (85) | Real | Float | |
Analog Value (2) | Priority Array (87) | BACnetPriorityArray | Array(1..16) of Structure "AnalogPriorityValue" | see section "Priority Array" |
Analog Value (2) | Status Flags (111) | BACnetStatusFlags | Array(0..3) of Boolean | |
Averaging (18) | Maximum Value Timestamp (149) | BACnetDateTime | DateTime | |
Averaging (18) | Minimum Value Timestamp (150) | BACnetDateTime | DateTime | |
Binary Input (3) | Present Value (85) | BACnetBinaryPV | UInt32 | |
Binary Input (3) | Status Flags (111) | BACnetStatusFlags | Array(0..3) of Boolean | |
Binary Output (4) | Present Value (85) | BACnetBinaryPV | UInt32 | |
Binary Output (4) | Priority Array (87) | BACnetPriorityArray | Array(1..16) of Structure "UnsignedPriorityValue" | see section "Priority Array" |
Binary Output (4) | Status Flags (111) | BACnetStatusFlags | Array(0..3) of Boolean | |
Binary Value (5) | Present Value (85) | BACnetBinaryPV | UInt32 | |
Binary Value (5) | Priority Array (87) | BACnetPriorityArray | Array(1..16) of Structure "UnsignedPriorityValue" | see section "Priority Array" |
Binary Value (5) | Status Flags (111) | BACnetStatusFlags | Array(0..3) of Boolean | |
Calendar (6) | Datelist (23) | List of BACnetCalendarEntry | Array() of Structure "BACnet.CalendarEntry" | |
Device (8) | Last Restore Time (87) | BACnetTimeStamp | Structure "Timestamp" | |
Device (8) | Local Date (56) | Date | Structure "Date" | |
Device (8) | Local Time (57) | Time | Structure "Time" | |
Device (8) | Object List (76) | Sequence of BACnetObjectIdentifier | Array of UInt32 | |
Device (8) | Protocol Object Types Supported (96) | BACnetObjectTypesSupported | Array of Boolean | |
Device (8) | Protocol Services Supported (97) | BACnetServicesSupported | Array of Boolean | |
Device (8) | Segmentation Supported (107) | BACnetSegmentation | UInt32 | |
Device (8) | System Status (112) | BACnetDeviceStatus | UInt32 | |
Device (8) | Time of Device Restart (203) | BACnetTimeStamp | Structure "Timestamp" | |
Event Enrollment (9) | Object Property Reference (78) | BACnetDeviceObjectPropertyReference | Structure "DeviceObjectPropertyReference" | |
File (10) | Modification Date (149) | BACnetDateTime | DateTime | |
Life Safety Point (21) | Present Value (85) | BACnetLifeSafetyState | UInt32 | |
Life Safety Point (21) | Status Flags (111) | BACnetStatusFlags | Array(0..3) of Boolean | |
Life Safety Zone (22) | Present Value (85) | BACnetLifeSafetyState | UInt32 | |
Life Safety Zone (22) | Status Flags (111) | BACnetStatusFlags | Array(0..3) of Boolean | |
Load Control (28) | Actual Shed Level (212) | BACnetShedLevel | Structure "ShedLevel" | |
Load Control (28) | Duty Window (213) | Unsigned | UInt32 | |
Load Control (28) | Expected Shed Level (214) | BACnetShedLevel | Structure "ShedLevel" | |
Load Control (28) | Present Value (85) | BACnetShedState | UInt32 | |
Load Control (28) | Requested Shed Level (218) | BACnetShedLevel | Structure "ShedLevel" | |
Load Control (28) | Shed Duration (219) | Unsigned | UInt32 | |
Load Control (28) | Start Time (142) | BACnetDateTime | DateTime | |
Loop (12) | Controlled Variable Reference (19) | BACnetDeviceObjectPropertyReference | Structure "DeviceObjectPropertyReference" | |
Loop (12) | Manipulated Variable Reference (60) | BACnetDeviceObjectPropertyReference | Structure "DeviceObjectPropertyReference" | |
Loop (12) | Setpoint Reference (109) | BACnetSetpointReference | Structure "SetpointReference" | |
Loop (12) | Present Value (85) | Real | Float | |
Loop (12) | Status Flags (111) | BACnetStatusFlags | Array(0..3) of Boolean | |
Multi State Input (13) | Alarm Values (7) | Sequence of Unsigned | Array of UInt32 | |
Multi State Input (13) | Fault Values (39) | Sequence of Unsigned | Array of UInt32 | |
Multi State Input (13) | Present Value (85) | Unsigned | UInt32 | |
Multi State Input (13) | Status Flags (111) | BACnetStatusFlags | Array(0..3) of Boolean | |
Multi State Output (14) | Present Value (85) | Unsigned | UInt32 | |
Multi State Output (14) | Priority Array (87) | BACnetPriorityArray | Array(1..16) of Structure "UnsignedPriorityValue" | see section "Priority Array" |
Multi State Output (14) | Status Flags (111) | BACnetStatusFlags | Array(0..3) of Boolean | |
Multi State Value (19) | Alarm Values (7) | Sequence of Unsigned | Array of UInt32 | |
Multi State Value (19) | Fault Values (39) | Sequence of Unsigned | Array of UInt32 | |
Multi State Value (19) | Present Value (85) | Unsigned | UInt32 | |
Multi State Value (19) | Priority Array (87) | BACnetPriorityArray | Array(1..16) of Structure "UnsignedPriorityValue" | see section "Priority Array" |
Multi State Value (19) | Status Flags (111) | BACnetStatusFlags | Array(0..3) of Boolean | |
Notification Class (15) | Recipient List (102) | List of BACnetDestination | Array() of Structure "BACnet.Destination" | |
Schedule (17) | Effective Period (32) | BACnetDateRange | Structure "DateRange" | |
Schedule (17) | Exception Schedule (38) | Sequence of BACnetSpecialEvent | Array of Structure "SpecialEvent" | |
Schedule (17) | List of Object Property References (54) | Sequence of BACnetDeviceObjectPropertyReference | Array of Structure "DeviceObjectPropertyReference" | |
Schedule (17) | Present Value (85) | ABSTRACT-SYNTAX.&Type | Structure "Any" | |
Schedule (17) | Schedule Default (174) | ABSTRACT-SYNTAX.&Type | Structure "Any" | |
Schedule (17) | Weekly Schedule (123) | Sequence Size(7) Of BACnetDailySchedule | 7 sub-objects ("Monday", "Tuesday", ...) of Structure "TimeValue" | |
Pulse Converter (24) | Present Value (85) | Real | Float | |
Pulse Converter (24) | Status Flags (111) | BACnetStatusFlags | Array(0..3) of Boolean | |
Structured View (29) | Subordinate List (211) | Sequence of BACnetDeviceObjectReference | Array of Structure "DeviceObjectReference" | |
Trend Log (20) | Client COV Increment (127) | BACnetClientCov | Structure "ClientCov" | |
Trend Log (20) | Log Buffer (131) | BACnetLogRecord | Structure "LogRecord" | Accessed via "HistoryRead" function, "Read" shows only one record. |
Trend Log (20) | Log Device Object Property (132) | BACnetDeviceObjectPropertyReference | Structure "DeviceObjectPropertyReference" | |
Trend Log (20) | Start Time (142) | BACnetDateTime | DateTime | |
Trend Log (20) | Stop Time (143) | BACnetDateTime | DateTime |
Databases
PLC Engine is a database client. It connects with user and password to the database.
The standard SQL statements INSERT INTO, UPDATE, SELECT, DELETE, FUNCTION and PROCEDURE will be used over the wizards. Other statements will be configured directly.
Supported are:
- My SQL (from version 1.9 not under Windows XP)
- PostGre Sql (not for Windows XP)
- Microsoft SQL
- Sybase SQL Server, Sybase ASE, SAP ASE (Adaptive Server Enterprise)
- ODBC
- Oracle can be used with ODBC
In one database multiple sub databases can be used.
During the configuration the databases will be browsed. This will require depending on the type of the database or the interface a username and a password, possibly more.
The database itself need to be configured that it can be accessed.
PLC-Engine will need an account on each database.
For using PLC Engine on a PC the locally installed databases can be used also.
On PLC Engine Device a My SQL database is installed. This database will be managed completely by PLC Engine.
Logger for diagnostics
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 in big plants are logged.
Limits
Maximum number of configurable client 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 if the PLC does not offer a mechanism for this check during write.
Fields can be up to 64K in length each.
Multi dimensional arrays can have up to six dimensions.
Fields can be up to 64K in length each.The maximum amount of configurable
logic tables is 60000.
The maximum length of one logic table is 4GB.
Maximum number of entries on a logic element 60000.
File operations can handle up to 64K in each request. Adding data to a file is limited only by the space on the disk.
Multi dimensional arrays can have up to seven dimensions.
Speed
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.
No handling can be faster than the controller and device data acquisition. The same is true for database access.
Функции
Логические таблицы
Логические таблицы построены для линейной логики. Петли(Loop) сделать невозможно.
Sequence chains (Цепи последовательности)
Цепь последовательностей поддерживает не более 65535 шагов каждая.
Обработка ошибок в логических таблицах
Все логические элементы, функции которых могут давать сбой, поддерживают бит OK. Пользователь должен разобраться с этим, чтобы предотвратить неожиданное поведение во время выполнения.
Переменные и структуры
Конструкции не могут содержать циклов/петли (Loop).
Размер структуры или переменной может составлять до 4 Гб.
Status Diagnostics Lists
The status diagnostics lists are supporting arrays up to 100 values each. If an array is longer than 100 values the first 100 elements are shown only. Writing this array is not possible.
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
- Program code: A minimum of 6MB is used. The exactly memory usage is depending of the internal behavior of the operating systems. So dynamic libraries are loaded once for all running instances using them. Example: If the standard library is not loaded already it will use additional 4MB of memory.
- User data: The minimum data usage is 2MB internally. Additional the controller data are held in memory for comparing new data. Each item uses the length of data and additional 64 bytes. Each configured connection occupies 4KB.
- Fields can be up to 64K in length each.The maximum amount of configurable logic tables is 60000.
- The maximum length of one logic table is 4GB.
- Maximum number of entries on a logic element 60000.
- Depending on the license the limits can be less.
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.
Installation
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.
Операционные системы
- Windows 7, 8, 8.1, 10 (все версии). Старые версии, как XP и Vista также. 64 и 32 бит.
- Windows сервер 2008, 2012, 2016 и 2018.
- Linux на компьютерах Raspberry и Odroid (64 и 32 бит).
- Linux на многих устройствах Phytec.
- Linux на Wiesemann & Theis pure.box 3, pure.box 5.
- Linux на компьютерах с Debian, Ubuntu, Suse, Arch, Centos, Redhat и другие дистрибутивы.
- Linux 64 бит как Docker или Kubernetes Container(контейнер).
- OPC DA потребует Microsoft Windows. Поддерживаются все поддерживаемые Microsoft операционные системы для Intel и все языки пользователей. Должен присутствовать новейший пакет обновления.
- Под Windows OPC сервер работает как сервис, Linux запускает их как daemon.
- Raspberry поддерживает все дистрибутивы Linux, предлагаемые для этой платформы.
- Все остальные также будут работать под большим количеством операционных систем, в основном на базе Linux.
- Под Linux сервер OPC нуждается в системе, совместимой с POSIX. Стандартной библиотеке требуется как минимум V2.2. Программа конфигурирования основана на KDE 5 и нуждается в kdelibs. Пожалуйста, используйте реальные дистрибутивы, такие как Debian, Ubuntu, Suse, Redhat или подобные им.
- Проверено: Windows Intel 32 и 64 бит, Linux Intel 32 и 64 бит, Linux MIPS CPU, Linux ARM 32 и 64 бит CPU.
- Поддерживается работа в виртуальных машинах. Поддерживаются также док-контейнеры.
- Windows 7 нуждается как минимум в пакет обновления 1 (service pack 1) для использования драйверов.
- Все конфигурации совместимы со всеми OPC-серверами, в том числе и с операционными системами.