kika pytań o komunikację rs232 WinApi

0

Witam...
Czy może ktoś mi wytłumaczyć do czego służy instrukcja:
WaitCommEvent(hCommDev, fdwEvtMask, Nil);

w przykładach z książki jest ona używana po komendzie TransmitCommChar(hCommdev, chr(b)); chciałbym wiedzieć do czego ta komenda służy.

Nie wiem też o co chodzi podczas otwarcia/konfiguracji portu ( powstawiałem plusy co rozumiem a czego nierozumię - znaki zapytania):

 
+procedure TForm1.open_com;
+begin
+LpFileName:=PChar('Com2');
+ hCommDev:= CreateFile(lpFileName, GENERIC_READ or GENERIC_WRITE, 0,
+                         NIL, OPEN_EXISTING, 0, 0);

+  if (hCommDev <> INVALID_HANDLE_VALUE) then
+    begin
+      OtwartyCom:=True;
?     dcb.DCBlength := sizeof(dcb);
+      GetCommState(hCommDev, dcb);
+         dcb.BaudRate := CBR_4800;
+         dcb.Parity := EVENPARITY;
+         dcb.StopBits := TWOSTOPBITS;
+         dcb.ByteSize := 8;

      // -- przykładowe ustawienia flag sterujących DCB --

+       dcb.Flags := dcb_fParity AND DTR_CONTROL_HANDSHAKE ;
+         SetCommState(hCommDev, dcb);
?         GetCommMask(hCommDev, fdwEvtMask);
?         SetCommMask(hCommDev, EV_TXEMPTY);
+    end
+      else
+            ShowMessage('Błąd podczas otwierania portu '+ComPort);
+end;

Proszę o wytłumaczenie... bo chyba te dwa pytania są mocno ze sobą powiązane...

0

Acha! jeszcze jedno ważne pytanie, na które w książce RS232C-praktyczne programowanie nie znalazłem odpowiedzi... Co trzeba zrobić, żeby procedura (zdarzenie) pyła wykonywana po odebraniu danej tak jak ma to miejsce w komponentach do obsługi rs232? Ja co jakiś czas w głównej pętli programu sprawdzam czy bufor odbiorczy nie jest pusty ale to mi się nie podoba i wolałbym napisać procedurkę, która automatycznie będzie wykonywana po odebraniu danej.

0

WaitCommEvent

dcb.DCBlength := sizeof(dcb);
to jest akurat dość popularne - w DCBLength jest pamiętany rozmiar struktóry, ale nie jest ona tam wpisywany automatycznie tylko trzeba go wpisać ręcznie

GetCommMask

SetCommMask

0

A jesli chodzi o zdarzenie to - niestety - nie ma bezposrednio takiej mozliwosci (o ile dobrze pamietam). Najlepiej jest to zrobic na osobnym watku ktory bedzie sprawdzal, czy cos jest w buforze i wywolywal zadana procke jesli bedzie...
Jesli chcesz wiecej info o watkach to poczytaj w helpie Delphi w temacie o TThread...

ps. sa gotowe komponenty do obslugi rs. Ja kiedys korzystalem z czegos o nazwie TComPort (lub jakos tak). W sieci troche tego jest...

1 użytkowników online, w tym zalogowanych: 0, gości: 1