Moravské přístroje, a. s., zdroj: https://www.mii.cz/art?id=992&lang=405, vytištěno: 02.11.2025 20:38:38
Hlavní stránka▹Produkty▹Programový systém Control Web▹Ovladače pro Control Web a OPC Server | 9.5.2019 |
|---|
Vlastnosti ovladačeOvladač nepoužívá parametrický ani mapovací soubor. V aplikaci se definuje pouze jméno ovladače:
driver
excel {driver = 'cw_excel.dll'};
end_driver;
Ovladač pro práci s tabulkami používá aplikaci Microsoft Excel. Excel je při práci s tabulkou spuštěný jako samostatný proces, může být viditelný nebo skrytý. Pokud je Excel viditelný, může být přepnutý v interaktivním režimu (uživatel v něm může pracovat), nebo může být editace zakázaná (viz procedury SetVisiblea SetInteractive). S ovladačem se pracuje vždy pouze prostřednictvím nativních procedur. Některé operace mohou být časově náročnější, proto existují ve dvou variantách:
Procedury ovladačeProcedury které pracují synchronně (nezačínají klíčovým slovem Async) vrací jako návratovou hodnotu výsledek operace (pokud dojde k chybě vrací false). Procedury začínající klíčovým slovem Async pracuje asynchronně (pouze zahájí operaci a ihned skončí) vrací false pokud není možné zahájit požadovanou operaci. To je v případě kdy předchozí operace neskončila. Ovladač poskytuje následující procedury:
Asynchronní operaceV následujícím příkladu si ukážeme jak můžeme jednoduše čekat na dokončení operace ovladačem bez zablokování zbytku aplikace. Ve většině případů potřebujeme vykonat posloupnost několika operací (například: spustit Excel, otevřít soubor, zapsat několik hodnot a uložit soubor). Novou operaci je možné zahájit až po dokončení předchozí operace. Nový požadavek můžeme zahájit až po skončení předchozího. Pokud nemůžeme využít synchronní (blokující) procedury (nemůžeme zablokovat celou aplikaci na dobu kdy Excel pracuje) musíme používat asynchronní procedury a čekat v přístroji na jejich dokončení. K čekání využijeme kanál č 1. kterému nastavíme timeout. Čtení tohoto kanálu trvá tak dlouho dokud pracuje procedurou spuštěná operace. V aplikaci definujeme ovladač a kanál:
driver
excel {driver = 'excel.dll'};
end_driver;
channel
ch_1 : boolean {driver = excel; driver_index = 1; direction = input; timeout = 10};
end_channel;
Celá sekvence musí proběhnout v časovém kroku přístroje. Naprogramujeme ji tedy v proceduře OnActivate(). Nejprve zahájíme požadovanou operaci: b := excel.AsyncStartExcel(); nyní musíme počkat na dokončení. Příkazem yield přerušíme provádění procedury. Procedura bude pokračovat v následujícím časovém kroku. V novém časovém kroku přečteme kanál č 1. Komunikace tohoto kanálu bude trvat tak dlouho dokud bude ovladač vykonávat předchozí příkaz (AsyncStartExcel). Aktivace našeho přístroje musí počkat na dokončení čtení tohoto kanálu a díky tomu počká i na dokončení operace ovladače. Maximální doba čekání odpovídá parametru timeout kanálu ch_1.
yield;
ok := ch_1;
Nyní zkontrolujeme výsledek operace a pokračujeme dalším krokem:
if not ok then
stop;
end;
b := excel.AsyncOpen( 'a.xlsx' );
Kompletní příklad otevře soubor, zapíše 10 hodnot, uloží soubor a ukončí Excel. Pro přehlednost je zde vynecháno kontrolování výsledků operace.
driver
excel {driver = 'excel.dll'};
end_driver;
data
channel
ch_1 : boolean {driver = excel; driver_index = 1; direction = input; timeout = 10};
end_channel;
end_data;
instrument
button button_2;
gui
owner = panel_1;
position = 661, 14, 100, 51;
end_gui;
text_list
text = 'RUN';
end_text_list;
procedure OnActivate();
var
b,ok : boolean;
i : integer;
begin
b := excel.AsyncStartExcel();
yield; // *** Časový krok 2 ***************************************************
ok := ch_1;
b := excel.AsyncOpen( 'a.xlsx' );
yield; // *** Časový krok 3 ***************************************************
ok := ch_1;
for i := 1 to 10 do
b := excel.SetValue( i,1,'Row ' + i:s );
end;
b := excel.AsyncSaveAs( 'b.xlsx' );
yield; // *** Časový krok ***************************************************
ok := ch_1;
b := excel.Close();
end_procedure;
procedure OnPress();
begin
send self;
end_procedure;
end_button;
end_instrument;
|