# Ovladač DDE Client systému Control Web

## Obsah

  Úvod
  Konfigurace ovladače
  Definice DDE spojení
  Parametry spojení
  Definice datových DDE propojení
  Způsoby dynamické výměny dat
  Výpadek spojení

  Pokročilé technologie
  A. Dynamické připojování ovladače k DDE serveru za chodu aplikačního programu
  B. Zpracování výjimek ovladače, reakce na změny dat serveru
  C. Dynamická komunikace
  D. Dynamické položky
  E. Execute povely

  Seznam Query metod ovladače
  Referenční popis parametrického souboru ovladače

## Úvod

DDE — Dynamic Data Exchange — je protokol definovaný firmou Microsoft pro spolupráci aplikací prostřednictvím výměny dat a povelů.

DDE Client ovladač pro Control Web je obecným ovladačem systému a platí pro něj stejná pravidla jako pro ostatní ovladače. Ke komunikaci jádra systému Control Web s ovladačem slouží uživatelsky libovolně definovatelné kanály. Každý kanál realizuje napojení s definovanou položkou přes DDE spojení. Protože položky mohou obsahovat více dat, lze mapovat více kanálů jako blok na jedinou položku. Bloky mohou být libovolně vnořené.

Control Web & DDE

DDE Client ovladač podporuje výměnu dat jednosměrně (vstup nebo výstup) i obousměrně. Komunikace mohou být vyžádané nebo nevyžádané, problematika bude vysvětlena v kapitole Způsoby dynamické výměny dat.

## Konfigurace ovladače

Ovladač můžete konfigurovat pomocí konfigurační aplikace DDECONF.EXE nebo textově přímou modifikací parametrických souborů.

Konfigurační aplikace pro DDE ovladač

Aplikace je vybavena dvěmi plochami. Levá část zobrazuje hierarchii definovaných kanálů ve stromu, pravá část zobrazuje různé údaje — společné parametry ovladače, parametry zvoleného kanálu nebo bloku, případně seznam chyb detekovaných při načítání existujícího parametrického souboru.

Význam tlačítek nástrojové lišty:

  — vytvořit nový soubor parametrů
  — otevřít existující soubor parametrů
  — uložit parametry do souboru
  — zobrazit vlastnosti (parametry) položky vybrané v levé ploše
  — zobrazit v pravé ploše seznam definovaných kanálů s parametry
  — zobrazit chybový seznam vytvořený tehdy, pokud načítaný soubor obsahoval chyby
  — zrušit položku označenou ve stromu

## Definice DDE spojení

DDE je komunikací typu client-server. Propojení aplikací přes DDE je jednosměrnou aktivitou ze strany clienta, který otevírá spojení s definovaným tématem. Pro zahájení spojení je nutná znalost následujících parametrů:

- Jméno služby (application) — určuje symbolický název DDE serveru
- Předmět (topic) — určuje téma výměny

Oba tyto parametry lze zadat v záložce "Služba".

Konfigurace ovladače — záložka "Služba"

Spojení může být ze strany serveru přijato nebo zamítnuto. Spojení se nemusí podařit také z důvodu nepřítomnosti požadovaného serveru. DDE Client ovladač dokáže v takovémto případě požadovaný server (tedy aplikaci, která je DDE serverem vybavena) spustit.

Sekce "Spustit server" definuje 3 parametry. Tlačítko výběru "Povolit spuštění serveru" povolí ovladači při neúspěšném pokusu o spojení se serverem spustit aplikaci daného serveru. Editační řádek "Úplná cesta a název aplikace" určuje, který program bude spouštěn. Parametry spouštěného programu budou získány z obsahu editační řádky "Parametry aplikace".

Upozornění: Pokud je parametrem aplikace název souboru s dlouhou cestou, která obsahuje mezery, je vhodné tento parametr uzavřít do uvozovek.

Pokud zvolená aplikace DDE serveru je aplikací, která registruje v systému Windows obsluhu souborů určitého typu, nemusíte zadávat do editačního řádku "Úplná cesta a název aplikace" skutečný odkaz na spustitelný soubor. Stačí uvést odkaz ^.ext, kde místo ext uvedete skutečnou příponu (typ) souboru, který daná aplikace obsluhuje. Má-li být aplikace DDE serveru spouštěna s parametry, a jedním nebo více z parametrů je cesta se jménem souboru, nemusíte uvádět cestu plnou. Stačí použít makro %AppDir%, které je automaticky rozvinuto na úplnou cestu ke spouštěnému aplikačnímu programu. Pokud tedy spouštíte aplikační program 'C:\Technology\Tech.cwx' a jako parametr pro DDE server uvedete '%AppDir%\DDESrvParams\AtRun.abc', bude aplikaci DDE serveru předán jako parametr sestavený řetězec 'C:\Technology\DDESrvParams\AtRun.abc'.

## Parametry spojení

Předtím, než dojde ke spuštění serveru, lze pokusy o spojení opakovat s definovaným časovým odstupem. Okamžitě po uplynutí časové prodlevy (timeout) posledního pokusu o spojení dojde ke spuštění aplikace serveru.

### Akce ovladače při spojování

Schéma chování

Pokud se podařilo aplikaci serveru spustit, následuje opět stejný počet pokusů o spojení včetně prodlev mezi jednotlivými pokusy. Pokud se nepodaří spojení navázat, zůstává ovladač ve stavu rozpojení (disconnected). Tento způsob automatického ustavení DDE spojení není jedinou možností ovladače. Složitější, avšak v některých případech vhodnější postup, je popsán v kapitole Pokročilé technologie.

Konfigurace ovladače — záložka "Parametry"

Parametry popsaného schématu chování lze definovat v záložce "Parametry". "Timeout spojení" udává časovou prodlevu mezi jednotlivými pokusy o navázání spojení s DDE serverem. "Počet pokusů o spojení" udává, kolikrát se bude ovladač pokoušet o uzavření spojení předtím, než se pokusí zavést aplikaci DDE serveru. "Timeout obnovení spojení" udává nejdelší dobu, po kterou zůstává DDE Client neaktivní po pokusu o ukončení spojení se serverem, který neodpovídá na požadavky. "Počet neplatných pokusů" udává největší počet neuspokojených požadavků. Pokud server neodpovídá, bude ovladačem původní spojení ukončeno a po uplynutí doby definované parametrem "Timeout obnovení spojení" bude vytvořeno nové spojení včetně případného zavedení nové aplikace DDE serveru.

V sekci "Parametry operace" lze ovlivnit chování ovladače při vlastní dynamické výměně dat. Parametr "Timeout operace" udává časovou prodlevu mezi zahájením a ukončením dílčího přenosu dat. Pokud není přenos do doby vypršení prodlevy potvrzen, je přenos opakován tolikrát, kolik udává parametr "Počet pokusů". Pokud se nepodaří data přenést, operace je považována za nezdařenou a data označena jako nedosažitelná. Jakmile souvislá posloupnost neúspěšných komunikací dosáhne hodnoty parametru "Počet neplatných pokusů", dojde automaticky k odpojení DDE ovladače od serveru. Následný pokus o získání dat způsobí rozběhnutí procesu připojování k serveru.

Sekce "Různé" ovlivňuje doplňková nastavení ovladače. Pokud je tlačítko volby "Povolit kolizi ovladače" zamáčknuté, ovladač informuje jádro systému Control Web o nezdařených přenosech. Pokud není kolize ovladače povolena, je pouze věcí uživatele detekovat chyby a správně na ně reagovat.

Doporučení: Pokud nemáte dostatek zkušeností s používáním systému Control Web, povolte tento parametr a přenechte zpracování chyb na jádru systému.

Parametr "Desetinné znaménko" udává znak, kterým bude nahrazena standardní desetinná tečka při textové výměně číselných dat. Parametry "Hodnota pro log. 1" a "Hodnota pro log. 0" jsou použity při konverzi dat typu boolean. Logická 1 a 0 budou reprezentovány hodnotami, uvedenými těmito prametry.

Záložka "Parametry bloku" obsahuje popis oddělovačů používaných při blokových komunikacích, kapitola Parametry bloku.

Konfigurace ovladače — záložka "Parametry bloku"

V záložce "Vykonávání" můžete nastavit maximální počet současně odbavovaných komunikací. Standardně používejte 1 požadavek, protože ne každý DDE server podporuje paralelní zpracování požadavků od jednoho clienta. Pouze pokud jste si jisti, že vámi používaný server není omezen na zpracování pouze jednoho požadavku a dokáže bezchybně přijmout a odbavit více požadavků, můžete zvýšit výkon vaší aplikace povolením více současných požadavků. Nezapomeňte, že pokud pracuje na jednom počítači více DDE clientů, může tato volba způsobit nadměrnou spotřebu systémových prostředků a v důsledku také omezit reálnou datovou propustnost komunikujících komponent.

Doporučujeme pro jeden DDE ovladač nastavit nejvíce 5 současných požadavků, pokud pracuje pouze tento jeden ovladač na jednom počítači sám. Pro 1 - 4 DDE ovladače je vhodné povolit nejvíce 3 současné požadavky, pro více současně pracujících ovladačů doporučujeme používat vždy jednoduchou výměnu.

Upozornění: Předchozí doporučení nepramení ze žádného funkčního omezení DDE Client ovladače systému Control Web, v principu může ovladač zahájit libovolné množství komunikací v jeden okamžik. Důvod je zcela jiný, daný principem vlastního protokolu DDE, kdy výměna probíhá přes sdílenou paměť, která je v současných systémech Windows omezena.

Konfigurace ovladače — záložka "Vykonávání"

## Definice datových DDE propojení

Každý definovaný kanál ovladače může být propojen s daty jiné aplikace. Propojení je realizováno na základě znalosti názvu dat, tzv. položky (item). Pojmenování položek dat aplikace DDE serveru může být definováno tvůrcem dané aplikace nebo je parametrizovatelné. Řada aplikací, jako např. Microsoft Excel, připouští oba způsoby, tedy využití jak předdefinovaných názvů, tak i pojmenování vlastní. Implicitní názvy položek bývají zveřejněny výrobcem v dokumentaci. Dalším zdrojem informací o DDE výměně dat jsou některé odborné publikace, např. Windows 95 Resource Kit. V případě použití DDE serverů průmyslových zařízení je popis pojmenování a konfigurace nedílnou součástí dokumentace.

Příklady pojmenování:

- R1C1 ... aplikace Microsoft Excel 95, buňka na řádku 1 ve sloupci 1
- W1K1 ... aplikace Microsoft Excel 97, buňka na řádku 1 ve sloupci 1
- [List 1]W1K1 ... aplikace Microsoft Excel 97, buňka na řádku 1 ve sloupci 1 vrstvy List 1
- ["Leden"]W1K1 ... aplikace Microsoft Excel 97, buňka na řádku 1 ve sloupci 1 vrstvy pojmenované "Leden"

Ke konfiguraci kanálů ovladače je určena pravá plocha konfigurační aplikace. V levé části označte kanál, jehož paramatry chcete změnit a stiskem tlačítka "Vlastnosti" — — zobrazíte v pravé části záložku s parametry.

Konfigurace kanálů

Popis nástrojové lišty:

  — Tento nástroj je tvořen dvěma tlačítky. První tlačítko je v liště povoleno jen tehdy, pokud došlo ke změně dat kanálu. Druhé tlačítko — špendlík — plní funkci automatické aplikace provedených změn. Pokud není zamáčknuto a došlo ke změně dat aktuálního kanálu, aniž by tato změna byla potvrzena, je při přechodu na data jiného kanálu uživatel upozorněn na provedenou změnu. Pokud je tlačítko zamáčknuto, jsou všechny provedené změny automaticky aplikovány.
  — Přidat kanál
  — Vložit kanál
  — Zrušit aktuální kanál
  — Zrušit všechny kanály
  — Přesun na první položku seznamu kanálů
  — Přesun na předchozí položku seznamu kanálů
  — Přesun na následující položku seznamu kanálů
  — Přesun na poslední položku seznamu kanálů

Sekce "Kanál" obsahuje základní informace o aktuální položce seznamu kanálů. Editační řádek "Kanál" udává logické číslo právě editovaného kanálu ovladače. Pokud číslo uvedené ve druhém editačním poli tohoto řádku není stejné, potom lze modifikovat parametry více kanálů současně. Tuto možnost využijete zejména při vytváření nové konfigurace, kdy potřebujete vytvořit najednou více kanálů se stejnými nebo podobnými vlastnostmi. Volba "Přepsat existující" způsobí přepsání celé množiny kanálů bez dotazu, počínaje kanálem, jehož číslo je uvedeno v prvním editačním poli, a konče kanálem, jehož číslo je uvedeno ve druhém editačním poli. Položka "Typ" udává datový typ kanálu, položka "Směr" jeho orientaci, obojí podle konvencí systému Control Web. Na editačním řádku "Jméno položky" je uveden symbolický název DDE položky serveru, se kterou bude probíhat výměna dat editovaného kanálu nebo množině kanálů.

Sekce "Kanál"

#### Interakce

Sekce "Interakce" definuje způsob výměny dat. Tlačítko volby "Poslat jako položku" slouží ke změně formátu zasílaných zpráv. S tlačítkem lze pracovat pouze tehdy, pokud je kanál výstupní a typu string. Následující obrázek vlevo zobrazuje běžný způsob výměny dat, kdy identifikace položky obsahuje neměnný název a datová část odpovídá obsahu kanálu. Obrázek napravo odpovídá situaci, kdy byla nastavena volba "Poslat jako položku". Identifikace položky je proměnná a odpovídá textovému obsahu kanálu, zatímco datová část zprávy zůstává nevyužita.

Sekce "Interakce" — výstup, typ string

Volba "Reagovat na změnu dat serveru" způsobí, že pokud dojde k samovolné změně dat (z pohledu systému Control Web) na serveru, bude o této skutečnosti ovladač informován. Volba "Obdržet data okamžitě" způsobí při změně dat na serveru okamžité odeslání nových dat. Pokud tato volba není označena, ovladač registruje skutečnost změny dat, ale nedojde ke změně hodnoty na kanálu. Reakcí na tuto změnu může být například pozdější čtení kanálu (ve vhodnějším okamžiku nebo z jiných důvodů). Více informací o výměně dat je v kapitole Způsoby dynamické výměny dat. Volba "Nepožadovat data ze serveru" způsobí, že při čtení kanálu nedojde k výměně dat se serverem. To má význam pouze tehdy, pokud client dostává data ze serveru bez požadavků. Tato volba je proto aktuální jen tehdy, pokud jsou dvě předchozí označeny.

Sekce "Interakce" — vstup

### Komunikace po blocích

Při blokové komunikaci dochází k výměně balíku dat. Ne všechny DDE servery podporují tento způsob komunikace. Pokud jej však podporují, je dobré toho využít, neboť poměr efektivity mezi blokovou výměnou dat a tradiční je přímo úměrný množství položek spojených do jednoho bloku. Jinými slovy, předat 10 hodnot v bloku zabere 10-krát méně času než předat 10 samostatných hodnot.

Běžným způsobem komunikace dochází k výměně jedné hodnoty mezi serverem a clientem. Při textových komunikacích numerických údajů lze vyměňovat více hodnot. Data jsou ve zprávě uspořádána následně:

[<nepovinný separátor>] <hodnota 1> <separátor> <hodnota 2> <separátor> ... <separátor> <hodnota n>

DDE Client systému Control Web dokáže takto uspořádaná data rozdělit do více kanálů, které jsou součástí bloku. Některé DDE servery dokáží zpřístupňovat i jednotlivá data, která jsou součástí bloků. Následující obrázek znázorňuje strukturu bloku RegArray_M. Pokud bude po serveru požadována položka "RegArray_M", budou odbavena veškerá data. Pokud bude po serveru požadována položka "RegArray_M.rpm" (jako oddělovač položky bloku je zde použita tečka), odbaví server jen jednu položku.

Ukázka bloku

#### Parametry bloku

