Перейти к содержанию

Пользовательские события

Необходимо сформировать 2 типа пользовательских событий:

  • Аварийное событие — переход тега alarmTag из состояния false в состояние true.
  • Информационное событие — переход тега alarmTag из состояния true в состояние false.

В зависимости от типа события на мнемосхеме оператора должно отображаться соответствующее сообщение. В окне "Редактор категорий событий" нет возможности отредактировать текст сообщения пользовательских событий — доступно только изменение цвета текста и фона сообщения. Все остальные параметры будут обрабатываться программно.

В данном скрипте отсутствует циклический опрос, который использовался в предыдущих примерах. Работа программы подразумевает программную реакцию на прошедшее событие в виде перехода значения тега tagAlarm из одного состояние в другое.

userEvents.lua
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
Для проверки корректности формирования событий разместите компонент "Последнее событие" на мнемосхеме и разверните проект на сервере. Изменение значения тега alarmTag фиксируется в таблице событий соответствующим уведомлением.

Также система регистрирует данные о событии в журнале событий.