Вопросы и Ответы


Не открываются мнемосхемы (зависает контрол аварийных событий)

Проблема:

Сервер генерирует события с пустым полем “message”.
Это приводит к зависанию при загрузке экранов. Приходиться выгружать программу, останавливать сервер и зачищать кэш тревог на диске.

Если событие на ON активно, то событие на OFF – не активно. 
Подскажите, кто и зачем генерирует события с важностью = 1?
Обязательно ли прописывать сообщения для неактивного условия?

image.png

Ответ технической поддержки:

Для того, чтобы пустые сообщения с важностью 1 не появлялись, установите в модуле Ae Server параметр "Использовать расширение OPC AE" в значение "Да", включить "Сохранять события в оперативной таблице событий", и указать путь для "Папка для хранения оперативных событий". После чего перезапустить сервер.

Создание вызова функции из внешней библиотеки

Вопрос:

В документации декларируется возможность вызова функции из внешней библиотеки.
Подскажите, где найти подробности по правилам написания таких библиотек?

Ответ технической поддержки:

Сценарий добавления сторонних компонентов на Qt выглядит следующим образом:

По поводу п.1.

Во-первых, подключаемый модуль должен быть определен по механизмам плагинной системы Qt (добавить Q_PLUGIN_METADATA(IID "some_qt_plugin_data") в тип MyPlugin - объект плагина для QPluginLoader).
Помимо этого, нужно тип MyPlugin разметить атрибутом Q_CLASSINFO("<PLATFORMTAG>_UUID", "<UNIT_UUID>") - только тогда Alpha.HMI будет воспринимать Qt плагин как HMI юнит и сможет создать на него ссылку.

Во-вторых, нужно каждый экспортируемый в Alpha.HMI тип T разметить атрибутом Q_CLASSINFO("<PLATFORMTAG>_UUID", "<TYPE_UUID>") и зарегистрировать в конструкторе MyPlugin через вызов qRegisterMetaType<T*>().

В-третьих, собирать плагин нужно с динамически линкуемыми модулями Qt SDK; обязательно 5.x.x мажора, предпочтительно 5.15.2 версии, которая сейчас используется в Alpha.HMI.

Нужно сразу обозначить, что из определения кастомного T типа попадет в импорт Alpha.HMI, а что не попадет:

NB: floating - float, double; integer - (u)int{8|16|32|64}_t.

Прикрепляю образец кода плагина Qt, который пригоден для импорта в Alpha.HMI через ссылки на юниты, а также сам проект с импортированной библиотекой.

По QT при сборке прошу учесть следующее:
Компилятор необходимо использовать gcc-5, к окружению особых требований нет.
Главное, от чего нужно отталкиваться во время сборки плагина - чтобы была бинарная совместимость с бинарями Qt 5  (лучше конечно с точностью до версии - 5.15.2), собранными вендором фреймворка для amd64 на базе gcc-5 (ровно такие Alpha.HMI и использует).
Уточняю, gcc-5 на MSVC-2019. Линковаться с CRT (Microsoft C Runtime) нужно динамически. Собирать нужно профиль Release, а не Debug, иначе в Alpha.HMI плагин не запустится.

Для создания .netcore библиотеки на линукс необходимо на машине с линукс установить dotnet-sdk, например, командой:
sudo apt-get update &&   sudo apt-get install -y dotnet-sdk-6.0 (или другую версию)
перейти в директорию, где планируется создать .netcore библиотеку, например:
cd testnetcore
создать проект по шаблону
dotnet new classlib
и выполнить компиляцию
dotnet run
После успешной компиляции, в папке testnetcore будет dll файл, который можно использовать в HMI.
Прикладываю пример проекта для линукс. Также, сообщаю, что для того, чтобы HMI смог работать с библиотекой, на машине должен быть установлен dotnet-runtime. Установить можно командой:
 sudo apt install dotnet-runtime-6.0. Прошу дать обратную связь по результату применения решения.
