Лена |
Отправлено: 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
|
>Уточни сможет ли датчик (или его схема сопряжения) выдавать требуемые уровни.
Сможет, сможет.
Схему с датчиком соберет специалист по электричеству и обеспечит мои требования по напряжению.
Вот, например готовая схема на столе перед компьютером будет, чего с ней дальше то делать? Как ее в 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!
>Опрашивать будем по таймеру или нужно мгновенно реагировать?
Дверь открылась подать сигнал.
Однако я так поняла задачка не простая.
Надо начать с покупки книги по API.
Если можно пример работы такого устройства на 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 голым герконовым размыкателям, который обычно ставится на дверь/окно задача решается вообще без контроллера. Только непонятно что лучше — поставить контроллер или оставлять ПК на всю ночь работать.
Теперь обещанный код.
Там две функции: Open и Close. Прием передачу оторвал.
На вид он кажется громоздким, но это из-за проверок и практически полной инициализации. В данном конкретном случае без многих вещей можно было бы обойтись, но жалко портить. Вдруг когда нибудь и обмен потребуется.
|
|
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_;
|
Экспериментируй.
Как заработает пойдем дальше.
|
|
Лена |
Отправлено: 16.03.2006, 11:33 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
Большое спасибо Asher!
Буду разбираться. |
|
Asher |
Отправлено: 16.03.2006, 11:40 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Для начала еще можно после открытия взвести DTR
CODE | ::EscapeCommFunction(mParam.hPort_, SETDTR); |
И втыкать/вытыкать проволочку между выводами DTR(4) и DSR(6) модемного шнура для эмуляции схемы.
P.S. По коду в форуме надо исправить mParam->hPort_ на mParam.hPort_
Отредактировано Asher — 16/03/2006, 12:41
|
|
** Harold |
Отправлено: 16.03.2006, 20:14 |
|
Не зарегистрирован
|
Еще надо помнить, что небезопасно (для "здоровья" компа) подключать датчики непосредственно к порту (особенно длинными проводами). Гальваническая развязка не помешает. Лучше действительно поставить контроллер какой-нибудь с гальванической развязкой. А уж если к нему и "дровишки" под BCB имеются — тогда и безопасно и просто с точки зрения программирования. Из опыта — "железки" под описанный вариант ~150USD. Подключается к USB, "дровишки" под BCB имеет, будешь иметь правда не один, а 12 входов. ). Сайт производителя Сайт производителя.
Купить эти "железки" в Москве можно... |
|
Konstantine |
Отправлено: 17.03.2006, 11:03 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
а зачем COM?
для этой цели LPT есть... я на форуме даж кидал код проги для работы с ним с 2k/XP там вроде без никаких электронных примочек 12 проводов на выход есть — вот его-то и используйте... датчики — на входы — опять-таки простейше если заинтересует — могу пообщаться — помочь — стучитесь в асю
|
|