Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Вниз

Помогите разобраться с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.039 c
1-1079522596
zolg
2004-03-17 14:23
2004.04.04
Packages и иже с ним...


1-1079594264
Infom
2004-03-18 10:17
2004.04.04
dxTreeList


3-1078231598
Rule
2004-03-02 15:46
2004.04.04
Опять я и опять пробеммы с Мидасом


3-1078859648
Anarki
2004-03-09 22:14
2004.04.04
Где в ADODataSet задать имя таблицы?


14-1078671299
ИМХО
2004-03-07 17:54
2004.04.04
По поводу Интернета как такового





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский