Active FieldTM
Počínaje verzí 4.3 mohou uživatelé Quickfield využívat volnosti při přípravě a vytváření vlastních programových skriptů
pomocí objektové QuickField knihovny. Tato technologie je založena na bázi OLE Automation a nazývá se Active Field. Další podrobné informace k aktuální verzi Active FieldTM (podrobné představení, popis objektového modelu, ukázkové příklady atp.) lze v angličtině nalézt na http://active.quickfield.com |
Aplikace ActiveField technologie programu QuickField
autor: Ing. Pavel Dvořák
Úvodem bych chtěl říci, že tento text si neklade za cíl naučit čtenáře programovat pomocí ActiveField technologie. Tento text
je jakýmsi shrnutím mnou nabytých informací jak tuto technologii používat ve vlastních aplikacích. V první části tohoto textu je
stručně probrán postup použití a ve druhé části čtenář nalezne ilustrativní příklad, který znázorňuje možnosti ActiveField technologie
v praktickém využití. Dosti tedy povídáního a směle do první části. |
Stručný přehled |
Nejprve je zapotřebí implementovat objektovou knihovnu, která je součástí instalace programu QuickField (QuickField 5.0 Object Library) a
to následujícím způsobem. V programu Excel spustíme programovací prostředí Visual Basic a tam v menu aktivovat již zmíněnou knihovnu
(Tools -> References -> QuickField 5.0 Object Library) podle verze programu QuickField (viz. Obr. 1)![]() Nyní máme vše potřebné pro tvorbu vlastní QuickField (dále QF) aplikace. Tak že, začneme tím, že v čistém formuláři nastavíme proměnné nesoucí právě objekt programu QF. Private QF As QuickField.Application Private prbProblem As QuickField.Problem Dále je zapotřebí spustit program QF a to takto Dim QF As QuickField.Application Set QF = CreateObject("QuickField.Application") Funkce CreateObject spustí program QF a vrátí na něj referenci. Pomocí této reference lze posléze přistupovat k jednotlivým proměnným programu QF. Dále nastavíme cestu k řešenému problému QF.DefaultFilePath = WorkBook_Name.path nebo QF.DefaultFilePath = "specifická cesta" A pokračujeme vytvořením problému. Nyní si musíme položit otázku, zda budeme vytvářet problém zcela nový, nebo jej vytvoříme (či je již vytvořen) v prostředí QF. Tedy použijeme následujících syntaxí Set prbProblem = QF.Problems.Add Dále je nutno dodefinovat parametry (viz. dále) Pomocí tohoto zápisu vytvoříme zcela nový problém. Následující zápis otevře již existující problém. Set prbProblem = QF.Problems.Open("Název existujícího prb *.pbm") Je možnost nastavit jednotlivé parametry daného problému uloženého v proměnné prbProblem With prbProblem .ProblemType = typ problému (viz dále) .Class = typ souřadnic (viz. dále) .LengthUnits = délkové jednoty (viz. dále) .Coordinates = typ souřadného systému (viz. dále) .ReferencedFile(qfModelFile) = "*.mod" .ReferencedFile(qfDataFile) = "*.dms" .SaveAs "*.pbm" End With Nyní k jednotlivým proměnným .ProblemType označuje definice typů problému
Nyní máme nadefinován problém a je možno s ním dále pracovat. V dalším si povíme něco o tom, jakým způsobem upravit geometrii vytvořeného modelu, jak nastavit zdroje pole a okrajové podmínky a naposled jakým způsobem analyzovat výsledek a počítat související veličiny. Jak pracovat s geometrií již vytvořeného modelu nám poví následující řádky. Tímto způsobem se takzvaně přepneme do okna s geometrií řešeného problému (předpokládám, že již existuje. Pokud ne, lze geometrii vytvořit programově (viz. [1]) nebo v prostředí QF. Dim prbModel As QuickField.Model prbProblem.LoadModel Set prbModel = prbProblem.Model Opět si tyto řádky okomentujeme. První řádek vytvoří v paměti prostor pro proměnnou prbModel příslušného typu, která nese referenci o geometrii. Další řádek tuto geometrii nahraje a poslední řádek proměnné prbModel přiřadí tu referenci. Nyní můžeme pracovat s geometrií. prbModel.Shapes umožňuje přístup k dalším prvkům pro práci s modelem. Těmi jsou vytváření bodů a úseček (.AddVertex, .AddEdge), vytváření a rušení síťě (.BuildMesh, .RemoveMesh), přiřazování názvů jednotlivým prvkům modelu (bodům, úsečkám, oblastem) nebo pohybování jednotlivými částmi. Více ukáží následující příklady prbModel.Shapes.LabeledAs(Block:="NázevOblasti").Delete prbModel.Shapes.AddEdge QF.PointXY(x1,y1),QF.PointXY(x2,y2) prbModel.Shapes.LabeledAs(Vertex:="NázevBodu") .Move qfShift,QF.PointXY(D, 0) První řádek vymaže oblast s názvem NázevOblasti. Druhý řádek vytvoří úsečku s počátečním bodem [x1, y1] a koncovým [x2, y2]. Poslední řádek posune bod (body) s názvem NázevBodu o úsek D jednotek na vodorovné ose (např. v ose x). Další možnosti jsou čtenáři k dispozici v helpu (viz. [1]). A nakonec, když už je všechna práce s modelem hotova, uložíme a uzavřeme model. prbModel.Save prbModel.Close Jako další si ukážeme jak nastavit zdroje pole a okrajové podmínky. V tomto případě je nutné si nadefinovat proměnné, které ponesou informace o přiřazených názvech jednotlivých elementů modelu. Dim prbLabel As QuickField.Label Dim prbLabelCnt As QuickField.LabelBlockMS Set prbLabel = prbProblem.Labels(qfBlock).Item("Civka") Set prbLabelCnt = prbLabel.Content prbLabelCnt.Loading = CurrentDensity prbLabel.Content = prbLabelCnt V tomto příkladu, který je pro magnetostatický problém definujeme zdroj pole ve formě proudové hustoty do cívky. Ale pěkně popořádku. První řádek definuje identifikátor proměnné, která je typu Label. Druhý řádek definuje proměnnou, která je specifického typu k jednotlivému typu pole a jednotlivému druhu elementu. Další řádek nastaví proměnnou prbLabel a ta nese referenci o oblasti s názvem Civka. Je důležité, aby název elementu, který chceme modifikovat, byl stejný s názvem téhož elementu definovaného v modelu a to i co se týče velikosti znaků. Na dalším - čtvrtém řádku je přiřazení reference na to, co vybraný element obsahuje. Pátým řádkem nastavíme parametry pro vybraný element (v tomto případě proudovou hustotu, ale můžeme i permitivitu (.Kxx, .Kyy) a jiné (opět viz. [1]). Stejným způsobem je možno definovat okrajové podmínky, avšak je nutná mírná úprava Dim prbLabel As QuickField.Label Dim prbLabelCnt As QuickField.LabelEdgeMS Set prbLabel = prbProblem.Labels(qfEdge).Item("NázevHrany") Set prbLabelCnt = prbLabel.Content prbLabelCnt.Dirichlet = hodnota nebo .Neumann = hodnota prbLabel.Content = prbLabelCnt Nakonec je ještě třeba uložit změny prbProblem.DataDoc.Save A pomalu se dostáváme na konec první části. Shrňme si co již máme hotovo. Máme nadefinovaný problém, model, zdroje pole a okrajové podmínky. Zbývá jen problém vyřešit a vypočítat potřebné další veličiny. Tak směle do toho. Pro vyřešení problému je zapotřebí napsat následující dva řádky, které si posléze popíšeme. If prbProblem.CanSolve Then prbProblem.SolveProblem If prbProblem.Solved Then prbProblem.AnalyzeResults
Tak že, první řádek nám říká, že pokud je možno problém řešit, tak jej QF vyřeší, druhým řádkem můžeme vykonat kroky, které vedou k získání vypočtených hodnot. Abychom mohli pracovat s výsledky, je nutné se opět takzvaně přepnout do okna s výsledky. Dim prbResults As QuickField.Result Dim prbField As QuickField.FieldWindow Set prbResults = prbProblem.Result Set prbField = prbResults.Windows(1) První dva řádky opět nastavují identifikátor proměnné, ve třetím řádku přiřadíme proměnné referenci na výsledky a ve čtvrtém referenci na vyřešené pole. Nyní stačí určit, co a kde chce- me určit. Tak například, pokud budeme chtít vypočíst nějakou integrální veličinu, tak to provedeme následujícím zápisem. prbField.Contour.AddBlock "Kotva" CalculateForce = prbResults.GetIntegral(qfInt_MaxwellForce).Abs V prvním řádku vybereme oblast, kde chceme počítat (často se také setkáme, že chceme spočítat nějakou veličinu na nějaké orientované hraně, to se provede následovně prbField.Contour.AddEdge QF.PointXY(x1,y1),QF.PointXY(x2,y2)). Druhým řádkem přiřadíme integrál na dané oblasti (v tomto případě sílu dle Maxwellova tenzoru). Samozřejmě že existují další integrály. Tyto čtenář najde opět v [1]. Další možností je určení rozsahu Dim prbPicture As QuickField.FieldPicture Set prbPicture = prbField.PictureSettings prbPicture.ColorMap = qfPotential Tmin = prbPicture.ColorScale(qfMin) Tmax = prbPicture.ColorScale(qfMax) Tento příklad je pro určení maximální a minimální teploty v celém definičním prostoru. Tímto jsem se dostal na samý závěr první části. Je zřejmé, že tento popis není vyčerpávající, jelikož jsem, zdaleka neovládl celou techniku a zde zvedené příklady jsem zkonstruoval pouze pro svou potřebu a pro rychlejší a pohodlnější řešení problémů, které se dají programem QF řešit a jsou vhodné pro algoritmizaci. Pokud by nastal nějaký dotaz či připomínka, uvedu zde ještě svou email, aby případný zájemce mohl poslat svůj příspěvek... |
Ilustrativní příklad |
Na příkladu výpočtu statické charakteristiky aktuátoru (obr. 2) bych chtěl ilustrovat princip použití ActiveField. Nebudu zde zbytečně popisovat jednotlivé
příkazy jazyka BASIC a tiše předpokládám, že čtenář zná základy programování pod WINDOWS. Tak tedy k příkladu. Nejprve zde uvedu fakt, že celé nastavení problému bylo provedeno v prostředí QuickField. ![]() Následující obrázek (obr. 3) znázorňuje pracovní okno programu EXCEL, kde jsou v jednotlivých žlutě označených buňkách uloženy vstupní proměnné, které slouží pro předběžný výpočet dalších proměnných potřebných pro řešení. ![]() Nyní již k programu samému. Na následujících řádcích je uveden celkový výpis programu, který je napsán v prostředí MS Excel. Výpis je doplněn o komentář, a proto si myslím, že nemá smysl zde nic dalšího povídat a směle do komentáře... ![]() |