Что такое динамические события и зачем они нужны.Динамические события - это механизм, позволяющий генерировать сообщения о событиях не на основе простого изменения значения сигнала (по уровню, отклонению и т. д.), а на основе каких-либо внешних динамических данных, сигналов. В отличие от статических событий (например «Давление выше нормы»), динамические события позволяют изменять текст сообщения на лету и подставлять в него данные из других сигналов. Это предоставляет возможность реализовать следующий функционал:
Источниками динамических событий могут быть только строковые сигналы типа string. Модуль OPC AE Server предоставляет возможность указать источники данных для генерации событий со стороны:
компонента Alpha.HMI, откуда значения источников передаются по внутреннему протоколу Alpha.Link. Чтобы настроить генерацию динамического события, необходимо:
![]()
✓ ПРИМЕЧАНИЕ Текст сообщения на данном этапе можно вовсе не указывать, если предполагается его полное переопределение.
Для генерации события в значение строкового параметра необходимо записать XML-конструкцию следующего вида: <Subcondition Type="Dynamic" Message="DynMessage" Sound="snd.wav" Severity="100" Enabled="1" SoundEnabled="1" /> Данная конструкция позволяет переопределить атрибуты событий, установленные в настройках Alpha.DevStudio. Для сохранения исходных значений атрибутов, заданных в конфигурации Alpha.DevStudio, можно исключить соответствующие атрибуты из XML-структуры и прописать только те, которые необходимо переопределять. Чаще всего необходимо переопределять именно сам текст сообщения - атрибут Message. В случае необходимости сохранения всех настроек, включая текст сообщения, строковый параметр должен содержать пустую XML-конструкцию: <Subcondition /> ОБРАТИТЕ ВНИМАНИЕ Генерация самого динамического события у строкового параметра происходит непосредственно в момент обновления сигнала, т. е. в момент записи вышеуказанной XML-конструкции в строковый параметр. Рассмотрим пример генерации динамического события при изменении состояния соединения с ПЛК. Например, если связь с ПЛК реализована по протоколу Modbus, то в конфигурации сервера появится сервисный динамический сигнал «Состояние физического соединения со станцией»: Service.Modules.ModbusTcpMaster.PLC.ConnectionState.ConnectionState. ![]() При его изменении будем генерировать динамическое событие и укажем его состояние в самом тексте сообщения. Чтобы реализовать возможность взаимодействия с сервисным сигналом, необходимо полностью воспроизвести его путь в конфигурации сервера, как в OpcExplorer. Либо, если нужно взаимодействовать только с одним (или несколькими сигналами), можно поступить следующим образом:
![]()
![]() Таким образом, взаимодействуя с этим сигналом (ConnectionStatePLC), мы будем взаимодействовать (читать) сервисный сигнал состояния физического соединения со станцией: Service.Modules.ModbusTcpMaster.PLC.ConnectionState.ConnectionState. Далее переходим непосредственно к логике генерации динамического события:
![]()
![]() ![]()
![]() В обработчике события прописываем следующий скрипт: if (Service.ConnectionStatePLC)\n{\nDynEventConnectStatePLC = "<Subcondition Message='Связь с контроллером восстановлена! Состояние связи: "+ String.ToString(Service.ConnectionStatePLC.Value) + "' />";\n}\nelse\n{\nDynEventConnectStatePLC = "<Subcondition Message='Потеряна связь с контроллером! Состояние связи: "+ String.ToString(Service.ConnectionStatePLC.Value) + "' />";\n} ![]() ОБРАТИТЕ ВНИМАНИЕ Для правильной записи XML-конструкции используйте «экранирование» - сочетание двойных и одинарных кавычек. ![]() Строим решение, применяем конфигурацию. В результате при обрыве/восстановлении связи с контроллером будут генерироваться следующие события: ![]() Подобным образом можно генерировать динамические события на основании любых других внешних сигналов, в том числе транслировать сообщения аудита из Alpha.Security или изменять текст сообщения, записывая XML-конструкцию в сигнал прямо из HMI проекта, реализовав в нем необходимую логику. Полезные разделы документации по данной теме: ✓ ПРИМЕЧАНИЕ Документация: |










