Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.09.06;
Скачать: CL | DM;

Вниз

Определить замыкание 2х ножек com порта   Найти похожие ветки 

 
DelphiN!   (2009-07-02 13:53) [0]

Доброго времени суток!
Подскажите как определить замкнуты ли скажем 1ая и 5ая ножки com порта или нет?


 
matt ©   (2009-07-02 14:10) [1]

тестером?


 
DelphiN!   (2009-07-02 14:14) [2]


> matt ©   (02.07.09 14:10) [1]


из программы?
В порт воткнута кнопка, которая замыкает 2 ножки. Как определить из моей программы, нажата кнопка или нет?


 
Юрий Зотов ©   (2009-07-02 14:15) [3]

Читать порт?


 
tesseract ©   (2009-07-02 14:15) [4]

Програмно можно определить только замыкание DTR/CTS . И вроде Ring.


 
orinoko   (2009-07-02 14:21) [5]

программно ещё можно определить замыкание RxD/TxD. послать чтото в порт. если приняли это "чтото" - значит кнопка замкнута


 
DelphiN!   (2009-07-02 14:23) [6]


> orinoko   (02.07.09 14:21) [5]
> программно ещё можно определить замыкание RxD/TxD. послать
> чтото в порт. если приняли это "чтото" - значит кнопка замкнута


Не поможете простейшим примером?


 
Вариант   (2009-07-02 14:23) [7]


> DelphiN!   (02.07.09 14:14) [2]

Только не 1 и 5.

для  9 - pin можно использовать  пары CTS <->RTS (7 и 8) или DTR <-> DSR (4 и 6) или другие комбинации вход выход.

Открыть COM порт (см. CreateFile), установить сигнал на выходном контакте в выскоий уровень (см. EscapeCommFunction), читаем состояние входного контакта (см. GetCommModemStatus).


> orinoko   (02.07.09 14:21) [5]


Это сложней реализовать программно..


 
orinoko   (2009-07-02 14:48) [8]


> Не поможете простейшим примером?

Да возьмите любой компонент, если лень разбираться с CreateFile/Write/Read. Послать набор символов. И по событию получить строку и сравнить с посланной. Если ничего нет в течение некоторого времени, то кнопка разомкнута.


 
DelphiN!   (2009-07-02 14:54) [9]


> Вариант   (02.07.09 14:23) [7]


Замкнул 4ый и 8ой контакты(CTS/DTR), сделал следующее :


Var
 FHandle: Thandle;
 st: DWord;
begin
 {Открыть COM порт (см. CreateFile)}
 FHandle := CreateFile(PChar("com1"),
 GENERIC_READ + GENERIC_WRITE,
 0,
 nil,
 OPEN_EXISTING,
 FILE_ATTRIBUTE_NORMAL,
 0);
 if FHandle = INVALID_HANDLE_VALUE then
   ShowMessage("Can not open " + "Com1" + ": " + IntToStr(GetLastError));

{установить сигнал на выходном контакте в выскоий уровень (см. EscapeCommFunction)}

EscapeCommFunction(FHandle,SETDTR);

{читаем состояние входного контакта (см. GetCommModemStatus)}
if GetCommModemStatus(FHandle,st) then
begin
  if st and MS_CTS_ON <> 0 then
     ShowMessage("CTS - включен")
  else
    ShowMessage("CTS - выключен");
end;
ShowMessage("Значение в ST: "+IntToStr(st));//inttostr(dcb.BaudRate));
CloseHandle(FHandle);


Однако функция GetCommModemStatus возвращает в st 0 если контакты замкнуты или не замкнуты. Где я ошибся?


 
Вариант   (2009-07-02 15:23) [10]


> DelphiN!   (02.07.09 14:54) [9]


не проверил на ошибку EscapeCommFunction, и не проверил на ошибку GetCommModemStatus(есть только успешный ее вариант). в случае ошибки ее st не определен. Я сделал то же самое, единственно с RTS сигналом (7-8) -  все нормально. Но, я просто замыкал перемычкой (разъем заглушка). При работе с кнопкой надо учитывать дребезг контактов. Например давать Sleep(100) перед чтением состояния модема. Сперва отладь программу на перемычке без кнопки.


 
Вариант   (2009-07-02 15:24) [11]


> Вариант   (02.07.09 15:23) [10]
> Например давать Sleep(100) перед чтением состояния модема.
>

Надо читать несколько раз и перед повторным чтением делать паузу.


 
DelphiN!   (2009-07-02 15:35) [12]


> Вариант   (02.07.09 15:23) [10]


Спасибо, заработало, перепутал контакты ... )


 
KilkennyCat ©   (2009-07-05 19:41) [13]

Вообще-то, кнопки есть на порту джойстика. причем, они там именно кнопки. изначально. с рождения. минимум две.


 
Германн ©   (2009-07-06 00:55) [14]


> KilkennyCat ©   (05.07.09 19:41) [13]
>
> Вообще-то, кнопки есть на порту джойстика. причем, они там
> именно кнопки. изначально. с рождения. минимум две.
>

Не у всех нынче есть порт джойстика.
(Это во-первых :).


 
KilkennyCat ©   (2009-07-06 01:59) [15]


> Германн © (06.07.09 00:55) [14]


Тогда, во-вторых, надо паять контроллер, который нажатия кнопок передаст как данные, а не вешать опять лампочки на лпт. Тем более, что на какой-нить аврке это в пять сек и затрат, если не считать труда и корпус - рублей 60-100.


 
Германн ©   (2009-07-06 02:12) [16]


> KilkennyCat ©   (06.07.09 01:59) [15]
>
>
> > Германн © (06.07.09 00:55) [14]
>

Это ты не мне. Это ты автору скажи.
:)


 
KilkennyCat ©   (2009-07-06 02:15) [17]

а зря джойстиковый порт убрали. готовый девайс для кнопок и переменных резисторов.


 
Anatoly Podgoretsky ©   (2009-07-06 09:24) [18]

> KilkennyCat  (06.07.2009 02:15:17)  [17]

Народ им не пользовался.


 
Fredy314 ©   (2009-07-09 14:49) [19]

А лампочки на ЛПТ это прикольно, надо попробовать пока ЛПТ не отменили, а-то гейм порт уже не ставят на материнках, видеокарты тоже интекрированые через раз, скоро и КОМ с ЛПТ перестанут выпускать


 
Anatoly Podgoretsky ©   (2009-07-09 15:27) [20]

> Fredy314  (09.07.2009 14:49:19)  [19]

Так в современных компьютерах, по спецификации PC99 в компьютрере не должно быть COM и LPT портов, и такие компьютеры есть.


 
brother ©   (2009-07-10 04:35) [21]

> в компьютрере не должно быть COM и LPT портов, и такие компьютеры
> есть.

причем не мало уже...



Страницы: 1 вся ветка

Текущий архив: 2009.09.06;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.014 c
15-1246624006
Бисовецкий Андрей
2009-07-03 16:26
2009.09.06
Помогите найти правильное решение баз данных. ПОМОГИТЕ СРОЧНО!!


15-1246865770
dzmitry[li]
2009-07-06 11:36
2009.09.06
TDateTime = 40000


15-1246528418
DelphiN!
2009-07-02 13:53
2009.09.06
Определить замыкание 2х ножек com порта


2-1246683083
shamans
2009-07-04 08:51
2009.09.06
Как получить бит числа?


15-1245787291
Игорь Шевченко
2009-06-24 00:01
2009.09.06
Дядя Юра, с днем рождения!