Умный дом

Сопряжение управления

Наличие нескольких телевизоров в сегодняшнем быту далеко не редкость. Телевизор в гостиной, DVD-проигрыватель, ви­деомагнитофон, телевизор на кухне, в спальне. Как лучше со­гласовать подключение всех источников видеосигнала, можно
посмотреть в Приложении. В системе «Умный дом» распреде­ление видеосигнала по всем помещениям, естественно, сопро­вождается распределением управления (рис. 3.24). Как это может выглядеть?

Из приведенной схемы ясно, что DVD-проигрыватель, расположенный в гостиной, управляется дополнительно из спальни и кухни.

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

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

Ц ^............ ^ ^ .............. ^ ■ • U............. '^гЩ

FMt ДО >И lj yir* Window І««) b'"P

В ч[и|| [ТЩ Т fe, " * .................. , , ^... , „,, •

# nntfimftdt) - „ - n" в* ІЗ І

Сопряжение управления

Рис. 3.23. Окончательный результат наблюдения

Серия закончилась. Ваши домашние вспомнили о фильме, который собирались посмотреть вчера и даже установили в проигрыватель, но не успели посмотреть. Они нажимают на пульте управления кнопочку DVD и... Как и положено,

Сопряжение управления

Рис. 3.24. Подключение DVD-проигрывателя ктелевизорам

Команда power, воспроизводимая модулем излучения ИК-ко­манд, выключит DVD-проигрыватель на самом интересном месте, когда интрига фильма заставляет вас забыть о просту­де. Система «Умный дом» в данном случае позаботится о том, чтобы вам о ней напомнить.

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

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

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

Сопряжение управления

Рис. 3.25. Алгоритм управления DVD-проигрывателем

Все, когда разрабатывали алгоритм управления. Но все ли вы предусмотрели?

В аналогичной ситуации я поступаю следующим образом. Нарисовав алгоритм, я проверяю его с помощью вспомогатель­ной программы, для создания которой можно использовать любую современную среду программирования. Я использовал Delphi и KDevelop с одинаковым успехом. Можно воспользо­ваться любой средой программирования и любым языком. Единственное, как мне кажется, важное условие - легкое со­здание графических примитивов и управление их свойствами. В данном случае программа не будет конечной целью, она - лишь средство избавить вас от сомнений в правильности при­нятого решения.

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

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

Сопряжение управления

Рис.*3.26. Проверка алгоритма управления

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

Void test::cinTV_0NSlot() {

Cin_TV = true; cin_NTV = true; cin_AVproc = true;

Cin_AVproc_f->setBackgroundColor(,,Red,,); // AVprocessor Cinema cin_ntv_f->setBackgroundColor("Red"); // NTV Cinema cin_tv_f->setBackgroundColor("red"); extron_eqipl->setText ("EXTR0Nn NTV->Cinemaw) ; extron_eqipl->setBackgroundColor(wredn); // EXTRON NTV Cinema proj_equip->setText (n Project orn NTV-Composit") ; proj_equip->setBackgroundColor("red"); av_proc_equip->setBackgroundColor("red") ; av_proc_equip->setText ("AV Processorn NTV~3Dn);

Light->setBackgroundColor ("Black") ; }

Void test::cinTV_OffSlot() {if(cin_AVproc){ cin_AVproc = false;

Cin_AVproc_f->setBackgroundColor ("LightGrey"); // AVProcessor cin_TV =false;

Cin_tv_f->setText ("cin_TV");

Cin_tv_f->setBackgroundColor("LightGrey"); // TV

Cin_NTV = false;

Cin__ntv_f—>setText ("cin_NTV") ;

Cin_ntv_f->setBackgroundColor("LightGrey"); // NTV extron_eqipl->setText ("EXTRON") ; extron_eqipl->setBackgroundColor ("LightGrey") ; extron_eqipl->setText("EXTRONXn NTV->Cineman); //Extron Cinema proj_equip->setText ("ProjectorXn NTV-Composit") ; proj_equip->setBackgroundColor("LightGrey"); av_proc_equip->setText("AV Processorn NTV-3D"); av_proc_equip->setBackgroundColor ("LightGrey") ; Light->setBackgroundColor("White");

If (cin_DVD){ cin_DVD = false;

Cin_dvd_f->setBackgroundColor ("LightGrey"); / / DVD DVD_in__use = false;

Dvd_inuse_f->setBackgroundColor ("Yellow"); // DVD dvd_equip->setText ("DVD") ;

Dvd_equip->setBackgroundColor ("LightGrey") ; }

If (cin_VCR){ cin_VCR = false;

Vcr_equip->setBackgroundColor("LightGrey");

Vcr_equip->setText("VCR"); //VCR }

If (cin_CD){ cin_CD = false;

Cin_cd_f->setBackgroundColor("LightGrey"); //CD CD_in_use = false;

Cd_inuse_f->setBackgroundColor("Yellow"); //CD cd_equip->setText("CD");

Cd_equip->setBackgroundColor("LightGrey"); }

}

}

Void test::cinNTV_onSlot() {

If (cin_TV){ if (!cin_DVD){ cinJNITV = true;

Cin_ntv_f->setBackgroundColor("Red"); // NTV Cinema extron_eqipl->setText ("EXTRONXn NTV->Cinema") ; extron_eqipl->setBackgroundColor("red"); // EXTRON NTV Cinema

Proj_equip->setText("ProjectorXn NTV-Composit") ; proj_equip->setBackgroundColor("red"); av_proc_equip->setText("AV Processorn NTV-3D"); // 3D-

Sound }

Else {

Cin_NTV = true;

Cin. nt^f-^setBackgroundColorr'Red"); // NTV Cinema cin_DVD = false;

Cin_dvd_f->setBackgroundColor("LightGrey"); // DVD DVD_in_use = false;

Dvd_inuse_f->setBackgroundColor("Yellow"); // DVD extron_eqipl->setText ("EXTRONXn NTV->Cinema"); // Extron Cinema

Proj_equip->setText("Projectorn NTV-Composit"); av_proc_equip->setText ("AV ProcessorXn NTV-3D"); // 3D - "sound

Dvd_equip->setText("DVD");

Dvd_equip->setBackgroundColor("LightGrey"); // DVD }

} }

Void test::cinDVD_onSlot() {

If (cin_TV){

If (!DVD_in_use){ cin_NTV = false;

Cin_ntv_f->setBackgroundColor("Light Grey"); 11 DVD_in_use = true;

Dvd_inuse_f->setBackgroundColor("red"); // DVD cin_DVD = true;

Cin_dvd_f->setBackgroundColor("red"); // DVD dvd_equip->setBackgroundColor("red"); dvd_equip->setText("DVD for Cinema"); // ,DVD av_proc_equip->setText("AV ProcessorXn DVD-Dolby"); av_proc_equip->setBackgroundColor("Red"); // DVD DolbyDigital

Proj_equip->setText ("ProjectorXn DVD-S_video"); // DVD }

Else{

Cin_NTV = false;

Cin_ntv_E->setBackgroundColor("Light Grey"); // av_proc_equip->setText("DVD");

Av_proc_equip->setText("AV ProcessorXn DVD-Dolby"); // DVD DolbyDigital

Proj_equip->setText("ProjectorXn DVD-S_video"); // DVD }

Void test::cinDVD_offSlot() {if ((cin_TV)&&(IcinJVCR)&&(!cin_COMP)){ if (cin_DVD){ cin_NTV = true;

Cin_ntv_f->setBackgroundColor("Red"); // NTV Cinema cin_DVD = false;

Cin_dvd_f->setBackgroundColor("LightGrey"); // DVD DVD_in_use = false;

Dvd_inuse_f->setBackgroundColor("Yellow"); // DVD proj_equip->setText("ProjectorXn NTV-Composit"); av_proc_equip->setText ("AV ProcessorVn NTV-3D"); // 3D- sound

Dvd_equip->setText ("DVD") ;

Dvd_equip->setBackgroundColor("LightGrey"); // DVD }

При нажатии клавиши пультов управления я «включаю и выключаю» устройства (меняю цвет), устанавливаю и сбрасы­ваю флаги - словом, контролирую свое нехитрое хозяйство.

Запустив программу, я начинаю беспорядочно щелкать по всем клавишам устройств управления. Моя задача - проверить, не возникает ли тупиковая ситуация, подобная описанной выше, при каких-либо управляющих сигналах. Используя этот нехитрый прием, я убедился, что допускал ошибки в алгорит­мах даже после их тщательной проверки на бумаге. В первую очередь, это ошибки, которые я называю для себя ошибками последовательности действий. Описывая алгоритм, зачастую укрупняешь операции. Например, в алгоритме, приведенном выше, я записал включить DVD, установить флаг. В действи­тельности команда включить DVD распадается на ряд команд, каждая из которых может ветвиться: вывести устройство из режима ожидания, открыть лоток для установки диска, зак­рыть лоток, включить меню, выбрать из меню режим про­смотра и т. д. Каждому действию соответствует своя последо­вательность нажатия клавиш на пульте. Когда «крутишь» алгоритм на бумаге, легко проглядеть возможные ветвления и ошибки в последовательности. Особенно, если работа, как это часто бывает, происходит в условиях дефицита времени. Использование программы для проверки программы (воз­можно, есть математические методы, решающие эти пробле­мы, но нет времени с ними разобраться) позволяет до введе­ния в систему неких действий проверить, не приведут ли они к нежелательным результатам. И удалить, как минимум, тупи­ковые ситуации.

Сами по себе эксперименты в этой области достаточно интересны. Но, если вы от экспериментов перешли к дей­ствиям, не забывайте, что выявление дефектов в действую­щей системе сложнее, чем на стадии проекта. Возвращаться к уже сделанному, когда первоначальный интерес сменился желанием пользоваться системой без проблем, совсем не хо­чется. А раздражение, которое может вызывать «поехавшая крыша Умного дома», не стоит нескольких дополнительных усилий, приложенных в начале работы.

Кроме того, вы все делаете для себя. Я уже говорил, что не все придерживаются точки зрение, что сопряжение уп­равления следует делать. Вам тоже, возможно, это покажется лишним. Согласен. Но прием, о котором я рассказал, может быть полезен и в других случаях.

Умный дом

Вторая версия основной программы на языке С++

/****************^ * TOC o "1-3" h z Copyright (С) 2006 by Vladimir Gololobov * * vgololobov@yandex. ru * * * * This program is free software; you can redistribute it …

Циклы

Циклы выполняют выражения или блоки выражений до тех пор, пока выражение условия не становится истинным. Наша программа требует двух циклов (один вложен в дру­гой). Пока пользователь желает угадывать последовательно­сти: { …

Две полезные схемы

Первая схема относится к настенному выключателю, работа­ющему по протоколу XI0. Что полезного можно почерпнуть из этой схемы? Например, организацию сканирования сети и управления триаком. Схему я привожу, как она сохранилась …

Как с нами связаться:

Украина:
г.Александрия
тел./факс +38 05235  77193 Бухгалтерия
+38 050 512 11 94 — гл. инженер-менеджер (продажи всего оборудования)

+38 050 457 13 30 — Рашид - продажи новинок
e-mail: msd@inbox.ru
msd@msd.com.ua
Схема проезда к производственному офису:
Схема проезда к МСД

Оперативная связь

Укажите свой телефон или адрес эл. почты — наш менеджер перезвонит Вам в удобное для Вас время.