Описание конфигурационных параметров
Параметр address_space_structure
Структура древовидного пространства:
|
Значение
|
Запись в конфигурационном файле
|
|
древовидная
|
"tree"
|
|
плоская
|
"flat"
|
При выставленном значение "tree" адресное пространство будет выглядеть таким образом:
Application (Папка)
└── Application.POU (Папка)
├── Application.POU.my_struct1 (Папка)
│ └── Application.POU.my_struct1.value1
└── Application.POU.my_struct2 (Папка)
└── Application.POU.my_struct2.value1
При большом количестве тегов данная структура более понятна и очевидна.
При выставленном значение "flat" адресное пространство будет выглядеть таким образом:
Application.POU.my_struct1.value1
Application.POU.my_struct1.value2
Параметр represent_one_dimentional_array_as_single_tag (для версии сборки 5.7.0 и выше)
Параметр позволяет поменять представление одномерного массива в адресном пространстве:
-
при установленном значении true: массив будет создан в виде единого тега в адресном пространстве
-
при установленном значении false: под каждый элемент массива будет создан отдельный тег в адресном пространстве
Уровни логирования. Уровень трассировки, используемый сервером OPC UA, указывается в инструменте конфигурации OPC UA во вкладке Уровни логирования.
log_level – уровень логирования для компонента.
Градация уровней логирования идет сверху вниз, чем выше значение в таблице, тем больше объем сообщений, поступающих в log-файле.
Градация уровней логирования
|
Уровень логирования
|
Запись в конфигурационном файле
|
|
trace
|
"trace"
|
|
debug
|
"debug"
|
|
info
|
"info"
|
|
warning
|
"warn" или "warning"
|
|
error
|
"err" или "error"
|
|
critical
|
"critical"
|
|
off
|
"off"
|
Например, если установлен уровень логированя debug, то в log-файл будут автоматически записываться следующие уровни логирования: info, warning, error, critical.
Оптимальным уровнем логирования является info, при данном уровне логирования осуществляется возможности следить за предупреждениями и ошибками компонента при минимальном количество сообщений.
Конфигурационные параметры (Секция "Server")
interval_ms
Этот параметр объединяет три настройки:
cyclic_rate_ms, min_sampling_interval_ms и min_publishing_interval_ms.
Пример:
Если interval_ms = 1000, то устанавливаются значения:
cyclic_rate_ms = min_sampling_interval_ms = min_publishing_interval_ms = 1000.
Параметр введён для упрощения конфигурации.
Для более детальной настройки можно задать значения каждого параметра отдельно.
min_publishing_interval_ms
Publishing_interval – период (в миллисекундах), определяющий частоту формирования и отправки клиенту пакетов с накопленными данными из data_queue. Задаётся на стороне клиента.
min_publishing_interval_ms – минимально допустимое значение интервала публикации, устанавливается на стороне сервера.
min_sampling_interval_ms
Sampling Interval (интервал выборки) – период (в миллисекундах), с которым сервер OPC UA опрашивает внутренний источник данных (буфер) для отслеживания изменений переменных перед отправкой уведомлений в очередь данных (data_queue). Задаётся на стороне клиента.
min_sampling_interval_ms – минимально допустимое значение интервала выборки, устанавливается на стороне сервера.
Внимание! Чем выше частота циклов (меньше значение sampling Interval), тем больше нагрузка на процессор. Не следует запускать сервер на частоте, превышающей необходимую.
|
cyclic_rate_ms
Циклическая частота работы сервера.
Определяет, как часто сервер опрашивает данные из рантайма и передаёт их в буфер, устанавливается на стороне сервера.
Все интервалы выборки (sampling_interval) должны быть кратны циклической частоте сервера.
max_data_queue
Максимальное количество уведомлений об изменениях значений, которые сервер OPC UA буферизует в памяти для каждого отдельного элемента мониторинга (Monitored Item).
max_monitored_items
Общее максимальное количество отслеживаемых элементов (Monitored Items), поддерживаемое сервером (сумма по всем подпискам).
Распределение между сеансами:
Например, если max_monitored_items = 10 000, и одна сессия использует 6 000 элементов, то для второй сессии доступно не более 4 000.
Пример:
Работа таймингов опроса OPC UA показана на схеме.
1. Источник данных (Runtime)
Значения изменяются с частотой, заданной в Main task программы.
2. Опрос сервером OPC UA
Сервер опрашивает значения с частотой Cyclic_rate и сохраняет их в буфер.
Важно! Данные в буфере не накапливаются - каждое новое значение перезаписывает предыдущее.
|
3. Формирование очереди данных
С интервалом sampling_interval значения из кеша помещаются в data_queue.
Важно! В data_queue данные накапливаются, что позволяет отправлять их клиенту одним пакетом.
|
4. Отправка данных клиенту
С интервалом publishing_interval все накопленные в data_queue значения отправляются клиенту одним пакетом.

Схема
Пример настройки
Предположим, заданы следующие параметры:
-
Main task: 200 мс
-
Cyclic_rate_ms: 400 мс
-
Min_sampling_interval_ms: 800 мс
-
Min_publishing_interval_ms: 1600 мс
В данном случае, за период min_publishing_interval_ms и с частотой main task значение поменяется восемь раз. Но только два значения будут переданы клиенту, остальные шесть будут потеряны.
Рассмотрим поподробнее:
-
Runtime → Буфер
За один цикл Cyclic_rate, main task выполняется два раза, при этом в буфер записывается последнее значение. В буфере значения не накапливаются, поэтому при появлении нового значения старое перезаписывается.
2. Буфера → data_queue
За период min_sampling_interval_ms цикл сyclic_rate выполняется два раза, а main task - четыре раза. За четыре цикла main task в буфер попадают два значения, но так как они не накапливаются, а перезаписываются, то к моменту опроса min_sampling_interval_ms в буфере остается только одно последнее значение, которое будет отправлено в data_queue с меткой времени. Предыдущие три значения будут потеряны.
3. Data_queue → Клиент
За период min_publishing_interval_ms цикл min_sampling_interval_ms выполняется два раза, а main_task - восемь раз. В итоге в data_queue попадает два значения с метками времени, которые будут переданы клиенту.
Если требуется передача клиенту всех значений без потерь, следует придерживаться следующих правил настройки:
1. Cyclic_rate и Sampling_interval должны быть равны или меньше, чем период Main task в Runtime.
Это гарантирует, что каждое изменение значений будет захвачено и передано дальше без потерь.
2. Publishing_interval может быть больше, чем Sampling_interval.
Это позволяет накапливать данные в data_queue и отправлять их клиенту одним пакетом с сохранением всех временных меток, соответствующих интервалу sampling_interval.
|
max_sessions
Максимальное количество одновременных клиентских подключений, которые может обслуживать сервер.
Значение должно соответствовать реальной нагрузке.
port
TCP-порт, используемый сервером для входящих подключений.
По умолчанию: 4840.
max_revised_session_timeout_ms/min_revised_session_timeout_ms
Эти параметры задают допустимый диапазон таймаутов сеанса, устанавливаемых клиентом. Значения вне диапазона будут отклонены.
Они определяют время, в течение которого сервер сохраняет данные при разрыве соединения, ожидая восстановления сеанса.
Это позволяет клиенту после переподключения продолжить сеанс без потери данных, сгенерированных во время сбоя.
Сеансы – ограниченный ресурс. Обычно клиенты корректно завершают сеансы, но при разрыве сервер сохраняет их в течение заданного времени. Рекомендуется использовать разумные значения (по умолчанию - оптимальные).
Конфигурационные параметры (Секция "Security")
|
Название параметра
|
Тип
|
Значение по умолчанию
|
Описание
|
|
policy
|
string
|
"None"
|
Политика шифрования всех сообщений при обмене данными
|
|
pki_storage_path
|
string
|
/var/opt/codesys
|
Путь, по которому будет создана папка pki, где сервером будут создаваться и запрашиваться сертификаты
|
|
certificate_
validity_days
|
uint64
|
3650
|
Параметр, задающий срок действия сертификата, генерируемого сервером (в днях)
|
|
username
|
string
|
" "
|
Логин для подключения на сервер
|
|
password
|
string
|
" "
|
Пароль для подключения на сервер
|
|
create_also_
nonsecurity_
endpoint
|
boolean
|
False
|
Позволяет указать на то, нужно ли в параметре policy со значением "None" дополнительно открывать незашифрованное соединение с таким же способом аутентификации
|
|
Возможные значения поля "policy"
|
Алгоритм используемый для генерации сертификата
|
|
"None"
|
None
|
|
"Basic128 Rsa15"
|
RSA-SHA1
|
|
"Basic256"
|
RSA-SHA1
|
|
"Basic256 Sha256"
|
SHA256
|
|
"Aes128Sha256 Rsa Oaep"
|
SHA256
|
Параметр certificate_validity_days
Значение параметра:
По умолчанию: 3650 дней (10 лет)
Минимально допустимое: 1 день
Максимально допустимое: 36500 дней (100 лет)
В случае выхода значения за допустимый интервал оно будет приведено к ближайшей границе. При этом будет выведено предупреждение о корректировке, а исправленное значение будет записано в конфигурационный файл.
Параметр create_also_nonsecurity_endpoint
Значение параметра:
При настройках policy = "Basic256 Sha256", username = "admin", password = "1" и выставленном параметре create_also_nonsecurity_endpoint = true будут созданы два способа подключения к серверу:
-
через зашифрованное соединение с аутентификацией по логину и паролю;
-
без шифрования, но также с аутентификацией по логину и паролю.
Если policy = "None" и при этом create_also_nonsecurity_endpoint = true, то второй (дублированный) доступ создан не будет.
Важно! Если указать параметр username и password, то способ доступа на сервер будет через введение этих параметров. Если хотя бы один из этих параметров не будет указан, то доступ к серверу будет через анонимное подключение.
|
Конфигурационные параметры (Секция "Pool"), применимо только для модуля K3.CPU.11.00.00
|
Название параметра
|
Тип
|
Значение по умолчанию
|
Описание
|
|
threads_
count
|
uint32_t
|
2
|
Число (должно быть больше нуля), которое указывает на количество потоков, которое для своих задач будет использовать OPC UA сервер
|
|
threads_
name
|
string
|
"OPCUAPool"
|
Название для потоков threds_count. Необходимо для debug проверок и оценки производительности
|
|
threads_
cpu
|
array
|
[0]
|
Массив чисел от 0 до количества ядер - 1 (n - 1), указывающий на ядра процессора, в которых будут работать все потоки компонента cmpMatrikonOPCUAServer, в том числе и потоки указанные в threads_count
|
Пример:
Количество ядер процессора = 4, тогда в данном параметре необходимо указать числа от нуля до трех. В массиве находится [1, 3]. Значит, все потоки будут работать только на ядре с индексом 1 и индексом 3.
Важно! Во время считывания конфигурационного файла происходит валидация параметров.
|
Если threads_count равен нулю, то вместо нуля будет использоваться значение по умолчанию.
Если размер массива threads_cpu равен нулю или больше, чем количество ядер процессора, то данный параметр примет значение по умолчанию.
Если хоть один элемент массива threads_cpu указывает на несуществующее ядро, то данный параметр примет значение по умолчанию.
Если размер строки переданный в threads_name превышает 15 символов, то значение будет проигнорировано и автоматически перепишется на значение по умолчанию.
Логин с онлайн-изменением
При выборе способа загрузки через GUI IDE проекта, существует возможность выбрать «Логин с онлайн-изменением». В данном случае поведение компонента будет следующим:
Сервер не будет остановлен, адресное пространство будет обновляться в процессе работы.
Процесс обновления
Теги, которые были удалены из символьной конфигурации, будут удалены из адресного пространства.
Теги, которые были добавлены в символьную конфигурацию, будут добавлены также и в адресное пространство.
Теги, которые остались в символьной конфигурации, обновят свои настройки в адресном пространстве.
Обновление настроек в адресном пространстве представляет собой обновление всех основных данных: адрес чтения и записи, права доступа к тэгу, описание тега и другие параметры.
Если обновление не произошло, в данном лог файле будет информация следующего вида:
[15.01.2025 10:11:32.271][abak_opc][error] 'BadUnexpectedError' on update variable node 'Application.POU.x' in address space'
Особенности
В приложении IDE при создании переменных (тэгов) существует возможность добавлять для них комментарии. Для того, чтобы эти комментарии передавались и отображались через клиент, необходимо выставить следующие флаги:

Комментарии и атрибуты
Это необходимо для того, чтобы символьная таблица сохранила информацию о комментарии при загрузке приложения и компонент позже мог их достать.

Пример отображения
Поддерживаемые типа
Типы символьной таблицы (IDE)
|
Номер
|
Название типа
|
Ограничение по типу
|
|
1
|
SINT
|
-
|
|
2
|
INT
|
-
|
|
3
|
DINT
|
-
|
|
4
|
LINT
|
-
|
|
5
|
WORD
|
-
|
|
6
|
DWORD
|
-
|
|
7
|
LWORD
|
-
|
|
8
|
USINT
|
-
|
|
9
|
UINT
|
-
|
|
10
|
UDINT
|
-
|
|
11
|
ULINT
|
-
|
|
12
|
REAL
|
-
|
|
13
|
LREAL
|
-
|
|
14
|
ENUM
|
-
|
|
15
|
BIT
|
-
|
|
16
|
BYTE
|
-
|
|
17
|
BOOL
|
-
|
|
18
|
STRING
|
Макс. размер строки 10240 символов
|
|
19
|
WSTRING
|
Макс. размер строки 5120 символов
|
|
20
|
TIME
|
-
|
|
21
|
LTIME
|
-
|
|
22
|
TIMEOFDAY
|
-
|
|
23
|
DATE
|
-
|
|
24
|
DATEANDTIME
|
-
|
|
25
|
USERDEF
|
Выравнивание только 4 и 8 байт
|
|
26
|
ARRAY OF (1-26 типы)
|
Максимальный порядок массива = 3. IDE выдаст ошибку
|
|
27
|
REFERENCE TO (1-24 типы)
|
-
|
|
28
|
REFERENCE TO USERDEF
|
Выравнивание только 4 и 8 байт
|
Типы системных тегов (база данных ABAK PLC)
|
Номер
|
Название типа
|
Ограничение по типу
|
|
1
|
Boolean
|
-
|
|
2
|
Int32
|
-
|
|
3
|
UInt32
|
-
|
|
4
|
Double
|
-
|
|
5
|
String
|
-
|
|
6
|
Int64
|
-
|
|
7
|
UInt64
|
-
|