Parametry pro blokovou výměnu se nastavují na dvou místech. Nejdříve je potřeba nastavit společné vlastnosti, které souvisejí s konkrétním DDE serverem a jsou pro všechny datové výměny společné. Označte kořen (nejvýše položenou položku označenou "DDE Client" ve stromu — levá plocha. Zvolte "Vlastnosti" a přepněte se do záložky "Parametry bloku". V sekci "Oddělovače" jsou dva parametry, společné pro všechny blokové výměny.

"Oddělovač položek" — jestliže váš DDE server podporuje výměnu dat umístěných v rámci jednoho bloku, pak jsou tato data identifikována hierarchicky, tedy odkaz na jednotlivé položky bloku je složen ze jména bloku, oddělovače a jména položky. Zvolte tedy patřičný oddělovač.

Upozornění: Ačkoliv váš DDE server podporuje výměnu dat v blocích, neznamená to, že dokáže identifikovat jednotlivé položky bloků zmíněným způsobem, tedy hierarchicky.

Poznámka: DDE Client ovladač systému Control Web podporuje pouze hierarchický způsob identifikace položek v rámci bloku. Pokud DDE server umožňuje identifikaci položek bloků jiným způsobem a vaše aplikace vyžaduje, aby mimo blokový přenos byla data vyměňována i po položkách bloku, musíte nadefinovat pro tento účel nové kanály (jednoduché, tedy ne bloky).

"Oddělovač dat" — separátor sloužící k oddělení jednotlivých hodnot.

Při konfiguraci kanálu typu blok můžete v sekci "Parametry bloku" zvolit způsob, jakým bude zacházeno s daty. Pokud zvolíte "Vždy celý blok", pak při požadavku na alespoň jeden kanál patřící bloku proběhne výměna vždy celého bloku. Volba "Vždy po položkách" způsobí, že s blokem nebude nikdy zacházeno jako s blokem, ale každá z položek bude vyměňována samostatně, podle potřeby. Volba "Volitelně" je kombinací předchozí způsobů. Zvolte "Práh". Tato hodnota definuje, za jakých podmínek bude provedena výměna celého bloku (pokud počet požadavků na položky bloku dosáhne nejméně hodnoty "Práh"), respektive kdy bude provedena výměna po položkách (počet požadavků nedosáhl hodnoty "Práh").

Sekce "Parametry bloku"

Důležité upozornění: Pokud je součástí definice bloku další blok, uplatňují se všechny zmíněné principy hierarchicky. Pozor proto na volbu "Nepožadovat data ze serveru" (advisedatanoread), kterou pokud zvolíte u bloku, bude uplatněna na všechny položky bloku.

## Způsoby dynamické výměny dat

Tato kapitola objasňuje principy výměny dat mezi DDE Client ovladačem a libovolným DDE serverem. Možnosti výměny dat souvisí s definicí kanálu a jeho vazbou na DDE server. Problematika definice kanálu je objasněna v kapitole Definice datových DDE propojení v popisu sekce Interakce.

Důležité: DDE Client ovladač nepodporuje nepotvrzované výměny dat. Všechny operace musí být vždy potvrzeny jak ze strany serveru, tak i ze strany clienta. Jedinou výjimku tvoří zprávy odeslané DDE serverem nepožadující potvrzení.

#### Vyžádaná výměna dat

Model vyžádané výměny dat postihuje dva základní stavy: požadavek na čtení dat, který je způsoben čtením kanálu DDE Client ovladače z aplikace, a požadavek na zápis dat způsobený zápisem hodnoty na kanál ovladače. Společným rysem vyžádané výměny dat je prvotní aktivita ze strany DDE Client ovladače.

Vyžádaná výměna dat

#### Nevyžádaná výměna dat

Tento způsob výměny dat je typický prvotní aktivitou ze strany DDE serveru. Client obdrží informaci o změně dat na serveru, případně i data vlastní. Z hlediska běhu aplikace v systému Control Web se jedná o asynchronní přenos, DDE Client ovladač vždy generuje výjimku ovladače.

Upozornění: Počet generovaných výjimek ovladače nemusí odpovídat počtu přenesených informací. Jedna výjimka může informovat o více uskutečněných přenosech. Podrobnostmi zpracování výjimky se zabývá kapitola Pokročilé technologie.

Nevyžádaná výměna dat

#### Výpadek spojení

Výpadkem spojení se rozumí přerušení spojení mezi DDE Client ovladačem a DDE serverem. K výpadku může dojít z několika příčin.

- ukončení aplikace serveru (např. obsluhou)
- nekorektní ukončení aplikace serveru (nenapravitelnou chybou aplikace DDE serveru)

Pokud dojde ke korektnímu ukončení aplikace serveru (zavření okna, atp.), dojde ke korektnímu uzavření spojení mezi ovladačem a aplikací. Způsob chování ovladače je dán následujícími faktory:

1. Pokud je povoleno znovuobnovení spojení (viz kapitola Seznam Query metod ovladače, reconnect_enable), dojde po několikanásobném pokusu přenést požadavky a po časové prodlevě "Timeout obnovení spojení" (kapitola Parametry spojení) k pokusu znovu se připojit. Výsledkem může být spuštění aplikace serveru, pokud je takto ovladač konfigurován.
2. Pokud nejsou žádné požadavky ze strany ovladače na DDE server, zůstává ovladač nepřipojen

Dojde-li k nekorektnímu ukončení aplikace serveru, ovladač není informován o ukončení spojení. Zůstává ve stavu připojení. Dále se řídí následujícími pravidly:

1. Pokud nejsou žádné požadavky ze strany ovladače na DDE server, zůstává ovladač ve stavu připojen a neověřuje skutečný stav spojení.
2. V okamžiku příchodu požadavků (čtení nebo zápis na kanále ovladače) se ovladač pokusí vyslat data. Pokus je neúspěšný. Po vypršení časové prodlevy "Timeout operace" je požadavek zopakován a další neúspěšný pokus o komunikaci s DDE serverem způsobí uvedení ovladače do stavu rozpojen. Dále se ovladač řídí podle prvního bodu předchozího odstavce.

## Pokročilé technologie

Tato kapitola je zaměřena na netypické přístupy včetně několika ukázek. Předpokládá znalost problematiky konfigurace DDE Client ovladače a jeho Query Interface rozhraní (kapitola Seznam Query metod ovladače).

#### A. Dynamické připojování ovladače k DDE serveru za chodu aplikačního programu

Při klasickém použití DDE Client ovladače dochází k uzavření spojení s DDE serverem již při startu aplikačního programu. Tento přístup může být v řadě případů nevýhodný. Stejně tak může být nevýhodná nutnost existence DDE spojení za běhu aplikačního programu.

Řešení:

Ovladač je vhodné nakonfigurovat tak, aby nespouštěl automaticky aplikaci DDE serveru. Po startu aplikace dojde k pokusu ovladače o navázání spojení s DDE serverem. Pokud tento neběží, zůstává ovladač odpojen. Aplikaci je vhodné konstruovat tak, aby přístup na kanály DDE Client ovladače byl podmíněn existencí spojení. Jinak dochází k dalším zbytečným pokusům o navázání spojení a komunikaci. Navíc je doporučeno ihned po startu aplikačního programu zablokovat mechanismus automatického obnovení spojení pomocí DQMI metody reconnect_disable.

Aplikace může být vybavena prostředky pro spuštění aplikace DDE serveru ve vlastní režii, tzn. automatizovaně nebo na požádání obsluhy. Typickým řešením je využití DQMI ovladače v procedurách.

      procedure RunDDEServiceAndConnect();
      var
        b   = boolean, false;
        res = integer, 0;
        i   = integer, 0;
      begin
        system.DriverQueryProc( 'K1_drv', 'run_service', &res );
        if res <> 0 then
          ... (* error: cannot run service *)
          stop;
        end;
        pause 2; (* wait for service *)

        system.DriverQueryProc( 'K1_drv', 'connect', &res );
        if res <> 0 then
          ... (* error: cannot establish connection *)
          stop;
        end;

        b = false;
        i = 0;
      (* wait until connected or 4 second timeout over *)
        while (not b) or (i < 40) do
          system.DriverQueryProc( 'K1_drv', 'connected?', &b );
          i = i + 1;
          pause 0.1;
        end;
        if not b then
          ... (* error: timeout, cannot establish connection *)
          stop;
        end;
      end_procedure;

V ukázce je použit cyklus while pro čekání na spojení. Timeout je vhodné mít ve správné relaci s konfigurací ovladače (zde 40 x 0,1 s = 4 s, a to by mělo přesahovat "Timeout spojení").

#### B. Zpracování výjimek ovladače, reakce na změny dat serveru

DDE Client ovladač generuje výjimku ovladače tehdy, pokud obdrží od DDE serveru, k němuž je připojen, zprávu o změně dat položky, se kterou je svázán některý z definovaných kanálů.

Změna dat na serveru je akcí, která může mít přímý vliv na chování aplikačního programu. Existují tři způsoby přístupu k problematice získání změněných dat. Tyto způsoby se liší velikostí časové prodlevy, po kterou client může pracovat ještě se starými daty. Prvním a nejméně efektivním způsobem je periodické čtení všech dat ze serveru, která se mohou změnit nezávisle na chodu aplikačního programu. Aktuálnost obsahu kanálů je tedy úměrná periodě čtení. Druhý a třetí způsob má společný rys — změna dat je detekována DDE serverem, který o změně informuje clienta. Druhý způsob je založen na principu přenosu informace o změně, zatímco třetí způsob přenáší zároveň s informací také změněná data.

Zdálo by se, že třetí způsob je nejvýhodnější, protože je nejvíce flexibilní. Při častých změnách dat serveru však dochází k přenosu velkého množství dat a to představuje velkou zátěž pro zacházení se systémovými prostředky. Vždy je výhodné zvolit vhodný kompromis a kombinovat veškeré dostupné techniky. Pokud bude aplikován druhý postup, je potřeba vytvořit v aplikaci mechanismus, který dokáže modifikovaná data získat, nejlépe ve vhodný okamžik zahájit čtení změněných kanálů.

      program pg_channel_change_advise;
        driver_exception = K2_drv;

        procedure OnActivate();
        var
          lc       = longcard, 0;
          NewValue = real, 0;
        begin
          loop
            system.DriverQueryProc( 'K2_drv', 'exception_channel', &lc );
            if lc <> 0 then  (* channel changed *)
              system.DriverQueryProc( 'K2_drv', lc, &NewValue ); (* get channel value *)
              if lc = 200 then
                Meter100.SetValue( NewValue );
              elsif lc = 201 then
                Meter200.SetValue( NewValue );
              elsif lc = 202 then
                Meter300.SetValue( NewValue );
              end;
            else (* done *)
              exit;
            end;
          end; (* loop *)
        end_procedure;

      end_program;

#### C. Dynamická komunikace

V případě, že aplikace nepoužívá DDE výměnu s různými servery najednou, lze v aplikaci používat jediný DDE Client ovladač, který bude z aplikace programově připojován a odpojován. Tato problematika byla komentována v bodě A. této sekce. Ve stavu rozpojení lze ovladači nastavit jiné parametry spojení.

      procedure ChangeServiceAndTopic( NewService, NewTopic : string );
      var
        lc = longcard, 0;
        s  = string, '';
      begin
        s = concat('service ', NewService );
        system.DriverQueryProc( 'K3_drv', s, &lc );
        if lc <> 0 then
          ... (* error *)
          stop;
        end;
        s = concat('topic ', NewTopic );
        system.DriverQueryProc( 'K3_drv', s, &lc );
        if lc <> 0 then
          ... (* error *)
          stop;
        end;
      end_procedure;

#### D. Dynamické položky

Dynamickými položkami se rozumí výměna dat na výstupních kanálech typu string, které jsou v definici označeny "Poslat jako položku". V tomto případě neprobíhá žádná výměna dat, DDE serveru je zaslána pouze položka — přímo obsah řetězcového kanálu. Tato technika není typická, nicméně řada DDE serverů takto umožňuje ostatním aplikacím ovlivňovat svou činnost.

#### E. Execute povely

DDE Execute rozhraní je ve Windows standardem pro řízení aplikací. Popis syntaxe je součástí bohaté literatury zabývající se problematikou programování ve Windows.

Rozhraní umožňuje sdělit jiné aplikaci požadavky, např. open — otevři soubor, print — vytiskni dokument, atp. Následující příklad názorně ukazuje, jak v aplikaci Microsoft Excel otevřít s pomocí DDE Client ovladače libovolný dokument — zde parametr procedury.

      procedure ExecuteOpen( PathName : string );
      var
        lc = longcard, 0;
        b  = boolean, false;
        i  = integer, 0;
        s  = string, '';
      begin
        system.DriverQueryProc( 'dde_excel', 'service EXCEL', &lc );
        if lc <> 0 then
          ... (* error *))
          stop;
        end;
        system.DriverQueryProc( 'dde_excel', 'topic system', &lc );
        if lc <> 0 then
          ... (* error *)
          stop;
        end;
        system.DriverQueryProc( 'dde_excel', 'connect', &lc );
        if lc <> 0 then
          ... (* error *)
          stop;
        end;

      (* wait until connected or 4 second timeout over *)
        b = false;
        i = 0;
        while (not b) or (i < 40) do
          system.DriverQueryProc( 'dde_excel', 'connected?', &b );
          i = i + 1;
          pause 0.1;
        end;
        if not b then
          ... (* error: timeout, cannot connect *)
          stop;
        end;

      (* set 8 s timeout for open operation *)
        system.DriverQueryProc( 'dde_excel', 'timeout 80', &lc );

      (* prepare execute command string *)
        s = concat( 'execute [open(&quot;', PathName );
        s = concat( s, '&quot;)]' );
        system.DriverQueryProc( 'dde_excel', s, &lc );
        if lc <> 0 then
          ... (* error: execute failed *)
          stop;
        end;
        pause 0.2; (* wait *)

      (* disconnect *)
        system.DriverQueryProc( 'dde_excel', 'disconnect', &lc );
        if lc <> 0 then
          ... (* error: disconnect failed *)
          stop;
        end;

#### Seznam Query metod ovladače

Formát následujícího popisu vychází z implementace Control Web Driver Query Method Interface (DQMI). Rozhraní je přístupné prostřednictvím systémové OCL metody DriverQueryProc.

      system.DriverQueryProc( 'jméno ovladače', parametr1, & parametr2 )

parametr1 a parametr2 jsou popsány pro každou metodu zvlášť, v popisu jsou odděleny čárkou

connect

[in] "connect", [out] result : number

Metoda způsobí připojení DDE Client ovladače k DDE serveru. Pokud je v ovladači povolena možnost spouštění serveru aplikaci při jeho nedosažitelnosti, způsobí tato metoda zavedení zadané aplikace v případě neúspěšného pokusu.

result nabývá následujících hodnot:

  = 0 ... úspěšná operace
  <> 0 ... chyba

Pokud je na výstupu procedury signalizována úspěšná operace, znamená to, že požadavek byl ovladačem přijat. Neznamená to však, že došlo k úspěšnému navázání spojení. Operace způsobí pouze registraci požadavku, který je dále zpracováván nezávisle na běhu aplikace. Ke vlastnímu spojení může dojít později, což závisí na počtu pokusů o spojení, časové prodlevě, případně i době zavádění aplikace DDE serveru (viz kapitola Parametry spojení). Připravenost spojení může být ověřena query metodou connected?.

disconnect

[in] "disconnect", [out] result : number

Metoda ukončí existující spojení s DDE serverem.

result nabývá následujících hodnot:

  = 0 ... úspěšná operace
  <> 0 ... chyba

Pokud je na výstupu procedury signalizována úspěšná operace, znamená to, že požadavek byl ovladačem přijat. Vlastní operace probíhá nezávisle na běhu aplikace, ukončení spojení může být ověřeno query metodou connected?.

execute

[in] "execute <command>", [out] result : number

Metoda slouží k předání požadavku přes DDE Execute rozhraní serveru. Syntaxe požadavků je přesně definována, zatímco vlastní povely předávané rozhraním včetně parametrů nepodléhají žádné konvenci. Metoda je určena výhradně pro pokročilé uživatele.

result nabývá následujících hodnot:

  = 0 ... úspěšná operace
  <> 0 ... chyba

Pokud je na výstupu procedury signalizována úspěšná operace, znamená to, že požadavek byl ovladačem přijat. Vlastní operace (předání požadavku a reakce DDE serveru) probíhá nezávisle na běhu aplikace.

crash_enable

[in] "crash_enable", [out] result : number

Povolí generování zpráv o kolizích ovladače při neúspěšných operacích.

result nabývá následujících hodnot:

  = 0 ... úspěšná operace
  <> 0 ... chyba

crash_disable

[in] "crash_disable", [out] result : number

Zakáže generování zpráv o kolizích ovladače při neúspěšných operacích.

result nabývá následujících hodnot:

  = 0 ... úspěšná operace
  <> 0 ... chyba

run_service

[in] "run_service", [out] result : number

Metoda způsobí neprodlené zavedení DDE aplikace serveru, viz kapitola Parametry spojení.

result nabývá následujících hodnot:

  = 0 ... úspěšná operace
  <> 0 ... chyba

topic

[in] "topic <name>", [out] result : number

Metoda nastaví téma DDE konverzace. Změnu je možné provádět pouze v situaci, kdy je ovladač rozpojen.

result nabývá následujících hodnot:

  = 0 ... úspěšná operace
  <> 0 ... chyba

service

[in] "service <name>", [out] result : number

Metoda nastaví identifikaci služby DDE konverzace. Změnu je možné provádět pouze v situaci, kdy je ovladač rozpojen.

result nabývá následujících hodnot:

  = 0 ... úspěšná operace
  <> 0 ... chyba

reconnect_enable

[in] "reconnect_enable", [out] result : number

Metoda povolí mechanismus obnovení spojení po výpadku včetně případného zavedení aplikace DDE serveru, pokud je toto povoleno.

result nabývá následujících hodnot:

  = 0 ... úspěšná operace
  <> 0 ... chyba

reconnect_disable

[in] "reconnect_disable", [out] result : number

Metoda zablokuje mechanismus obnovení spojení po výpadku.

result nabývá následujících hodnot:

  = 0 ... úspěšná operace
  <> 0 ... chyba

timeout

[in] "timeout <time>", [out] result : number

Metoda nastaví časovou prodlevu DDE operace (při výměně dat). Hodnota <time> udává čas v 1/10 s.

result nabývá následujících hodnot:

  = 0 ... úspěšná operace
  <> 0 ... chyba

exception_channel

[in] "exception_channel", [out] result : number

Metoda vrací číslo kanálu, jehož data byla na DDE serveru modifikována nezávisle na chodu aplikace.

Upozornění: Podle parametrů kanálu (viz kapitola Definice datových DDE propojení, sekce Interakce) lze rozlišit dva případy. V situaci, kdy je pouze oznámena změna dat, může aplikace novou hodnotu získat čtením kanálu. Pokud součástí zprávy o změně dat jsou také data samotná, lze novou hodnotu kanálu získat pomocí query metody get_channel.

result nabývá následujících hodnot:

  = 0 ... úspěšná operace
  <> 0 ... chyba

error_count

[in] "error_count", [out] errors : number

Metoda vrací celkový počet chyb DDE komunikace od spuštění aplikace.

connected?

[in] "connected?", [out] result : boolean

Dotazovací metoda vrací v result true, pokud je spojení s DDE serverem aktivní. Není-li ovladač se serverem spojen, návratová hodnota je false.

<number> — metoda get_channel

Poznámka: get_channel je pouze symbolické označení metody. Skutečná query metoda get_channel DDE Client ovladače je vyvolána pokaždé, když je typ parametru parametr1 číselný.

[in] channel : number, [out] value : number

Metoda vrací hodnotu kanálu. Tato hodnota je získána z interních struktur ovladače, volání metody nikdy nezpůsobí komunikaci. Typ parametru parametr2 musí odpovídat definici kanálu. Metoda nemá rozhraní pro návratový kód (výsledek operace). Operace se povede vždy, pokud je předchozí podmínka shodnosti datového typu splněna.

## Referenční popis parametrického souboru ovladače

Formát parametrického souboru ovladače:

      [server]
      name = <service name>
      topic = <topic name>
      monitor = <boolean>
      connect_attempts = <number>
      connect_timeout = <number>
      reconnect_attempts = <number>
      reconnect_timeout = <number>
      operation_timeout = <number>
      operation_attempts = <number>
      run_service = <boolean>
      service_path = <pathname and parameters>
      decimal_char = , | .
      true_text = <string>
      false_text = <string>
      driver_crash = <boolean>
      item_sep = <string>
      data_sep = <datasep>
      request_limit = <number>

      [channels]
      <number> = <type> <direction> [<attrib>] [timeout <number>] [threshold <number>],<item>

      pokud <type> = block: <item> —> <blockitem>

      [<blockitem>]
      item = <type> [<direction>] [<attrib>] [timeout <number>],<item>

      type —> boolean | shortcard | cardinal | longcard
           | shortint | integer | longint | real | string | block

      direction —> input | output | bidirectional

      attr —> item | advise | advisedata | advisedatanoread

Popis:

  string ... řetězec
  number ... celé číslo
  boolean ... TRUE | FALSE
  pathname and parameters ... cesta a jméno včetně parametrů
  type = boolean | shortcard | cardinal | longcard | shortint | integer | longint | real | string | block
  direction = input | output | bidirectional
  attrib = advise | advisedata | advisedatanoread
  item ... textový název položky
  datasep ... 3 byte zapsané hexadecimálně (např. 0A0D07) pro separaci dat

  name ... udává název služby DDE serveru
  topic ... udává téma DDE spojení
  monitor ... zapne/vypne mód sledování aktivity ovladače
  connect_attempts ... počet pokusů o připojení
  connect_timeout ... prodleva odezvy serveru při připojování v 1/10 s
  reconnect_attempts ... počet pokusů o komunikaci před ukončením rozpadlého spojení a ustavením nového
  reconnect_timeout ... prodleva před pokusem ovladače o opětovné připojení v 1/10 s
  operation_timeout ... prodleva na odezvu při výměně dat
  operation_attempts ... počet pokusů při výměně dat
  run_service ... zapne/vypne režim spouštění aplikace DDE serveru
  service_path ... udává název souboru s plnou cestou a parametry (aplikace DDE serveru)
  decimal_char ... desetinné znaménko pro textové konverze čísel
  true_text ... řetězec reprezentující hodnotu log. 1
  false_text ... řetězec reprezentující hodnotu log. 0
  driver_crash ... povolí mechanismus předávání zpráv o chybách komunikace
  item_sep ... řetězec, který slouží jako oddělovač položek
  data_sep ... tři znaky separátoru dat
  request_limit ... maximální počet současně odbavovaných požadavků

Popis atributů:

- pokud není uveden žádný atribut, kanál reaguje pouze na požadavky jádra systému Control Web
- advise — ovladač reaguje na zprávy o změně dat na DDE serveru (vyvolání výjimky ovladače)
- advisedata — kanál přijímá zprávy a data při každé jejich změně na DDE serveru (vyvolání výjimky ovladače)
- advisedatanoread — kanál přijímá zprávy a data při každé jejich změně na DDE serveru (vyvolání výjimky ovladače), čtení kanálu nikdy nezpůsobí přenos dat ze serveru

Přehled ovladačů