Каждый объект должен иметь покрайней мере две переменные, которые используются программой мониторинга: 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>