![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
автоматическое считывание с com порта
Denis_kas © (2010-11-21 14:27:00)Господа программисты. Как и при помощи чего можно считать информацию с ком порта автоматически (т.е. не по кнопке, а именно по приходу информации в порт).
Задача в следующем.
Имеется 2 компа соединенных через ком порты. Требуется сделать так, что бы по приходу 1 пакета информации в порт, принимающая сторона тутже выдала квитанцию о принятии.
На данный момент все происходит по кнопке "принять", "отправить" и естественно ни о какой квитанции речи быть не может..
tesseract (2010-11-25 11:30:00) [1]Открывать порт в отдельном потоке в OVERLAPPED режиме и ставить маску EV_RXCHAR или просто считывать по байту в GetOverlappedResult.
Вариант (2010-11-22 05:44:00) [2]
> Denis_kas (21.11.10 14:27)
Варианты:
1)
Изучить работу с портами через Windows API - в чем помогут книга Павла Агурова
"Последовательные интерфейсы ПК. Практика программирования"
или статьи по теме на различных сайтах + MSDN (функции SetCommMask, WaitCommEvent, ReadFile и еще приличный список функций)
2)
Установить какой-либо нормальный компонент работы с портом и изучить работу с ним
Первое даст больше в личном плане для дальнейшей работы под Windows и не только с портом.
MBo (2010-11-22 05:44:00) [3]Последовательный порт извещает систему об изменениях своего состояния.
Если самому писать всё взаимодействие с портом, то появление данных в порту поможет обнаружить функция WaitCommEvent с EV_RXCHAR в маске.
Есть так же море готовых компонентов, у которых обычно есть событие вроде OnRXChar (например, ComPort автора Dejan Crnila)
Германн (2010-11-21 15:24:00) [4]
> Read_Device
Не знаю такую функцию WinAPI.
> А что требуется, вроде понятно описал
Понятно.
Denis_kas (2010-11-21 15:22:00) [5]Как именно принимаю:
procedure Tmain.Button3Click(Sender: TObject);
var
...
begin
...
result := Read_Device(hCOM, o, Length(Input_Buffer), Input_Buffer);
if (result <> 0) then begin
Application.MessageBox('Ошибка чтения порта', 'Ошибка', MB_OK);
end;
...
end;
А что требуется, вроде понятно описал.. или нет?
Германн (2010-11-21 15:18:00) [6]
> Как и при помощи чего можно считать информацию с ком порта
> автоматически
> На данный момент все происходит по кнопке "принять"
А как именно?