Sériové rozhraní v Delphi (2. 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 (2. díl)

seriovy port

12. prosince 2001, 00.00 | Dnes se podíváme na přenos dat přes sériové rozhraní a hardwarovou stránku problému. Na závěr si vytvoříme jednoduchý chatovací program právě přes seriový port.

Minule jsme probrali základy a dnes se podíváme na problematiku přenosu dat po sériovém portu.

Hardwarová stránka - kabel

Pro přenos dat se většinou užívá několikažilový kabel s 9ti nebo 25ti kolíkovými konektory. Rozhodující je typ konektoru a počet žil. Na straně PC je obvykle 9ti nebo 25tikolíkový konektor se špičkami a na straně periferie se špičkami nebo se zdířkami. Počet žil hraje roli v ceně konektoru a typu přenosu dat. Klasicky se používá hardwarové řízení toku dat a tedy minimálně 5 žil (vodičů) - TxD (vysílaná data), RxD (příjmaná data), GND (zem), RTS (výzva k vysílání) a CTS (pohotovost k vysílání). Může se ale také použít softwarové řízení toku dat, kde se používají už jen 3 žíly (vodiče) - TxD (vysílaná data), RxD (příjmaná data) a GND (zem) nebo žádné řízení toku - zde také stačí 3 žíly. Důležité je také správné propojení konektorů - příjmaná data spojit s vysílanými, zem se zemí atd. (viz obrázek) a délka kabelu (podle normy RS-232 je maximální délka 15 m) - čím delší je kabel, tím je větší pravděpodobnost ztráty dat a menší přenosová rychlost.

Zapojení kabelu

Příprava přenosu

Při pohledu na komponentu VaComm (viz 1. díl) v Object Inspectoru v Properties vidíme spoustu položek - k přípravě přenosu jsou potřebné tyto:
  • Baudrate - přenosová rychlost - na kratší zdálenosti doporučuji rychlost 115 200 Baudů/s, na delší nižšší
  • Databits - počet datových bitů - při přenosu znaků z ASCII tabulky ponechte implicitní nastavení (8 datových bitů)
  • FlowControl - řízení toku dat - RTS/CTS a DTR/DSR je hardwarové, XOn/XOff softwarové a None žádné
  • Parity - vkládání paritního (kontrolního) bitu - sudého, lichého, mezerového, značeného nebo žádného
  • Stopbits - počet stopbitů - 1, 1,5 a 2
Pozn. k nastavení řízení toku dat: pokud chcete ušetřit vodiče a použít pouze 3 vodiče, vyberte None; při použítí softwarového řízení pomocí znaků XOn/XOff by mohlo dojít při přenosu datových souborů (všechny kromě čistě textových) k přerušení přenosu - kdyby soubor obsahoval znaky XOn/XOff, tak by je příjmač detekoval jako konec přenosu.

Vlastní přenos

Obousměrný vlastní přenos si ukážeme na jednoduchém příkladu - chatovací program na sériovém portu:
  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 Properties nastavte následovně: AutoOpen - true, Baudrate - br115200, FlowControl - fcNone a PortNum - číslo vašeho volného sériového portu
  3. ze záložky Standard zvolte tlačítko (Button) a umístěte ho do Formu, totéž proveďte s editačním řádkem (Edit)
  4. do události OnClick (Button) vložte tento kód: procedure TForm1.Button1Click(Sender: TObject); begin if VaComm1.WriteText(edit1.text) then Beep; //zapíše na sériový port obsah editboxu, po úspěšném zápisu pípne Edit1.Clear; //vymaže obsah editboxu end;
  5. ze záložky Standard zvolte textové pole (Memo) a umístěte jej do Formu
  6. do události OnRxChar (VaComm) vložte tento kód: procedure TForm1.VaComm1RxChar(Sender: TObject; Count: Integer); begin Memo1.Lines.Text:=Memo1.Lines.Text+VaComm1.ReadText+#13; //čte data z portu a zapisuje je do Mema a skočí na další řádek end;
Z příkladu je zřejmé, že se data typu string (řetězec) zapisují funkcí VaComm.WriteText(s), kde s je řetězec znaků, které chceme zapsat a výsledek funkce je typu boolean (true = pravda nebo false = nepravda). Data se čtou až po vyvolání události OnRxChar, která indikuje příchozí znak, a to funkcí VaComm.ReadText, kde výsledkem jsou přečtená data typu string (řetězec).
Aby byl vidět výsledek našeho snažení, je třeba si funkci ověřit - můžete propojit 2 počítače popisovaným 3žilovým kabelem nebo 2 sériové porty na 1 počítači (musíte vyrobit 2 programy - v jednom programu musíte nastavit číslo portu 1 a v druhém 2) nebo koupit si v elektrosoučástkách "samičí" konektor Canon 9 (se zdířkami) a spojit drátkem (nejlépe spájet) vývody 2 (RxD) a 3 (TxD) - jsou na konktoru popsané. Cena konektoru se pohybuje okolo 10 Kč. Tento univerzální přípravek za pár korun použijeme i v jiných aplikacích.

Ukázkový program je možno stáhnout zde jako projekt v Delphi.

Příště se budeme věnovat komunikaci s mobilním telefonem (připravte si datový kabel na propojení PC a mobilu).

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: