C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как реализовать?, спецы АУ! сom или нет?
Лена
Отправлено: 14.03.2006, 22:32


Мастер участка

Группа: Участник
Сообщений: 501



Подскажите, в каком направлении двигаться, чтобы реализовать следующее:
Есть простая электрическая сеть с ключом. Ключ схемы закрыт — сеть замкнута, ключ открыт, цепь разомкнута (вкл/вкл). Короче это такой маленький электрический стенд. Надо реализовать программу следующим образом: если цепь замкнута, на моей форме я вижу зеленый сигнал, цепь разомкнута красный. Насколько я понимаю надо сигнал этой цепи принимать каким-то образом через com порт компьютера, и выводит его состояние на главной форме программы. С чего начать и какие компоненты использовать для решения этой задачи? Как эту цепь присоединить к com порту?
Грубо говоря это датчик двери — дверь открыта сигнал красный, дверь закрыта сигнал зеленый на форме.

Asher
Отправлено: 15.03.2006, 09:43


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
Com-порт работает с сигналами уровней до -12+12В.
Устойчиво начинает работать с -5 до -12 для "1" и от +5 до +12 для "0".
С напряжением 0-5В работать не будет.
Уточни сможет ли датчик (или его схема сопряжения) выдавать требуемые уровни.
Если да, то продолжим.

Отредактировано Asher — 15/03/2006, 10:45
Лена
Отправлено: 15.03.2006, 13:43


Мастер участка

Группа: Участник
Сообщений: 501



>Уточни сможет ли датчик (или его схема сопряжения) выдавать требуемые уровни.

Сможет, сможет. smile.gif
Схему с датчиком соберет специалист по электричеству и обеспечит мои требования по напряжению.
Вот, например готовая схема на столе перед компьютером будет, чего с ней дальше то делать? Как ее в com порт интегрировать. Может надо дополнительное какое-то переходное устройство?

Asher
Отправлено: 15.03.2006, 15:58


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
Дискретный сигнал можно завести через выводы CTS(8), DSR(6), DCD(1), RI(9) (в скобках указаны номера контактов разъема Com-порта компьютера)
Шнур надо сделать, чтобы завести сигнал от датчика на любой из этих входов.
Если датчик простейший, типа размыкателя и потребляет немного(не более 20мА) или вообще не потребляет, то можно и запитать его от одного из выходов Tx(3), DTR(4) или RTS(7)
Некоторые ПК 20мА не тянут, здесь надо проверять.

P.S. Вечером из программы кода надергаю. Если никто не ответит — утром выложу
P.P.S. компонентны никакие не нужны. все на WinAPI. Опрашивать будем по таймеру или нужно мгновенно реагировать? Тогда придется делать поток.
Лена
Отправлено: 15.03.2006, 18:10


Мастер участка

Группа: Участник
Сообщений: 501



Спасибо, Asher!

>Опрашивать будем по таймеру или нужно мгновенно реагировать?

Дверь открылась подать сигнал.

Однако я так поняла задачка не простая. smile.gif
Надо начать с покупки книги по API. smile.gif

Если можно пример работы такого устройства на email: lenailicheva[sobaka].yandex.ru

Буду разбираться с ним.

Grigoriy
Отправлено: 15.03.2006, 21:07


Мастер участка

Группа: Участник
Сообщений: 381



А заменить стандартную функцию обработки прерывания от com порта на свою функцию, в которой бы вызывалась и стандартная можно ?
Rius
Отправлено: 16.03.2006, 07:09


Мастер участка

Группа: Участник
Сообщений: 321



задача элементарно и универсально решается микроконтроллером с UART и схемой обвязки и сопряжения, хотя затраты будут поболее
Asher
Отправлено: 16.03.2006, 09:56


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
C голым герконовым размыкателям, который обычно ставится на дверь/окно задача решается вообще без контроллера. Только непонятно что лучше — поставить контроллер или оставлять ПК на всю ночь работать. wink.gif
Теперь обещанный код.
Там две функции: Open и Close. Прием передачу оторвал.
На вид он кажется громоздким, но это из-за проверок и практически полной инициализации. В данном конкретном случае без многих вещей можно было бы обойтись, но жалко портить. Вдруг когда нибудь и обмен потребуется. wink.gif

User Attached Image Скачать файл
PortCom.zip


Asher
Отправлено: 16.03.2006, 10:05


Мастер участка

Группа: Модератор
Сообщений: 550



Продолжение.
Пользоваться так
CODE

M_PortCom::MSTPortParam mParam_;//Параметры порта
mParam_.sName_ = "Com1";       //Указать имя порта
M_PortCom::Open(&mParam);     //Открыть порт
M_PortCom::Close(&mParam);     //Закрыть порт

Скорость и другие настройки нигде не выставляются, т.к. в данном конкретном случае не нужны.
Опрашивать состояние по-простому можно в обработчике таймера.
(Пока можно сделать так для простоты и отладки, и когда все будет работать, переписать на поток для мгновенной реакции)
Код опроса выглятит так (для сигнала DSR)
CODE

DWORD dwModemStatus_;
if(!::GetCommModemStatus(mParam->hPort_, &dwModemStatus_)){
  //ToDo: Error in GetCommModemStatus;
}
bool bRes = MS_DSR_ON & dwModemStatus_;

Экспериментируй.
Как заработает пойдем дальше. biggrin.gif
Лена
Отправлено: 16.03.2006, 11:33


Мастер участка

Группа: Участник
Сообщений: 501



Большое спасибо Asher!
Буду разбираться. smile.gif
Asher
Отправлено: 16.03.2006, 11:40


Мастер участка

Группа: Модератор
Сообщений: 550



Для начала еще можно после открытия взвести DTR
CODE
::EscapeCommFunction(mParam.hPort_, SETDTR);

И втыкать/вытыкать проволочку между выводами DTR(4) и DSR(6) модемного шнура biggrin.gif biggrin.gif biggrin.gif для эмуляции схемы.

P.S. По коду в форуме надо исправить mParam->hPort_ на mParam.hPort_

Отредактировано Asher — 16/03/2006, 12:41
** Harold
Отправлено: 16.03.2006, 20:14


Не зарегистрирован







Еще надо помнить, что небезопасно (для "здоровья" компа) подключать датчики непосредственно к порту (особенно длинными проводами). Гальваническая развязка не помешает. Лучше действительно поставить контроллер какой-нибудь с гальванической развязкой. А уж если к нему и "дровишки" под BCB имеются — тогда и безопасно и просто с точки зрения программирования. Из опыта — "железки" под описанный вариант ~150USD. Подключается к USB, "дровишки" под BCB имеет, будешь иметь правда не один, а 12 входов. wink.gif). Сайт производителя Сайт производителя.
Купить эти "железки" в Москве можно...
Konstantine
Отправлено: 17.03.2006, 11:03


Мастер участка

Группа: Модератор
Сообщений: 545



а зачем COM?
для этой цели LPT есть... я на форуме даж кидал код проги для работы с ним с 2k/XP там вроде без никаких электронных примочек 12 проводов на выход есть — вот его-то и используйте... датчики — на входы — опять-таки простейше если заинтересует — могу пообщаться — помочь — стучитесь в асю

Вернуться в Вопросы программирования в C++Builder