Настройка оборудования на одной линии

Основная линейка нашего оборудования представляет собой сеть микроконтроллеров, работающих по адресному протоколу и управляемых мастером сети. При этом, адрес мастера всегда "00", а клиентские устройства настраиваются на адреса в диапазоне 01..FE (1..254). Адрес "FF" является "пустым". Он назначается устройству при производстве.

Первое, что необходимо сделать - назначить собственный, уникальный адрес клиентскому устройству. Желательно выполнить эту работу до подключения прибора в общую сеть или делать это последовательно (подключили новое устройство, настроили адрес, подключаем следующее...).

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

Выполните следующий код в программе настройки системы:

insert into CONNECTIONS_DATA (LINE, ADDR, CMD, DATA)
values (1, 'FF', 'I', '01')

Он означает передачу команды настройки адреса ("01") новому устройству на линии с индексом 1. Адреса передаются в шестнадцатеричном формате в верхнем регистре символов.

Если требуется изменение адреса, а не его установка новому устройству, следует помнить, что большая часть приборов имеет блокировку памяти и для внесения изменений потребуется соответствующая команда:

insert into CONNECTIONS_DATA (LINE, ADDR, CMD, DATA)
values (1, '01', 'Z', '03');
insert into CONNECTIONS_DATA (LINE, ADDR, CMD, DATA)
values (1, '01', 'I', '02');

Если для данной линии в БД установлен флажок автоматической настройки устройств, соответствуюшая запись о нем будет сгенерирована по мере возникновения сигнала "u" (устройство активно). В противном случае, его придется регистрировать вручную.

Диапазон адресов поделен таким образом, что часть из них (до "1F") опрашиваются автоматически. Адреса вне этого диапазона обслуживаются только по явному запросу БД. Это сделано с целью обеспечения приоритетного сбора информации с устройств, с которыми взаимодействует пользователь.

Например, можно разместить кнопки управления и приемники ИК пультов в основном диапазоне, а релейные контроллеры - в расширеном. При этом, временной лаг на нажатие кнопки будет тем меньше, чем меньше устройств размещено в диапазоне до "1F", а скорость реакции реле (имеющем адрес "44") ничем не будет отличаться.

Так же, в расширеный диапазон можно выносить устройства задержка на которых терпима по самой логике их применения (например, климатические датчики). Но тогда в настройках системы необходимо прописать график их принудительного опроса.

 

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

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

Настройка параметров сенсоров

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

y=k*x+a

что позволяет компенсировать и мультипликативную, и аддитивную погрешности измерений.

В случаях с компенсацией нелинейности, применяется дополнительный механизм "функция для расчета значения датчика".

Тело функции:

declare VRT double precision;
declare VR double precision;
declare RT double precision;
declare TX double precision;
begin
 ORIGINAL = cast('0x' || lpad(substring(:DATA from 1 for minvalue(char_length(:DATA),16)), 16, '0') as bigint);
 -- (2.56 / 1023) * ORIGINAL - ADC voltage
 VRT = cast(0.002502444 as double precision) * cast(ORIGINAL as double precision);
 VR = cast(5 as double precision) - VRT;
 RT = cast(33000 as double precision) * VRT / VR; -- 33kOhm pullup
 TX = ln(RT / 10000); -- 10kOhm NTC termistor
 TX = TX / cast(3977 as double precision) + cast(0.003354016 as double precision); -- 3977 - from documentation, 1/298.15 - 25C
 RESULT = (cast(1 as double precision) / TX - cast(273.15 as double precision)) * :K + :A;
 suspend;
end

Функции расчета вводятся на пользовательском уровне в отдельное хранилище и не влияют на структуру и механизмы БД. Ввод осуществляется в справочнике "Функции сенсоров".

В теле функции можно использовать предопределенные входные и выходные параметры, обслуживаемые основной процедурой обработки.

Необходимо помнить, что если функция используется для предварительной обработки токенов, для реализации стандартного механизма проверки, процедуру SP_PROCESS_TOKEN, в ее теле, нужно вызывать явно.

"Группа сенсоров" используется лишь как дополнительный параметр, влияющий исключительно на вывод данных в отчетах.

Для сенсоров типа "токен", важно понимание территории (зона) и типа сервиса. Эти параметры могут наследоваться от глобального устройства или от свойств линии устройств. Они используются при проверке прав ключа "открывать замки".

Параметр "event needed", в основном, отвечает за логирование данных на сенсоре (нажатие кнопки или обработка карточки доступа). Но может использоваться и для детальной истории по данным аналоговых датчиков.

"Statistic needed" нужен для формирования статистических данных, формируемых для сетки день и час. Для каждого часа регистрации, считаются минимальные и максимальные значения, а так же среднее значение, расчитаное с учетом времени действия. Т.е. не среднее значение отсчетов силы потока воды (как пример), а усредненный поток.

Так же, такой расчет среднего значения позволяет оценить плотность дискретных событий. Например, какой процент времени была открыта балконная дверь (глупо, но как вариант).

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

Выходы устройства

 

Являются "ведомым" компонентом системы и имеют минимум необходимых настроек.

Тип выхода обязательно определяет команду, передаваемую устройству, а его индекс может и отсутствовать в случае, если других выходов такого типа на устройстве нет или будет использоваться групповое управление выходами одного типа. Например, для контроллера двери можно передать управляющий сигнал с кодом "o" и "030200", где цифровая часть содержит индекс выхода замка и два байта длительности открытия или "0100000001000200", где последовательность содержит длительности для всех интерфейсов сразу. Во втором случае, в описании выходов, их перечень не нужен и единственный зарегистрированный интерфейс не должен содержать индекса.

Если не указать название выхода, в списках системы он будет фигурировать как "имя устройства - [команда-индекс]". Или "описание линии - адрес устройства - [команда-индекс]".

Территория выхода, как правило, не используется при принятии решений, но может быть задействована в процедурах управления сложными механизмами. Наподобии пульта управления лифтом, где считанная карточка дает разрешение на вызов определенных этажей, доступ к которым для нее разрешен.