O společnostiProduktyObchodPodpora
Moravské přístroje
Hlavní stránka
O společnosti
Stažení software
Stažení dokumentů
Produkty
Control Web
Strojové vidění VisionLab
Kamery DataCam a osvětlovače DataLight
Průmyslový počítačový systém DataLab
Vědecké kamery
Speciální technika
Ceník
Aktivace produktů
Služby
Školení
Zakázková řešení
Podpora
Volba kamery a objektivu pro Strojové vidění
Control Web - Ukázkové aplikace

Hlavní stránkaProduktyProgramový systém Control WebOvladače pro Control Web a OPC Server

Ovladač pro Microsoft Excel
Ovladač umožňuje pracovat z aplikace systému Control Web s tabulkami Microsoft Excel. Ovladač pro práci s tabulkami používá aplikaci Microsoft Excel, proto vyžaduje nainstalovaný Microsoft Excel minimálně verze 2007. Excel je při práci s tabulkou spuštěný jako samostatný proces, může být viditelný nebo skrytý.

Vlastnosti ovladače

Ovladač 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:

  • blokující (synchronní) Například StartExcel(), Open(), Save(), SaveAs()

    procedury po celou dobu vykonávání požadované akce zablokují volajícího, to způsobí zastavení celé aplikace. Tyto procedury je vhodné používat pouze v aplikacích, které v daný okamžik mimo práce s Excelem nevykonávají žádnou činnost.

  • neblokující (asynchronní) jména procedur začínají klíčovým slovem Async. Například: AsyncStartExcel(), AsyncOpen(), AsyncSave(), AsyncSaveAs()

    zavoláním procedury pouze zahájí požadovanou operaci. Operace probíhá na pozadí a po jejím dokončení je vyvolána výjimka ovladače a nastaven kanál č 1. Na dokončení operace je možné čekat čtením tohoto kanálu. Pokud je požadováno čtení a probíhá asynchronní operace, ovladač dokončí čtení až po dokončení operace. Pokud má tento kanál nastaven timeout, je možné čekat na jeho přečtení - tedy na dokončení operace bez zablokování zbytku aplikace (čeká jenom přístroj, který operaci spustil). Tento postup je vysvětlen v samostatné ukázce v kapitole Asynchronní operace Asynchronní operace.

Procedury ovladače

Procedury 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:

StartExcel() : boolean
AsyncStartExcel() : boolean

Procedura spustí Microsoft Excel. Pokud proběhne spouštění úspěšně vrací funkce hodnotu true. Microsoft Excel při spuštění vytvoří nový dokument, který obsahuje jeden prázdný list.

StopExcel() : boolean
AsyncStopExcel() : boolean

Procedura ukončí Microsoft Excel. Pokud proběhne úspěšně vrací funkce hodnotu true.

SetVisible( visible : boolean ) : boolean

Procedura umožňuje nastavit viditelnost aplikace Microsoft Excel. Pokud nastavení proběhne úspěšně vrací funkce hodnotu true.

SetInteractive( interactive : boolean ) : boolean

Procedura umožňuje povolit uživateli zasahovat do tabulek v aplikaci Microsoft Excel. Pokud je interactive = false, je editace v Excelu zakázána. Pokud nastavení proběhne úspěšně vrací funkce hodnotu true.

New() : boolean
AsyncNew() : boolean

Procedura vytvoří nový prázdný soubor. Pokud proběhne úspěšně vrací funkce hodnotu true.

Open( FileName : string ) : boolean
AsyncOpen( FileName : string ) : boolean

Procedura otevře soubor dle parametru FileName. Pokud proběhne úspěšně vrací funkce hodnotu true.

Save() : boolean
AsyncSave() : boolean

Procedura uloží soubor. Pokud proběhne úspěšně vrací funkce hodnotu true.

SaveAs( FileName : string ) : boolean
AsyncSaveAs( FileName : string ) : boolean

Procedura uloží soubor pod novým jménem dle parametru FileName. Pokud proběhne úspěšně vrací funkce hodnotu true.

Close() : boolean

Procedura zavře aktuální soubor. Pokud proběhne úspěšně vrací funkce hodnotu true.

SetValue( Row, Column : longcard; Value : string ) : boolean;

Procedura nastaví hodnotu Value do buňky dle parametrů Row - řádek, Column - sloupec. Touto procedurou je možné zadat také vzorek, vkládaný text musí začínat rovnítkem.

GetValue( Row, Column : longcard; var Value : string ) : boolean;

Procedura vrátí obsah buňky dle parametrů Row - řádek, Column - sloupec. Pokud buňka obsahuje vzorec, procedura vrátí výsledek vzorce. Pro přečtení vzorce slouží procedura GetFormula.

HasFormula( Row, Column : loncard; var HasFormula : boolean ) : boolean

Procedura umožňuje zjistit jestli buňka (dle parametrů Row - řádek, Column - sloupec) obsahuje vzorec.

SetFormula( Row, Column : loncard; Formula : string ) : boolean

Procedura nastaví vzorec do buňky dle parametrů Row - řádek, Column - sloupec. Vzorec je zadáván bez rovnítka na začátku.

GetFormula( Row, Column : loncard; var Formula : string ) : boolean

Procedura v parametru Formula vrací vzorec buňky dle parametrů Row - řádek, Column - sloupec. Vzorec je bez rovnítka na začátku.

SetTextColor( Row, Column : loncard; Red,Green,Blue : cardinal ) : boolean

Procedura nastaví barvu textu v buňce určené parametry Row - řádek, Column - sloupec.

SetInteriorColor( Row, Column : loncard; Red,Green,Blue : cardinal ) : boolean

Procedura nastaví barvu výplně buňky určené parametry Row - řádek, Column - sloupec.

GetSheetsCount() : longcard

Procedura vrací počet listů v souboru.

ActivateSheet( Sheet : longcard ) : boolean;

Procedura nastaví vybraný list.

GetSheetName( var SheetName : string ) : boolean;

Procedura vrací jméno aktivního listu.

SetSheetName( SheetName : string ) : boolean;

Procedura nastaví jméno aktivního listu.

CreateSheet() : boolean

Procedura vytvoří nový list.

DeleteSheet() : boolean

Procedura smaže aktivní list. Microsoft Excel ve většině verzí nedovolí smazat poslední list.

Asynchronní operace

V 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;



 
 | O společnosti | Produkty | Podpora | Stažení software | Stažení dokumentů | 
Moravské přístroje, a.s., Masarykova 1148, Zlín-Malenovice, 76302