Нарушена граница

> [HTML Version](borderviol.html)

В скриптах с типом события "Нарушена граница" можно использовать функции [IsFirstChange](isfirstchange.md), [PrevAsBool](prevasbool.md), [PrevAsInt](prevasint.md), [PrevAsFloat](prevasfloat.md), [PrevAsStr](prevasstr.md).

Для создания скрипта по нарушению границ переменных, необходимо [создать новый скрипт](via-script-editor.md) и в списке событий выбрать тип "Нарушена граница". В левой части параметров скрипта отображается список переменных проекта, в правой части отображается список выбранных переменных, по нарушению границ которых будет выполняться скрипт. Для добавления переменных в список скрипта, необходимо выбрать требуемые переменные кликая по флажкам рядом с именами переменных. Для добавления всех переменных группы, необходимо кликнуть по флажку рядом с именем группы. Для удаления переменной из списка скрипта, необходимо снять флажок рядом с именем переменной. Для редактирования списка переменных в уже созданном скрипте, необходимо выбрать нужный скрипт [на панели скриптов](script-editor.md) и нажать кнопку редактирования(с иконкой карандаша).  

_(./images/sc_event_types_9.png)_

**Описание**

Данный тип события хорошо подходит для отправки уведомлений (Telegram / Max / E-mail / SMS или просто сообщений) о нарушении границ переменной. Для быстрого поиска требуемых переменных можно использовать опцию "Фильтр" (поддерживается [поиск по шаблону](https://simple-scada.com/help/manual/findvariables.html)). 

Скрипт будет вызван при нарушении границы или выходе за пределы шкалы любой переменной из заданного списка. Скрипт имеет параметр Variable - переменная, нарушение границы или шкалы которой привело к выполнению скрипта. Событие учитывает зону нечувствительности заданную каждой переменной, что позволяет исключить лишние срабатывания, когда значение переменной колеблется в зоне соприкосновения двух границ (предупредительной и аварийной, предупредительной и нормальной и т.д.). Также, событие не срабатывает при переходе значения из аварийной зоны в предупредительную (т.к. условия улучшились, а не ухудшились). 

**Пример скрипта**

Допустим, требуется отправлять Telegram-сообщения при нарушении границ или выходе за пределы шкалы, а также отправлять сообщение, когда значение переменной вернулось в норму. Получить нарушенную границу можно при помощи функции [GetValueZone](getvaluezone.md). Для решения задачи достаточно написать один универсальный скрипт по событию "Нарушена граница" и добавить в список скрипта требуемые переменные. Пример скрипта:

````
begin  
  if not IsFirstChange then // пропускаем первое изменение, чтобы сообщения не выдавались при перезапусках проекта  
  // отправляем сообщение в зависимости от того, в какой зоне находится значение переменной  
  case Variable.GetValueZone of  
   -3: SendTelegram('Переменная ' + Variable.Name + ' вышла за минимум шкалы. Значение: ' + Variable.AsStr);  
   -2: SendTelegram('Нарушена НА граница переменной ' + Variable.Name + '. Значение: ' + Variable.AsStr);  
   -1: SendTelegram('Нарушена НП граница переменной ' + Variable.Name + '. Значение: ' + Variable.AsStr);  
    0: SendTelegram('Значение вернулось в норму '     + Variable.Name + '. Значение: ' + Variable.AsStr);  
    1: SendTelegram('Нарушена ВП граница переменной ' + Variable.Name + '. Значение: ' + Variable.AsStr);  
    2: SendTelegram('Нарушена ВА граница переменной ' + Variable.Name + '. Значение: ' + Variable.AsStr);  
    3: SendTelegram('Переменная ' + Variable.Name + ' вышла за максимум шкалы. Значение: ' + Variable.AsStr);  
  end;  
end.

````
Теперь, при нарушении заданных пределов любой переменной добавленной в список скрипта, будет отправлено соответствующее Telegram-сообщение. 