Библиотека должна компилироваться на той ОС, на которой будет использоваться. Если библиотека компилировался под Windows, под Linux она работать не будет.

Также прикрепляю пример библиотеки и проект в DevStudio СppLib. В текстовом файле описаны свойства сигнала, используемые при настройке через конфигуратор.


Установка Альфа платформы на клиент серверную архитектуру (Linux)

Вопрос:

Система состоит из четырех узлов:
1. Инженерная станция. Она же центральный узел домена
2. Два резервируемых сервера без HMI
3. Рабочая станция.

Развертывание с инженерной станции проходит.
А вот OPC Explorer не может подключиться к рабочей станции. Подключение производится к UA(tcp) по порту 62544. При проверке оказалось, что этот порт закрыт на рабочей станции.

Запрос статуса Access Point

Запрос статуса AccessPoint Выдает такую информацию:
grfi@Operator:~$ sudo systemctl status alpha.accesspoint.service
● alpha.accesspoint.service - Alpha.AccessPoint
   Loaded: loaded (/lib/systemd/system/alpha.accesspoint.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2024-06-28 09:50:12 MSK; 1h 16min ago
 Main PID: 7235 (Alpha.AccessPoi)
    Tasks: 101 (limit: 4555)
   Memory: 9.4M
   CGroup: /system.slice/alpha.accesspoint.service
           └─7235 /opt/Automiq/Alpha.AccessPoint/Alpha.AccessPoint -accesspoint 1>/dev/null &


июн 28 09:50:12 Operator Alpha.AccessPoint[7235]: Alpha.AccessPoint[7235]: Дерево сигналов загружено
июн 28 09:50:12 Operator Alpha.AccessPoint[7235]: Дерево сигналов загружено
июн 28 09:50:12 Operator Alpha.AccessPoint[7235]: Alpha.AccessPoint[7235]: Модуль резервирования не был загружен. Обработка реплицируемых данных невозможна
июн 28 09:50:12 Operator Alpha.AccessPoint[7235]: Модуль резервирования не был загружен. Обработка реплицируемых данных невозможна
июн 28 09:50:12 Operator Alpha.AccessPoint[7235]: Alpha.AccessPoint[7235]: Переводим сервер в состояние 'В резерве' 'Пассивный'
июн 28 09:50:12 Operator Alpha.AccessPoint[7235]: Переводим сервер в состояние 'В резерве' 'Пассивный'
июн 28 09:50:12 Operator Alpha.AccessPoint[7235]: Alpha.AccessPoint[7235]: Перевод сервера в новое состояние завершен
июн 28 09:50:12 Operator Alpha.AccessPoint[7235]: Перевод сервера в новое состояние завершен
июн 28 09:50:12 Operator Alpha.AccessPoint[7235]: Alpha.AccessPoint[7235]: Сервер запущен
июн 28 09:50:12 Operator Alpha.AccessPoint[7235]: Сервер запущен

Ответ технической поддержки:

У вас скорее всего и разворачивание AccessPoint не происходило, так как конфигурационные файлы некорректно настроены.
Во вложении конфигурационные файлы с нашего стенда  (для образца), под ваш проект: "XML.zip"
Инженерная станция на Windows, сервера и точка доступа на Astra Linux.
Немного скорректирован проект, в AccessPoint корректно делать ссылки на объект, именно на логический объект, а не на приложение целиком. Ссылкам добавлен атрибут "Раскрывать ссылку динамически", чтобы в AccessPoint появились сигналы сервера.

 Screenshot_1 (002).png

Если у вас все верно настроено, то разворачивать  AccessPoint нужно именно тот у которого отображается Имя описанное в конфигурации Alpha.Domain.

Screenshot_2 (002).png

Исключение если AccessPoint на инженерном АРМ, а не удаленно.
Скорректированный проект "Сервер.zip" (для образца), имя ip-адресов для вашего стенда нужно будет переназначить.