Все устройства семейства UNC0xx могут быть снабжены модулем расширения, который поддерживает четыре входные (сигнальные) линии; для UNC001-x это модуль UNC001/in, для UNC01x — соответственно UNC010/in. Что же представляют собой и для чего могут использоваться эти линии?
Принцип работы и предназначение
По сути входная линия представляет собой два контакта, между которыми (предположительно) вне устройства может возникнуть прямое соединение. Устройство способно определить, присутствует ли такое соединение в текущий момент времени или нет.
Следует сразу же отметить, что один из двух контактов, составляющих входную линию, подсоединён к общей «земле» устройства; это обстоятельство важно учитывать, поскольку, как следствие, этим общим контактом все входные линии соединены также и между собой. На рисунке справа показана схема подключения входных линий к устройству UNC010, снабженному модулем UNC010/in.
Замыкая и размыкая входную линию, мы тем самым можем передать устройству (а через него — управляющему компьютеру) некий сигнал, предназначение которого, а равно и реакция на который зависят от решаемой нами задачи.
Простейший вариант применения входной линии — поместить между её контактами обыкновенную кнопку с тем, чтобы управляющий компьютер мог среагировать на её нажатие. Конечно, располагать такую кнопку рядом с компьютером может показаться бессмысленно, ведь есть клавиатура; этот способ использования обретает смысл, если необходимо научить компьютер реагировать на кнопку, физически расположенную, например, в другом помещении. Можно представить себе также и случай, когда компьютер закрыт в некий ящик и, возможно, не имеет клавиатуры, а кнопка выведена из этого ящика наружу, и тому подобное. Забегая вперёд, отметим, что реагировать можно как на нажатие, так и на отпускание кнопки, и эти реакции могут быть различны; более того, можно настроить само устройство UNC0xx так, чтобы оно реагировало на действия с входной линией без участия управляющего компьютера.
В некоторых случаях может оказаться удобным использование не кнопки, а выключателя (например, тумблера). Если мы обрабатываем отдельно событие замыкания линии и событие её размыкания, тумблер позволяет разнести эти события по времени. В качестве типичного сценария использования тумблера можно назвать включение и выключения света в помещении: осветительный прибор управляется одним из выходных (релейных) каналов нашего устройства, а команда на включение и выключение света может быть подана с помощью тумблера — то есть можно включить и выключить свет, как это обычно делается, с помощью выключателя, но управляющий компьютер при этом предусматривает какие-то иные случаи включения и выключения света.
Другой типичный сценарий использования тумблера — переключение режимов работы системы. Например, если мы реализуем очередной вариант «умного дома», то, возможно, нам захочется, чтобы система работала различным образом, когда мы дома и когда нас дома нет. Проще всего добиться этого — поставить рядом с входной дверью тумблер и соединить его с одной из входных линий; управляющий компьютер при этом перед выполнением тех или иных действий опрашивает устройство на предмет положения вышеозначенного тумблера и, например, включает и выключает свет по датчикам движения, если хозяева дома, если же их дома нет, то имитирует их наличие дома, включая и выключая свет в заданное время по таймеру.
Можно представить себе и более сложные варианты применения входных линий. Так, популярные датчики движения передают информацию о своём состоянии посредством замыкания и размыкания контура: обычно контур остаётся замкнутым, пока датчик не регистрирует никаких движений, а при появлении движения контур размыкается. Для считывания информации с датчика движения можно использовать входные линии наших устройств, что позволяет управляющему компьютеру (или самому устройству) реагировать на движение в помещении.
Естественно, возможны и другие варианты. Так, из геркона и магнита можно сделать датчик закрытия двери или окна (и, разумеется, ещё много чего — ключевым является положение магнита в пространстве, а расположить его можно едва ли не на любой подвижной конструкции). Замкнутость-разомкнутость используют некоторые датчики освещённости, датчики наличия воды, пожарные извещатели и многие другие датчики; нам приходилось видеть датчик целостности периметра, представляющий собой кусочек тонкой медной проволоки, механически рвущийся при открывании двери (дверцы шкафа). Принцип наличия или отсутствия проводимости между двумя контактами в целом достаточно универсален.
Программная поддержка входных линий
С каждой из входных линий связаны:
- Бит в регистре состояния, равный единице, если соответствующая линия замкнута, и нулю, если она разомкнута;
- Двухбайтный счётчик, который в зависимости от настроек может увеличиваться каждый раз при замыкании линии, либо при её размыкании, либо и при замыкании, и при размыкании (в последнем случае можно использовать чётность счётчика как признак состояния линии);
- Конфигурационный регистр реакции, задающий режим работы счётчика, а также, возможно, действия, которые устройство должно выполнить при замыкании/размыкании данной линии.
Регистр состояния и массив счётчиков находятся в структуре глобального состояния устройства (см. структуру unc001_global_state_str
, поля counters
и state_bits
). Массив регистров реакций находится в структуре глобальной конфигурации (unc001_global_configuration_str
, поле reactions
). Функции API, которые могут представлять интерес в этой связи — unc001_get_configuration
, unc001_get_fullstate
, unc001_set_reactions
и unc001_zero_query_counters
; кроме того, представляют интерес флаги -Q, -R, -Z
программы uncctl
. Подробности имеются в руководствах по эксплуатации устройств UNC0xx.
В простейшем случае всё связанное с входной линией обрабатывает управляющий компьютер. Для этого используются соответствующие биты регистра состояния. В случае, если смена состояния носит кратковременный характер у компьютер может не успеть «заметить» её (то есть если смена состояния входной линии на противоположное и обратно может произойти по времени между двумя опросами регистра состояния), имеет смысл использовать значения счётчиков (если счётчик увеличился — значит имели место соответствующие события, даже если опрос регистр состояния этого не показал).
Соответствующая настройка регистра реакции позволяет задать коды действий, выполняемые при наступлении соответствующих событий (замыкания цепи и её размыкания) самим устройством UNC0xx без участия управляющего компьютера. Коды действий подробно описаны в руководствах по эксплуатации; отметим, что код действия представляет собой 16-битное число, тогда как в регистре реакций на два кода действий отведено всего три байта; проблема нехватки разрядов решается использованием одного общего старшего байта для обоих кодов действия. В большинстве случаев этого оказывается достаточно, поскольку связанные между собой действия обычно относятся к линиям одной группы; если же это не так и требуется более сложная работа, можно использовать действия со старшим байтом 0E
(выполнение действия, заданного одним из 48 расширенных регистров), и уже в этих регистрах расположить коды нужных действий.
Одним из наиболее типичных сценариев применения автоматических реакций — это включение выходной линии при замыкании соответствующей входной линии и её выключение при размыкании. Пусть, к примеру, выход с номером 3 основной группы задействован для управления освещением, но в некоторых случаях команду на включение и выключение света хочется дать в обход управляющего компьютера — в том числе в случае, если он по каким-то причинам выключен. Если входную линию номер 3 (для UNC001-x это соответствует единственному возможному модулю, для UNC01x — модулю в первом слоте) вывести на обычный выключатель и установить соответствуюий регистр реакции на включение линии 3 при замыкании и выключение при размыкании, мы получим нужную нам возможность. Код действия на включение линии 3 — 004016
, код действия на её выключение — 008016
; старший байт у них общий, 00
(поскольку они относятся к одной группе линий). Таким образом, в три младших байта регистра R3 нужно занести значения 00 80 40
; задаваемый старшим (четвёртым) байтом режим работы счётчика нам не слишком важен, но на всякий случай оставим его в значении по умолчанию (60
, что соответствует приращению счётчика как по замыканию, так и по размыканию). Окончательное значение регистра R3 составит 60008040
. Установить это значение можно командой
uncctl -R 3 60008040
или, что то же самое,
uncctl -R 3 6000:-===:+===
Электрическая защита
Модули поддержки входных линий включают в свой состав оптопары для каждой линии, что позволяет входу выдерживать напряжение до 400 В. Тем не менее, следует помнить, что общий провод входных линий присоединён к «массе» устройства и что даже оптопара может быть пробита достаточно сильным разрядом.
Подавление дребезга
При замыкании контактов может возникнуть ситуация, при которой, прежде чем окончательно замкнуться или разомкнуться, цепь несколько раз сменит своё состояние. Это явление называется дребезгом контактов. С целью устранения дребезга прошивка устройства считает цепь сменившей состояние не раньше, нежели цепь стабильно пробудет в новом состоянии определённое время. Длительность защиты от дребезга определяется младшим байтом регистра пользовательской конфигурации, единицей измерения при этом является цикл работы устройства, составляющий приблизительно 0,01 секунды. По умолчанию длительность защиты от дребезга имеет значение 2. Изменить регистр пользовательской конфигурации можно командой uncctl -G
.
Ключевые слова/keywords: умный дом своими руками, компьютерное управление электропитанием, компьютерное управление электричеством, домашняя автоматизация, включение питания по USB, компьютерное управление светом в комнате, управление освещением, контроллер света, управление светом по USB