-
Господа программисты. Как и при помощи чего можно считать информацию с ком порта автоматически (т.е. не по кнопке, а именно по приходу информации в порт). Задача в следующем. Имеется 2 компа соединенных через ком порты. Требуется сделать так, что бы по приходу 1 пакета информации в порт, принимающая сторона тутже выдала квитанцию о принятии.
На данный момент все происходит по кнопке "принять", "отправить" и естественно ни о какой квитанции речи быть не может..
-
> Как и при помощи чего можно считать информацию с ком порта > автоматически
> На данный момент все происходит по кнопке "принять"
А как именно?
-
Как именно принимаю:
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;
А что требуется, вроде понятно описал.. или нет?
-
> Read_Device
Не знаю такую функцию WinAPI.
> А что требуется, вроде понятно описал
Понятно.
-
> Denis_kas (21.11.10 14:27)
Варианты: 1) Изучить работу с портами через Windows API - в чем помогут книга Павла Агурова "Последовательные интерфейсы ПК. Практика программирования" или статьи по теме на различных сайтах + MSDN (функции SetCommMask, WaitCommEvent, ReadFile и еще приличный список функций) 2) Установить какой-либо нормальный компонент работы с портом и изучить работу с ним
Первое даст больше в личном плане для дальнейшей работы под Windows и не только с портом.
-
Последовательный порт извещает систему об изменениях своего состояния. Если самому писать всё взаимодействие с портом, то появление данных в порту поможет обнаружить функция WaitCommEvent с EV_RXCHAR в маске.
Есть так же море готовых компонентов, у которых обычно есть событие вроде OnRXChar (например, ComPort автора Dejan Crnila)
-
Открывать порт в отдельном потоке в OVERLAPPED режиме и ставить маску EV_RXCHAR или просто считывать по байту в GetOverlappedResult.
|