Moduly

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)

QuickField - Active Field

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
  • magnetostatika (qfMagnetostatics)
  • elektrostatika (qfElectrostatics)
  • teplotní pole (qfHeatTransfer)
  • a další (viz. [1])
.Class definuje třídu typu souřadnic
  • X-Y (qfPlanParallel)
  • R-Z (qfAxisymmetric)
A dále už jen heslovitě: .LengthUnits definuje typ souřadného systému (kartézský nebo válcový), .ReferncedFile definuje datový soubor a soubor s geometrií a nakonec je potřeba vše uložit (.SaveAs).

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
  • sem přijde to, co se má udělat (např. záznam dat, výpočet další veličiny a pod.
   End If

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.

QuickField - Active Field

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í.

QuickField - Active Field

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...

QuickField - Active Field
 
QuickFieldTM a ActiveFieldTM jsou ochrannými známkami společnosti Tera Analysis Ltd.    RocketTheme.    Webhosting: WEBOVARESENI.CZ