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

Вниз

Помогите разобраться с COM портом!   Найти похожие ветки 

 
varfolomey   (2004-01-25 21:38) [0]

Дело в том что мне надо проверять чётность.

......
 {Open port}
 FPort := CreateFile(PChar(PortName),
   GENERIC_READ or GENERIC_WRITE, 0, nil,
   OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);

 if FPort = INVALID_HANDLE_VALUE then
   raise EComPortError.Create("Error opening port " + PortName);

 try
   {Set port state}
   if not GetCommState(FPort, Dcb) then
     raise EComPortError.Create("Error setting port " + PortName + " state");

   Dcb.BaudRate := DWORD(BaudRate);
   Dcb.Parity := MARKPARITY;
   Dcb.ByteSize := 8;
   Dcb.StopBits := ONESTOPBIT;

   if not SetCommState(FPort, Dcb) then
     raise EComPortError.Create("Error setting port " + PortName + " state");

   {Purge port}
   if not PurgeComm(FPort, PURGE_TXCLEAR or PURGE_RXCLEAR) then
     raise EComPortError.Create("Error purging port " + PortName);

   {Set mask}
   if not SetCommMask(FPort, (EV_RXCHAR or EV_ERR) ) then
     raise EComPortError.Create("Error setting port " + PortName + " mask");

..........

 while not Terminated do
 begin
   dwMask := EV_RXCHAR or EV_ERR;
   if not WaitCommEvent(FComPort.FPort, dwMask, @FOverRead) then
   begin
     if GetLastError = ERROR_IO_PENDING then
       WaitForSingleObject(FOverRead.hEvent, INFINITE)
     else
       raise EComPortError.Create("Error waiting port " + FComPort.PortName
         + " event");
   end;

   if not ClearCommError(FComPort.FPort, dwError, @ComStat) then
     raise EComPortError.Create("Error clearing port " + FComPort.PortName);

   if dwError = CE_RXPARITY then
     Ferst := 1
   else
     Ferst := 0;

   FRead := ComStat.cbInQue;

   if FRead > 0 then
   begin
     if not ReadFile(FComPort.FPort, Data, 1, FRead, @FOverRead) then
       raise EComPortError.Create("Error reading port " + FComPort.PortName);

     Synchronize(DoRead);
   end;
 end; {while}

Дело в том что когда я принимаю данные, то программа принимает
2-4 символа из 10 и сотанавливается на WaitForSingleObject и ждёт следующей порции данных. В следующий раз программа получает те данные которые не были получины в прошлой передаче. Подскажите ПЛЗ что не правильно???


 
tesseract ©   (2004-01-26 09:31) [1]

забавно - что-то не видно указателя на overlapped - файл создаётся как отложенный,  а ссылка нулевая



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

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

Наверх




Память: 0.47 MB
Время: 0.023 c
3-1078739618
Rustamus
2004-03-08 12:53
2004.04.04
Реализация БД


3-1078912232
mixam
2004-03-10 12:50
2004.04.04
BDE


6-1074675048
Behemoth
2004-01-21 11:50
2004.04.04
IdTCPServer - Где лежат IP-адреса клиентов?


6-1075289378
Zelius
2004-01-28 14:29
2004.04.04
Глюк в инди при работе с потоками?


3-1078930088
Келд
2004-03-10 17:48
2004.04.04
FreeUDFLib