Пользовательские события
Необходимо сформировать 2 типа пользовательских событий:
- Аварийное событие — переход тега alarmTag из состояния false в состояние true.
- Информационное событие — переход тега alarmTag из состояния true в состояние false.
В зависимости от типа события на мнемосхеме оператора должно отображаться соответствующее сообщение. В окне "Редактор категорий событий" нет возможности отредактировать текст сообщения пользовательских событий — доступно только изменение цвета текста и фона сообщения. Все остальные параметры будут обрабатываться программно.
В данном скрипте отсутствует циклический опрос, который использовался в предыдущих примерах. Работа программы подразумевает программную реакцию на прошедшее событие в виде перехода значения тега tagAlarm из одного состояние в другое.
userEvents.lua
Для проверки корректности формирования событий разместите компонент "Последнее событие" на мнемосхеме и разверните проект на сервере. Изменение значения тега alarmTag фиксируется в таблице событий соответствующим уведомлением.
local async = require("async") -- загрузка модуля для выполнения асинхронных функций
local events = require("simp-events") -- загрузка модуля для работы с событиями
local funcs = require("funcs") -- загрузка модуля вспомогательных функций
local EventType = funcs.eventType -- переменная для работы с событиями
events.on("channelChanges", function(event) -- подписка на событие "channelChanges" (изменение тегов)
local changes = event.changes
if changes[1].name == "alarmTag" then -- проверка, если имя измененного канала "alarmTag"
Actions_LogEvents(changes[1].value) -- вызывается функция с новым значением тега
end
end)
function Actions_LogEvents(newValue)
async(function()
print("Actions.LogEvents")
if newValue == true then -- если новое значение TRUE формируется аварийное событие
funcs.logEvents({
type=EventType.alarm,
text="Авария средней температуры воды",
})
else -- если новое значение FALSE формируется информационное событие
funcs.logEvents({
type=EventType.info,
text="Средняя температура воды в норме",
})
end
end):catch(function(err) -- обработка возможных ошибок
print("error", err)
end)
end
Также система регистрирует данные о событии в журнале событий.