PESexcl PODPORA PRO VÝMÌNU DAT S APLIKACÍ MICROSOFT EXCEL s využitím DDE serveru PESdde
PESexcl Hotová pøedpøipravená makra VBA pro program Microsoft EXCEL umožòující výmìnu tabulek dat s automaty MICROPEL uživatelská pøíruèka - edice 04.2002 1. verze dokumentu PESexcl MICROPEL 2002 všechna práva vyhrazena kopírování publikace dovoleno pouze bez zmìny textu a obsahu http://www.micropel.cz 2 PESEXCL podpora pro výměnu dat s aplikací MS EXCEL 04/2002 8 stran 2
ÚVOD Hlavním komponentem níže popsané podpory jsou makra v jazyce VBA (Visual Basic for Application), která lze pøímo zaèlenit do dokumentù vytvoøených v programu Microsoft EXCEL z balíku programù Microsoft Office. Umožòuje v tabulce otevøené v programu Microsoft EXCEL zobrazovat a nastavovat hodnoty v síti automatù PES (takto lze tedy vytvoøit i jednoduchou vizualizaci). Komunikace probíhá pomocí služeb DDE, které Microsoft EXCEL využívá. Aby byla pøes DDE možná komunikace s pøipojenými automaty, musí být na poèítaèi spuštìn komunikaèní DDE server PESdde (je k dispozici na www.micropel.cz nebo na distribuèním CD) a sí automatù MICROPEL pøipojena na nìkterý z COM portù poèítaèe pøes pøevodník PES-CA1. Program EXCEL poskytuje v zásadì dvì možnosti, jak pøistupovat k datùm v síti automatù PES. Jednak pøímým zápisem formule pro rozhraní DDE do buòky EXCELu a jednak použitím vestavìného programovacího jazyku VBA. Obì možnosti mají své výhody i nevýhody. Pro použití VBA jsme pøipravili univerzální funkce pro mapování dat z tabulky EXCELu do automatu a zpìt. Pøílohou je pøíklad dokumentu VizDDE.xls. Pøímý zápis formule DDE Použití pøímého zápisu formule rozhraní DDE je popsáno podrobnì v dokumentaci k DDE serveru PESdde. Obecnì lze tuto metodu popsat tak, že uživatel zapíše do buòky EXCELu formuli DDE, program EXCEL tuto formuli provede a do buòky zobrazí buï data (v pøípadì ètení ze sítì), nebo výsledek operace (v pøípadì zápisu dat do sítì). Tato metoda je výhodná zejména proto, že na rozdíl od následující metody ve VBA, umožòuje ustanovit se serverem PESdde spojení pro ètení typu ADVICE. Toto spojení aktualizuje data v pøíslušné buòce v urèitém èasovém intervalu bez nutnosti zásahu uživatele. Této vlastnosti lze výhodnì využít pro zobrazování hodnot v kombinaci s použitím maker VBA. Nevýhodou pøímého zápisu formule DDE do buòky, zvláštì pøi vyèítání/zapisování více než jedné hodnoty, je komplikovaný formát dat (blíže viz dokumentace k PESdde). Za nevýhodu lze také považovat možnost nepovolaného zásahu do formule DDE koncovým uživatelem. Použití VBA (Visual Basic for Application) Tato metoda umožòuje v EXCELu mapovat tabulky dat do datových oblastí jednotlivých automatù (a obrácenì). Tato výmìna dat je inicializovaná uživatelem. Nejèastìji aktivací tlaèítka. Výhodou je jednoduché použití (napojením na funkce VBA z balíèku PESexcl lze získat již hotové mapování) a za výhodu lze také považovat umístìní kódu VBA mimo uživatelskou oblast koncového uživatele a uložením tohoto kódu pod pøístupové heslo. Následující èást dokumentu se vìnuje použití maker VBA. 3 PESEXCL podpora pro výměnu dat s aplikací MS EXCEL 04/2002 8 stran 3
INSTALACE A POUŽITÍ PODPORY PESexcl Instalace serveru PesDDE Podmínkou napojení programu EXCEL na sí automatù PES je server PESdde. Ten komunikuje s automaty pøes COM port poèítaèe a data poskytuje pomocí unifikovaného rozhraní DDE do operaèního systému. POZN.: PESdde je tøeba spustit ještì pøed spuštìním programu EXCEL, jehož dokument obsahuje makra pro komunikaci se serverem PESdde. Pokyny pro instalaci serveru PESdde jsou v dokumentaci - PESdde.pdf. Instalovat lze buï z distribuèního CD nebo z programových balíèkù, které jsou ke stažení na www.micropel.cz Instalace funkcí pro VBA balíèku PESexcl Tato èást má dva kroky. Prvním krokem je instalace vlastních funkcí pro VBA. Ta jsou uložena v otevøeném kódu VB v souboru DDEClientPES.bas a je tøeba je instalovat do každého dokumentu EXCELu, který má komunikovat s automaty. V programu EXCEL vytvoøíme nový dokument (nebo otevøeme již existující), zapneme vestavìný editor VBA a v nabídce Soubor (pøi vybraném projektu, který nese název otevøeného dokumentu EXCELu) vybereme Import soubor. Zobrazí se dialog pro nalezení souboru a po vybrání DDEClientPES.bas v seznamu projektu (levé okno) se zobrazí stejnojmenný modul. Druhým krokem je instalace knihovny VBAmodul.dll. (ta poskytuje funkcím posuvník pro zobrazování èasovì nároèných akcí). Instalace spoèívá ve spuštìní programu ivbamodul.exe, který požadovanou knihovnu uloží do systému a také ji zaregistruje. POZN.: Tento instalaèní program staèí spustit jen jednou. soupis souborù balíèku PESexcl: ivbamodul.exe VBAmodul.dl_ DDEClientPES.bas Popis funkcí pro VBA Instalovaný modul DDEClientPes (viz výše) poskytuje dvì výkonné funkce WriteTableToPLC( ) a ReadTableFromPLC( ) a dvì inicializaèní funkce. Úkolem tìchto funkcí je pøenášet vybranou oblast bunìk do a z automatu. Obì výkonné funkce mají stejný seznam parametrù a stejnou návratovou hodnotu pro vyjádøení výsledku operace. Liší se jen smìrem pøenosu dat. Inicializaèní funkce se volají bez parametrù pøed a po ukonèení operace. 4 PESEXCL podpora pro výměnu dat s aplikací MS EXCEL 04/2002 8 stran 4
WriteTableToPLC Funkce WriteTableToPLC ète zadanou tabulku a hodnoty z tabulky zapisuje do pamìti automatu. Parametry funkce popisují zdroj dat (tabulku v EXCELu) a cíl (automat). Tabulka nemusí být jen dvojrozmìrná, ale mùže být ve formì øádku nebo sloupce. V každém pøípadì je oblast tabulky vymezena levým horním a pravým dolním bodem, tedy buòkou EXCELu. Také je tøeba urèit jak se tabulka má vyèítat. Zda po sloupcích (parametr COLUMN) nebo øádcích (parametr LINE). Tento parametr je tøeba uvést i v pøípadì, že se jedná o jednorozmìrnou tabulku (øádek nebo sloupec). Cílem dat je automat. Tam je tøeba urèit adresu automatu v síti, typ pamìti (stack, bity, wordy) a adresu v daném typu pamìti, od které se budou data zapisovat. Nepovinným parametrem je parametr perlen. Ten používáme tehdy, když na jednu akci uživatele voláme více funkcí WriteTableToPLC a nebo ReadTableFromPLC za sebou. Nenulová hodnota tohoto parametru sdìluje funkci jaká procentuální èást ukazatele prùbìhu mu pøipadá. Tato hodnota by mìla pøibližnì vyjadøovat procentuální množství dat, které volaná funkce zapisuje z celkového množství dat, zapisovaných (nebo ètených) v daném makru. Pokud tato hodnota chybí, pak si funkce pøisoudí celý ukazatel prùbìhu. Tento stav odpovídá situaci, že máme jen jeden pøíkaz na ètení a nebo zápis v uživatelském makru. Deklarace funkce : Function WriteTableToPLC ( ByVal direction As String, _ ByVal startline, _ ByVal startcol, _ ByVal endline, _ ByVal endcol As Integer, _ ByVal typemem As String, _ ByVal addrplc As Integer, _ ByVal addrmem As Integer, _ Optional ByVal perlen = 100 ) As Boolean ReadTableFromPLC Funkce má stejný seznam parametrù a stejnou návratovou hodnotu pro vyjádøení výsledku operace jako funkce WriteTableToPLC. Liší se jen smìrem pøenosu dat. Tato funkce tedy naopak ète z pamì ové oblasti automatu hodnoty a zapisuje je do zadané tabulky EXCELu. 5 PESEXCL podpora pro výměnu dat s aplikací MS EXCEL 04/2002 8 stran 5
Popis parametrù funkcí direction textová hodnota "LINE" nebo "COLUMN" urèuje zda bude tabulka vyèítána po øádcích (LINE) nebo sloupcích (COLUMN) startline souøadnice levé horní buòky tabulky - èíslo øádku startcol endline endcol souøadnice levé horní buòky tabulky - èíslo sloupce souøadnice pravé dolní buòky tabulky - èíslo øádku souøadnice pravé dolní buòky tabulky - èíslo sloupce typemem textová promìnná, urèující druh pamìti, kam se data v automatu budou zapisovat (resp. èíst), mùže nabývat hodnot "stack", "bit", "word" addrplc adresa automatu v síti PESNET addrmem adresa v pamìti automatu, kde bude zaèátek bloku dat z tabulky POZOR! - rozumí se absolutní adresa - viz tabulka uvedená níže (bližší informace viz dokument PESvar.pdf) perlen (nepovinné) hodnota od 0 do 100, pøedstavuje takovou procentuální èást proužkového ukazatele, který má tato funkce k dispozici pro zobrazování prùbìhu operace Návratová hodnota Návratová hodnota je typu BOOL (pravda nepravda) a vyjadøuje požadavek uživatele na ukonèení operace. Na ukazateli prùbìhu operace je tlaèítko STORNO. Pokud uživatel zmáèkne toto tlaèítko, tak návratová hodnota funkce WriteTableToPLC je FALSE (nepravda). Pokud uživatel tlaèítko nezmáèkne je návratová hodnota funkce WriteTable- ToPLC TRUE. Z toho plyne konstrukce použití funkce ukázaná v následujícím pøíkladu. Absolutní adresy Pøiøazení absolutních adres pro jednotlivé typy pamì ových prostorù a registrù PLC pro jazyk SIMPLE V2 ukazuje následující tabulka: TYP OZNAÈENÍ V SIMPLE2 ABSOLUTNÍ ADRESA POZN. BIT X0... X31 0... 31 digitální vstupy Y0... Y31 32... 63 digitální výstupy M0... M127 64... 191 uživatelské bity B0... B127 192... 319 spec. funkèní bity I0... I31 0... 31 analogové vstupy WORD O0... O31 32... 63 analogové výstupy D0... D63 64... 127 uživatelské registry W0... W127 128... 255 spec. funkèní registry STACK 0... 11775 0... 11775 zásobník 6 PESEXCL podpora pro výměnu dat s aplikací MS EXCEL 04/2002 8 stran 6
InitVBAmodul Procedura InitVBAmodul inicializuje globální hodnoty potøebné pro práci výše uvedených funkcí a je tedy nutné ji volat pøed voláním funkcí ReadTableFromPLC a WriteTableToPLC. CloseVBAmodul Procedura CloseVBAmodul uzavírá globální objekty a v pøípadì, že bìhem komunikace došlo k chybám, vypíše seznam adres automatù, s nimiž nebylo navázáno spojení. Pøíklad: Private Sub Tlaèítko_Click() Call InitVBAmodul 'inicializace globálních objektù If WriteTableToPLC("LINE", 10, 3, 20, 15, "stack", 30, 10, 50) = False Then GoTo ENDmakro ' øádkový zápis dat z tabulky, jejíž levý horní roh je buòka 10,3, pravý dolní roh je buòka 20,15, zapisovat se bude do automatu s adresou 30 - do zásobníku od pozice 10. Toto makro má k dispozici 50% ukazatele prùbìhu If WriteTableToPLC("COLUMN", 22, 3, 32, 15, "bit", 1, 20, 50) = False Then GoTo ENDmakro 'sloupcový zápis dat z tabulky, jejíž levý horní roh je buòka 22,3, pravý dolní roh je buòka 32,15, zapisovat se bude do automatu s adresou 01 a do bitových promìnných od adresy 20. Toto makro má k dispozici 50% ukazatele prùbìhu ENDmakro: Call CloseVBAmodul End Sub 'návìš í konce programu 'ukonèení globálních objektù Chybové stavy, hlášení Pokud nìkterá funkce ( WriteTableToPLC, ReadTableFromPLC) nemùže být provedena (tady bývá ta chyba, že cílový automat neodpovídá), zapíše si vzniklou chybu do svého vnitøního objektu, ale její návratová hodnota je TRUE, tedy následující funkce mohou být vykonány. Oznámení chyby je zobrazeno až po ukonèení komunikace a zavolání funkce CloseVBAmodul. To znamená, že pokud je v uživatelském makru více funkcí (WriteTableToPLC, ReadTableFromPLC) provedou se všechny i v pøípadì lokálních chyb a chybné adresy se zobrazí až na konci provádìní makra. 7 PESEXCL podpora pro výměnu dat s aplikací MS EXCEL 04/2002 8 stran 7
Napojení maker na Tlaèítko Máme-li nìjakou oblast dat v EXCELu kterou chceme ukládat nebo èíst, je tøeba tuto operaci odvodit od akce uživatele. Nejjednodušším zpùsobem je napojením na tlaèítko. Program EXCEL umožòuje vložit tlaèítko dvìma zbùsoby: 1) Z menu Zobrazit (View) vybereme Panely nástrojù (Toolbars) a zaškrtneme položku Visual Basic. Zobrazí se panel s mininabídkou. Kliknutím na tlaèítko Ovládací prvky se zobrazí panel s prvky. Vybereme tlaèítko a na požadovaném místì ho vytvoøíme pomocí kurzoru myši. Pravým tlaèítkem myši dostaneme místní nabídku. Pøes položku Vlastnosti mùžeme mìnit nápis na tlaèítku (Caption), velikost písma (Font). Položka (Name) urèuje, jaké makro se bude pøipojovat (Name_Click). Pøes položku Zobraz kód se dostaneme do pøeddefinovaného makra, které je prázdné, je pøipojené k tlaèítku a jmenuje se podle názvu tlaèítka s pøíponou _Click. V tomto makru je pak tøeba volat potøebné funkce InitVBAmodul, WriteTableToPLC, ReadTableFromPLC, CloseVBAmodul. Po ukonèení editace klikneme na tlaèítko Ukonèit režim návrhu v nabídce panelu nástrojù Visual Basic a tím se možnosti editace tlaèítka zamknou. 2) Z menu Zobrazit (View) vybereme Panely nástrojù (Toolbars) a zaškrtneme položku Formuláøe (Forms). Zobrazí se panel, nabízející rùzné prvky. Vybereme prvek Tlaèítko a na požadovaném místì ho vytvoøíme pomocí kurzoru myši. K tomuto prvku pøiøadíme makro, které musí již existovat nebo které v editoru VBA musíme sami vytvoøit. Tato metoda ale umožòuje editovat tlaèítko koncovému uživateli jako každý jiný prvek a navíc neautomatizuje napojení na makro v editoru VBA na rozdíl od pøedcházející metody. Pøíklad øádkové tabulky, kde každý øádek odpovídá jinému automatu Private Sub Tlaèítko2_Click() Call InitVBAmodul 'inicializace globálních objektù If WriteTableToPLC("LINE", 10, 3, 10, 15, "stack", 30, 10, 100 /3) = False Then GoTo ENDmakro If WriteTableToPLC("LINE", 11, 3, 11, 15, "stack", 1, 20, 100/ 3) = False Then GoTo ENDmakro If WriteTableToPLC("LINE", 12, 3, 12, 15, "stack", 1, 20, 100/3) = False Then GoTo ENDmakro ENDmakro: 'návìš í konce programu Call CloseVBAmodul 'ukonèení globálních objektù End Sub Uzamknutí kódu Projekt ve VBA editoru lze uzamknout proti nežádoucímu zásahu. Ve VBA editoru v levém oknì (prohlížeè projektù) vybereme náš projekt s modulem DDEClientPES a s makry pro tlaèítka. Pøes místní nabídku vybereme Vlastnosti projektu a v nich záložku Zámek. Tam zaškrtneme zamknutí a nastavíme heslo. Po pøíštím otevøení VBA editoru bude požadováno heslo pøed prohlížením projektu VBA. 8 PESEXCL podpora pro výměnu dat s aplikací MS EXCEL 04/2002 8 stran 8