Каждый объект должен иметь покрайней мере две переменные, которые используются программой мониторинга: state и linkstatus. В общем виде описание переменной выглядит следующим образом (в конфигурационном файле):
<tag name="state" value="0" range="ll" changetimeout="" log="1" lastts="2007-06-29 10:20:03" timer="1" text=""> <hh value="6" text="Тревога! Сработал датчик пожарной сигнализации"/> <hi value="5" text="Внимание, подозрительная активность возле входной двери"/> <lo value="1" text="Давно нет связи с объектом"/> <ll value="0" text="Состояние объекта неизвестно"/> <state value="4" range="hh" text="Дверь открыта"> <state value="3" range="" text="Режим Охрана"> <default text="OK" range=""/> </tag>
Или так, если используется вкладка XML в свойствах объекта:
Назначение аттрибутов тэга tag
Вложенные тэги hh,hi,lo,ll задают границы соответствующих диапазонов переменной и текст который устанавливается при входе значения в данный диапазон. Проверка попадания значения в диапазон проиходит по принципу >= для hh,hi и <= для ll,lo.
Тэги state задают проверку точного соответствия значения. При совпадении устанавливается соответствующее значение range и text.
Тэг default задает текст и приоритет по умолчанию, который устанавливается в том случае когда значение переменной не попало ни в один диапазон и не совпадает со значениями в тэгах state. Устанавливается соответствующее значение range и text.
Соответственно если обнаружено, что значение переменной попадает в диапазон hh, то значения в тэгах hi,lo,state уже не анализируются
Газовый котел контролируется контроллером AT-200. Контролируется два параметра - температура(temp) и уровень воды(level). Для температуры контролируем только верхний предел, Для уровня воды - верхний и нижний.
<tag name="temp" value="0" range="ll" changetimeout="0" log="1" lastts="2007-06-29 10:20:03" text=""> <hh value="100" text="Перегрев котла, не фукционирует автоматический выключатель"/> <hi value="95" text="Внимание, температура выше нормы"/> <default text="OK"/> </tag> <tag name="level" value="50" range="" changetimeout="0" log="1" lastts="2007-06-29 10:20:03" text=""> <hh value="100" text="Тревога! Бак переполнен, возможно затопление"/> <lo value="30" text="Мало воды в баке"/> <ll value="10" text="Тревога! Очень мало воды, возможен перегрев"/> <default text="OK"/> </tag>
Для примера, пусть при выходе значения переменной level за нижнюю границу (lo) через 5 минут после этого оператору должно быть выдано напоминание о необходимости проверить уровень воды в баке.
Во-первых, должна быть описана переменная которую мы будем использовать в качестве таймера.
<tag name="mytimer" value="0" log="0" timer="0"> <hi value="300" /> /// 300 секунд = 5 минут </tag>
Во вторых, в XSLT скрипте должны быть прописаны правила по которым создаются команды пуска и останова таймера.
<?xml version="1.0" encoding="windows-1251" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- Пример скрипта --> <!-- Главный шаблон --> <xsl:template match="/"> <commands> <xsl:apply-templates select="/tmp/event[@name='tag']"/> </commands> </xsl:template> <!-- Шаблон обработки события tag --> <xsl:template match="event[@name='tag']"> <!-- Анализ переменной level --> <xsl:if test="@tag='level'"> <xsl:if test="@range='lo'"> /// При выходе за нижнюю границу <SET tag="mytimer" value="0"/> /// Устанавливаем исходное значение таймера <SET tag="mytimer" property="timer" value="1"/> /// Запускаем таймер </xsl:if> <xsl:if test="@range=''"> /// Если уровень восстановился сам <SET tag="mytimer" property="timer" value="0"/> /// сбрасываем таймер, предупреждения не будет </xsl:if> </xsl:if> <!-- Анализ таймера mytimer --> <xsl:if test="@tag='mytimer'"> <xsl:if test="@range='hi'"> /// Таймер отсчитал свои 5 минут <SET tag="mytimer" property="timer" value="0"/> /// Cбрасываем таймер <MSG text="Объект {/tmp/object/@name} : Проверьте уровень воды в баке!"/> /// Выдаем предупреждение </xsl:if> </xsl:if> </xsl:template> </xsl:stylesheet>