Sériové rozhraní v Delphi (1. díl) - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



Delphi

Sériové rozhraní v Delphi (1. díl)

seriovy port

20. listopadu 2001, 00.00 | Tímto článkem začínáme nový seriál o využítí sériového rozhraní v Delphi. V dnešním díle si popíšeme, co to je sériové rozhraní a jak můžeme k němu v Delphi přistupovat.

Sériové rozhraní
Pomocí tohoto rozhraní se počítač propojuje s ostatními periferiemi - může to být modem, jiný počítač, měřící přístroj, myš atd. Sériové se jmenuje proto, že posílá data bit po bitu narozdíl od paralelního, kde se posílá zárověň více bitů (většinou osm). Výhodou sériového rozhraní je, že ke komunikaci s periferiemi většinou potřebuje jen 3 vodiče (příjmaná a vysílaná data, zem). Dnešní počítače mají většinou 2 sériová rozhraní - COM 1 a COM 2. COM 1 má obvykle devítikolíkový konektor a COM 2 pětadvacetikolíkový (ovšem většina ATX-ových desky má oba konektory devítikolíkové).

Zapojení konektoru
9-kolíkový konektor 25-kolíkový konektor Označení I/O
1 8 DCD - Detektor příjmaného signálu Vstup
2 3 RxD - Příjmaná data Vstup
3 2 TxD - Vysílaná data Výstup
4 20 DTR - Pohotovost terminálu Výstup
5 7 GND - Zem ---
6 6 DSR - Pohotovost vysílače Vstup
7 4 RTS - Výzva k vysílání Výstup
8 5 CTS - Pohotovost k vysílání Vstup
9 22 RI - Indikátor volání Vstup
Zdroj: Minasi Mark: PC - Velký průvodce hardwarem. Praha, Grada publishing 1996

Po shlédnutí této nudné, ale velice důležité tabulky, si možná řeknete, že vám lžu. V předchozím odstavci jsem psal, že sériové rozhraní má jeden vstup a výstup. V tabulce je však uvedeno 5 vstupů a 3 výstupy. Ostatní vstupy a výstupy slouží k "dorozumívání a domlouvání" komunikace, ne k vlastní komunikaci. Dále se můžete divit podivným názvům jednotlivých vstupů a výstupů. Sériové rozhraní totiž dříve sloužilo hlavně pro komunikaci s modemem a názvy přetrvaly až doposud. Na co jsou ostatní vstupy a výstupy se dozvíme později až s nimi budeme pracovat. Ale teď už pryč od šedé teorie a hurá na praktické využití.

Přístup v Delphi
K sériovému rozhraní se dá přistupovat i bez pomocných komponent, přes API funkce. Je to však příliš složité. Po všech možných testech různých komponent přistupujících k sériovému portu jsem se rozhodl používat freewarový balíček Varian Async32. Pracuje pod 32-bitovými Delphi a C++ Buildrem 4. S těmito komponentami budu pracovat v celém serálu. Zde (0,5 Mb) si můžete stáhnout verzi 1.82. Po nainstalování (vše jde hladce, přečtete si install.txt) se můžeme pustit do práce.

První program
  1. vytvořte nový projekt, ze záložky VarianAsync32 zvolte komponentu VaComm a umistěte ji do nového Formu
  2. označte ji a v Object Inspectoru v Properties přepište hodnotu 0 v položce PortNum na číslo vašeho volného portu (v COM1 bývá myš nebo modem - pozor na to), já mám myš v PS/2, takže mám oba porty volné, tak zvolím číslo 1; tímto jsme vybrali port, na který budeme přistupovat
  3. změňte v položce AutoOpen False na True, po této úpravě se port otevře ihned po spuštění programu
  4. nyní program spusťte, pokud je vše v pořádku program se spustí a uvidíte prázný Form. Proběhne událost OnOpen (zkuste vložit do této události Beep;), když je port obsazen program vyhodí chybu EVaCommError Can't open device COM... a zavře se
Tuto událost můžeme ošetřit takto:
  1. Stav AutoOpen změníme na původní False
  2. do části v interface uses (deklarace používaných jednotek), vložíme unitu VaTypes
  3. do privátních deklarací vložíme
    private
      { Private declarations }
      procedure HandleException(Sender: TObject; E: Exception);

    a do části pod implementation
    procedure Tform1.HandleException(Sender: TObject; E: Exception);
    begin
      if E is EVaCommError then
        with E as EVaCommError do
          ShowMessage(Message); //chyba osetrena, vypsani zpravy
    end;
  4. vytvoříme událost OnCreate
    procedure TForm1.FormCreate(Sender: TObject);
    begin
       Application.OnException := HandleException; 
       //pri chybe volej proceduru HandleException
       VaComm1.Open; //otevreni portu
    end;
    
  5. po spuštění se při chybě vypíše hlášení a program pokračuje, neukončuje se
Porty se nemusí zavírat - zavřou se po skončení programu, ale pro perfekcionisty mám dobrou zprávu: jde zavřít v programu takto:
VaComm1.Close; //zavře příslušný port
Ovšem má to i jinou výhodu, když chceme port zavřít a vybrat jiný port:
VaComm1.Close; //zavře příslušný port - COM1
VaComm1.PortNum:=2; //nastavení čísla nového portu COM2
VaComm1.Open; //otevření tohoto portu (COM2).
Ošetření obsazení portu a zavření a otevření portu je možno stáhnout zde (6 kB) jako projekt v Delphi.
To je pro dnešek vše a na příště (budeme pokračovat s komponentou VaComm) si pro vás vymyslím něco těžšího.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Delphi  

 » Rubriky  » Windows  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: