Умный дом

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

/****************^

* TOC o "1-3" h z Copyright (С) 2006 by Vladimir Gololobov *

* vgololobov@yandex. ru *

* *

* This program is free software; you can redistribute it and/or modify *

* it under the terms of the GNU General Public License as published by *

* the Free Software Foundation; either version 2 of the License, or *

* (at your option) any later version. *

* *

* This program is distributed in the hope that it will be useful, *

* but WITHOUT ANY WARRANTY; without even the implied warranty of *

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *

* GNU General Public License for more details. *

* *

* You should have received a copy of the GNU General Public License*

* along with this program; if not, write to the *

* Free Software Foundation, Inc., *

* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *

************************************************

#include <qlabel. h>

#include <posix_qextserialport. h>

Iinclude ^qextserialbase. h>

Tinclude "barbywidget. h"

Char command_on[7] = "R14$1N"; char command_of[7] = "R14$1F";

Posix_QextSerialPort comPort("/dev/ttySO"); // Это позволяет использовать готовый класс.

BarbyWidget::barbyWidget(QWidget* parent, const char* name, WFlags fl)

: barbyWidgetBase(parent, name, fl) {

Light->setEnabled(FALSE);//Здесь light - этикетка с

Желтой картинкой. }

BarbyWidget::-barbyWidget() {}

/* $SPECIALIZATION$ */

Void barbyWidget::port_open_clicked() {

ComPort. setName("/dev/ttySO"); // Далее следуют установки порта СОМІ.

ComPort. setDataBits(DATA_8); comPort. setStopBits (STOPJL); comPort. setBaudRate (BAUD2400); comPort. open(0);

If (comPort. іsOpen()) {

Label->setText( "port open" ); // Это переделанная этикетка. void barbyWidget::port_close_clicked() {

ComPort. close();

If (!comPort. isOpen())

Label->setText( "port close" );

}

Void barbyWidget::light_on_clicked() {

ComPort. wrіteBlock(command_on, 6); light->setEnabled(TRUE);

}

Void barbyWidget::light_off_clicked() {

ComPort. writeBlock(command_of, 6) ; light->setEnabled(FALSE);

}

#include "barbywidget. moc"

Файл заголовка barbywidget. h: /***************^

* Copyright (C) 2006 by Vladimir Gololobov *

* vgololobov@yandex. ru *

* *

* This program is free software; you can redistribute it and/or modify *

* it under the terms of the GNU General Public License as published by *

* the Free Software Foundation; either version 2 of the License, or *

* (at your option) any later version. *

* *

* This program is distributed in the hope that it will be useful, *

* but WITHOUT ANY WARRANTY; without even the implied warranty of *

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *

* GNU General Public License for more details. *

* *

* You should have received a copy of the GNU General Public License *

* along with this program; if not, write to the

* Free Software Foundation, Inc., *

* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *

★Л*****************************************»************/

#ifndef _BARBYWIDGET_H_ tdefine _BARBYWIDGET_H_

#include "barbywidgetbase. h" tinclude <posix_qextserialport. h> #include <qextserialbase. h>

Class barbyWidget : public barbyWidgetBase {

Q_OBJECT public:

BarbyWidget (QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); - barbyWidget() ; /*$PUBLIC_FUNCTIONS$*/

Public slots: /* $ PUBLIC_SLOTS $ */

Virtual void port_open_clicked(); // Это бывшая клавиша buttorn.

Virtual void port_close_clicked(); // Далее добавленные клавиши.

Virtual void light_on_clicked(); virtual void light_off__clicked() ; protected:

/* $PROTECTED_FUNCTIONS$ */

Protected slots: Г* $PROTECTED_SLOTS $ */

};

#endif

После запуска программы, щелчка кнопки СОМІ от­крыть и кнопки Свет включить получаем вид программы, показанный на рис. П. 16.

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

Рис. П. 16. Вид работающей программы

Первая неожиданность - программа работает, но модуль не реагирует на команды. Ситуация повторяет начало рабо­ты с портом в части проверки конвертера. Первое, что уда­ется проверить с помощью мультиметра, - наличие измене­ний сигналов на входе конвертера. Если поменять порт (то есть /dev/ttySl), напряжение на сигнальном выводе останется неизменным. Это хорошо. Но плохо, что модуль не реагиру­ет на команды. На всякий случай я возвращаюсь к програм­ме на Visual Basic и проверяю работу модуля. Сомнений не Остается - модуль отрабатывает команды.

Пользуясь тем, что модуль работает, проверяю сигналы интерфейса RS485 в программе, работающей с Visual Basic. Затем я перезагружаю операционную систему и запускаю программу из KDevelop. Спустя некоторое время, удается за­метить, что сигнал RTS на S выводе микросхемы МАХ1483 сбрасывается в «О» при открытии порта. Добавление в про­грамму в разделе настроек после открытия порта исправля­ет ситуацию. Модуль выполняет команды.

ComPort. open(0);

ComPort. setRts (FALSE); // Добавленная строка

Теперь остается разобраться с командами запроса статуса реле. Модифицированная программа выглядит следующим образом:

Iinclude <qlabel. h> iinclude <posix__qextserialport. h> #include <qextserialbase. h> iinclude "barbywidget. h"

Char command_on[7] = "R14$1N"; char command_of[7] = "R14$1F"; char command_st[7] = "R14$1S"; char answer_st[19] = " int і = 0;

Posix_QextSerialPort comPort("/dev/ttySO") ;

BarbyWidget::barbyWidget(QWidget* parent, const char* name, WFlags fl)

: barbyWidgetBase(parent, name, f1) {

Light->setEnabled(FALSE); }

BarbyWidget::-barbyWidget() {}

/* $ SPECIALIZATI0N$ */

Void barbyWidget::port_open_clicked() {

ComPort. setName("/dev/ttySO"); comPort. setDataBits(DATA_8); comPort. setStopBits (ST0P_1);

ComPort. setBaudRate (BAUD2400); comPort. open(0); comPort. setRts (FALSE); answer->setText(" ") ;

І f (comPort. і sOpen()) {

Label->setText( "port open" ); }

Void barbyWidget::port_close_clicked() {

ComPort. close();

If (!comPort. іsOpen())

Label->setText( "port close" );

Answer->setText(" ") ;

}

Void barbyWidget::light_on_clicked() {

ComPort. writeBlock(command_on, 6) ; comPort. writeBlock(command_st, 6) ; while (і comPort. atEnd()); for (i=0;i<100000000;++І); comPort. readBlock(answer_st, 18); answer->setText(answer_st); if (answer_st [17] == "N")

Light->setEnabled(TRUE); }

Void barbyWidget::1іght_off„clicked() {

ComPort. writeBlock(command_off 6) ; comPort. writeBlock(command_st, 6) ; while (!comPort. atEnd()); for (i=0;i<100000000;++i); comPort. readBlock(answer_st, 18); answer->setText(answer_st); if (answer_st[17] == "F")

Light->setEnabled(FALSE); }

#include "barbywidget. moc"

В основном, изменения касаются чтения ответа в буфер порта после отправки запроса:

While (!comPort. atEnd()) ; for (i=0;i<100000000;++i); comPort. readBlock(answer_st, 18);

Втр 23 Май, 13:37 Ч

Пустой цикл for добавлен, чтобы ответ был полностью получен. Массив char answer_st [19] служит для чтения бу­фера ввода порта, и сохраняемые им команды содержат все, что было отправлено (рис. П. 17).

I* Пряяожвим* П.*.*, Сист—^в^^Ф1 % і

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

DATE

J

. Сеет включмп»

І

Сеет выключить |

Кооэи

- fito-Zr'/ho. Ь fpWum Обе». **> шктт Ово». GI ■»

Рис. П. 17. Прием ответа модуля в программе

В правом нижнем углу формы отображается содержание этого массива. Поэтому в проверке его содержимого я про­веряю только последний символ:

If (answer_st [17] == "N")

Возможно, не лучшим образом, но механизм работает. По команде выключения света свет на картинке выключается.

Ha макете, естественно, по команде включения света загорает­ся индикатор, который гаснет по команде выключения света.

Запланированная часть работы выполнена.

Умный дом

Способы строительства частных домов

Строительство частных домов является одним из самых популярных направлений в строительной отрасли. Существует множество способов и технологий, которые можно использовать при строительстве дома. В этой статье мы рассмотрим наиболее распространенные …

Как построить современный умный дом?

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

5 советов, как правильно обустроить домашний офис

Домашний кабинет – пространство, в котором должны быть созданы все условия для комфортной работы. Основные атрибуты – это рабочий стол и стул, компьютер, наушники с микрофоном и другие важные мелочи. …

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

Украина:
г.Александрия
тел./факс +38 05235  77193 Бухгалтерия

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

Партнеры МСД

Контакты для заказов оборудования:

Внимание! На этом сайте большинство материалов - техническая литература в помощь предпринимателю. Так же большинство производственного оборудования сегодня не актуально. Уточнить можно по почте: Эл. почта: msd@msd.com.ua

+38 050 512 1194 Александр
- телефон для консультаций и заказов спец.оборудования, дробилок, уловителей, дражираторов, гереторных насосов и инженерных решений.