Vstup a výstup

Úvod

V dnešním díle budeme pokračovat v tématu, ve kterém jsme minule začali. Budeme se zabývat komunikací po sériové lince. Mnozí z Vás jistě byli netrpěliví a tak nezbývá než se do toho pustit.
Pro komunikaci po sériové linkce ale výrobce Delphi nenabízí žádnou standardní komponentu, takže je nutné se porozhlédnout po nějaké náhradě. Mě osobně se osvědčila komponeta od TMS Software a to konkrétně TMS Async32. Jedná se o demoverzi komponenty, nicméně si myslím, že uživatel toto omezení v žádném případě nepocítí. Komponenta nabízí práci se znaky, řetětci a umožňuje také přímé řízení portu.

Máte-li již naistalovanou komponentu, můžeme se směle pustit do práce. Dnes sice ještě nebudeme komunikovat s mobilním telefonem, ale ukážeme si, jak jednoduše přímo řídit výstupy portu a jak jednoduše číst stavy na vstupech.

Výstup

Pro testování výstupu je vhodné vytvořit si jednoduchý přípravek na nepájivém kontaktním poli ( "bastlpoli" ) .
Nejprve je potřeba si opatřit konektor CANON9, nebo CANON 25. U novějších PC je ale CANON25 spíše raritou a proto počítejme s menší verzi. Dále si připravíme asi tak metr čtyřžilového kabelu, pájku cín, jednořadou jumperovou lištu, 3 LED libovolné barvy a tzv. bastl pole.
Na jeden konec kabelu připájíme jumperovou lištu. Tu zapíchneme do pole a oproti jedné špičce (zemi) zapojíme diody do ostatních volných pinů. Předřadné odpory nejsou třeba protože obvody na základní desce sami omezí proud na 10mA. S tím ale nemůžeme počítat u portu LPT, který bychom tímto způsobem zničili!!!
 Druhý konec kabelu zapojíme na špičky 3 (TxD), 4 (DTR), 7 (RTS), 5 (GND - zem). Tímto bychom měli mít zkušební zařízení připraveno a nezbývá nic jiného než se pustit do programu.

Program I - výstup

  1. Vytvořte nový projekt a na formulář vložte komponentu TIMER záložky SYSTÉM. Parametr Interval nastavte na 500 milisekund.
  2. Definujte novou globální proměnou blik typu Boolean
  3. Vložte na formulář komponentu TVaComm ze záložky TMS Async32
  4. Nastavte položku Port Num na číslo portu který využíváte (COM1 – 1, COM2 -2) a nastavte AutoOpen na True.
  5. Napište následující proceduru
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if blik then blik:=false else blik:=true;
Vacomm1.SetDTR(blik);
end;
Program spuťte
Jestliže Vám na bastl poli blikala jedna LED, pak jste právě vytvořili Váš první program pro obslhu sériového portu. Vypíšete-li si další metody Vacomm1, pak uvidíte, že můžete budit další dvě linky: BREAK – na pinu 2 (společné s TxD), RTS – na pinu 7.

Čtení stavu portu

Stavy pinů na portu lze pomocí kompnenta od TMS Software také samozřejmě číst. "Bastlení" si zopakujeme a napájíme vodiče i na zbytel linek, které jsme pro předchozí příklad nezapojili. Tabulku zapojení pinů si můžete prohlédnout na konci článku.

Program II - vstup

Stejně jako minule nás nemine ani tvorba softwaru, kvůli, kterému si tento článek pravděpodobně čtěte. Jak už bylo napsáno výše, program bude obsahovat to co minule, ale budeme k tomu dodávat komponenty a samozřejmě i nějaký ten kód. Proto, pokud Vám zůstal program od minula, otevřete project a pokračujte. Ostatní si musí aplikaci naprogramovat od začátku.

Komponenta Vacomm nabízí pro čtení stavu linek tyto funkce s návratovou hodnotou typu Boolean.
  • Vacomm1.CTS
  • Vacomm1.DSR
  • Vacomm1.RLSD
  • Vacomm1.RING
Funkce nabývají pravdy, pokud je na vstupu log.1

Program je tedy téměř jasný. Po spuštění časovače 2, čteme hodnoty funkcí a podle výsledku nastavujeme CheckBox, vlastnost Checked. Tím nám vznikne jednoduchý, ale efektní indikátor.

Zde je úplný přepis kódu.

unit com_priklad1;

interface

uses

    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ExtCtrls, StdCtrls, VaClasses, VaComm;

type
    TForm1 = class(TForm)
    VaComm1: TVaComm;
    dsr: TCheckBox;
    cts: TCheckBox;
    Timer1: TTimer;
    ring: TCheckBox;
    sd: TCheckBox;
    Timer2: TTimer;
    procedure Timer2Timer(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

var
    Form1: TForm1;
    blik : boolean;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    if blik then blik:=false else blik :=true;
    Vacomm1.SetRTS(blik);
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
if Vacomm1.CTS then cts.Checked:=true else cts.Checked:=false;
if Vacomm1.DSR then dsr.Checked:=true else dsr.Checked:=false;
if Vacomm1.RLSD then sd.Checked:=true else sd.Checked:=false;
if Vacomm1.ring then ring.Checked:=true else ring.Checked:=false;
end;
end.

Tímto jsme si osvětlili techniku pro přímé řízení portu. V příštím díle si ukážeme jak jednoduše číst stavy mobilního telefonu po sériové lince přes AT příkazy.



Komentovat článek

Jméno:  
Zpráva:

Komentáře k článku

článek zatím nikdo nekomentoval