Переменные объекта

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

Редактирование переменных объекта

Рис. 27

Назначение аттрибутов тэга tag

Вложенные тэги hh,hi,lo,ll задают границы соответствующих диапазонов переменной и текст который устанавливается при входе значения в данный диапазон. Проверка попадания значения в диапазон проиходит по принципу >= для hh,hi и <= для ll,lo.

Тэги state задают проверку точного соответствия значения. При совпадении устанавливается соответствующее значение range и text.

Тэг default задает текст и приоритет по умолчанию, который устанавливается в том случае когда значение переменной не попало ни в один диапазон и не совпадает со значениями в тэгах state. Устанавливается соответствующее значение range и text.

Порядок проверки диапазона/приоритета переменной

  • hh,ll
  • hi,lo
  • state
  • default

Соответственно если обнаружено, что значение переменной попадает в диапазон 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>