Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2009, 15:02   #1
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
Радость ИК-приёмник и COM порт

Всем привет! У меня возникла проблемка с чтением данных из COM порта. Я спаял ИК- приёмник и подключил его к COM порту. Проверил его различными программами, всё работает и принимает сигнал с пульта. Я пытаюсь прочитать с него сигнал через Delphi, но никаких признаков сигнала нету. ИК- приёмник подключён к COM1. Я пытался прочитать сигнал так:
Код:
var
hCom,Errors,Bytes:Cardinal;
DCB:TDCB;
TheStruct:TCOMSTAT;
buffer:string;
procedure TForm1.FormCreate(Sender: TObject);
Begin
hCom:=CreateFile('COM1',GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if hCom=INVALID_HANDLE_VALUE then begin
exit;
end;
SetupComm(hCom,1600,1600);
GetCommState(hCom,DCB);
with DCB do
begin
BaudRate:=115200;
ByteSize:=8;
Parity:=NoParity;
StopBits:=OneStopBit;
end;
if not SetCommState(hCom,DCB) then
begin
CloseHandle(hCom);
exit;
end;
End;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
ClearCommError(hCom,Errors,@TheStruct);
if TheStruct.cbInQue>0 then
begin //что-то пришло
SetLength(buffer,TheStruct.cbInQue);
ReadFile(hCom,buffer[1],TheStruct.cbInQue,Bytes,nil);
SetLength(buffer,Bytes);
//прочитано: buffer
Label1.Caption:=buffer;
end;
end;
Подскажите, пожалуйста, как правильно прочитать сигнал с пульта?
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 31.07.2009, 16:43   #2
ov_lab
Пользователь
 
Регистрация: 24.07.2009
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Terran Посмотреть сообщение
Я пытался прочитать сигнал так:
Код:
var
hCom,Errors,Bytes:Cardinal;
procedure TForm1.FormCreate(Sender: TObject);
Begin
End;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
ClearCommError(hCom,Errors,@TheStruct);
if TheStruct.cbInQue>0 then
begin //что-то пришло
SetLength(buffer,TheStruct.cbInQue);
ReadFile(hCom,buffer[1],TheStruct.cbInQue,Bytes,nil);
SetLength(buffer,Bytes);
//прочитано: buffer
Label1.Caption:=buffer;
end;
end;
Подскажите, пожалуйста, как правильно прочитать сигнал с пульта?
Локальная переменная hCom недоступна в процедуре TForm1.Timer1Timer.
hCom надо сделать глобальной!
ov_lab вне форума Ответить с цитированием
Старый 31.07.2009, 16:50   #3
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Локальная переменная hCom недоступна в процедуре TForm1.Timer1Timer.
hCom надо сделать глобальной!
Я её вынес из процедуры
Код:
procedure TForm1.FormCreate(Sender: TObject);
Пробовал просто её объявлять и так:
Код:
var
  Form1: TForm1;
  hCom,Errors,Bytes:Cardinal;
Результат один и тот же. Переменная hCom у меня имеет значение 1880.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 31.07.2009, 17:23   #4
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

А какими программами проверял? Напрямую с компорта читал каким-нибудь COM Port Toolkit?
Black Fregat вне форума Ответить с цитированием
Старый 31.07.2009, 17:53   #5
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
А какими программами проверял?
WinLIRC, SlyControl.
Я скачал вашу программку и попробовал в ней что-нибудь сделать. При захвате и просмотре никакие данные не отображаются, только в правом нижнем углу при нажатии на кнопку начинает мигать зелёное окошко с надписью DCD - высокий. Я заметил, что оно мигает по разному, в зависимости от нажатой кнопки.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 31.07.2009, 18:47   #6
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Я тут посмотрел и пришёл к выводу, что нужно читать данные с DCD устройства через COM порт. Может кто-нибудь знает как их считать?
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 31.07.2009, 19:33   #7
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Всё, разобрался с этой проблемой. С DCD входа сигнал можно считать так:
Код:
Procedure TForm1.Timer1Timer(Sender: TObject);
Var
ModemStat: Cardinal;
Begin
GetCommModemStatus(HCom,ModemStat);
If (ModemStat And MS_RLSD_ON) <> 0 Then
Begin
Label1.Caption:='1';
End
Else
Begin
Label1.Caption:='0';
End;
End;
Может кому-то пригодится.
Спасибо всем, кто откликнулся!
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 30.11.2009, 03:39   #8
SemCold
 
Регистрация: 29.11.2009
Сообщений: 4
По умолчанию

спс за код.
Terran
привет, слушай, помоги пожалуйста с др. кодом, я спаял ик-приемо-передатчик, с помощью winlirk проверил, все работает, нужна срочно своя программа, очень простая, чтобы в окошке показывался код входящего сигнала, и чтобы этот сигнал можно было запомнить и отправить через передатчик. На счет приёма попробую твой код, но как с передачей этого сигнала быть не знаю (((

Последний раз редактировалось SemCold; 30.11.2009 в 03:49.
SemCold вне форума Ответить с цитированием
Старый 30.11.2009, 08:19   #9
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

А почему не хотим готовый компонент ком порта использовать!?
SERG1980 вне форума Ответить с цитированием
Старый 30.11.2009, 23:57   #10
SemCold
 
Регистрация: 29.11.2009
Сообщений: 4
По умолчанию

что за компонент?
SemCold вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LPT ПОРТ master3763 Общие вопросы C/C++ 7 11.08.2009 10:32
COM-порт daunito Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 15.01.2009 18:50
COM порт SanekIrk Win Api 2 28.12.2008 06:20
COM порт и инфрокраснк gusluk Общие вопросы Delphi 6 01.12.2008 07:07
порт ps/2 _Dmitry Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 01.10.2007 21:28