Skriptování versus programování v Ansys – jak se v tom vyznat a kdy co použít?
Vyznat se v této specifické oblasti IT pro nás inženýry výpočtáře není moc jednoduché, ale o to více je to lákavé pro použití. Přece jenom i krátký skriptík nám může ušetřit spoustu času. Pojďme si nyní trochu encyklopedicky objasnit pár termínu, které nás mohou nasměrovat, co studovat dál.

Skriptování versus programování
Programovaní je tu tak dlouho, jak dlouho tu máme počítače. Program (textový kód) je kompilován do strojového kódu (binární soubor), který je čitelný pro Váš procesor. Program je tedy sada instrukcí, které provádí procesor počítače (CPU) po zavedení (spuštění). Protože programy jsou spouštěny OS (operačním systémem), tak je třeba přizpůsobit a provést kompilaci pro různé OS (Windows, Linux, Android, …). Textový kód použitý pro kompilaci je běžně nazýván jako zdrojový kód (textový soubor).
Skriptování je modernější způsob, jak programovat, kdy váš kód není třeba kompilovat. Kód je čten až za běhu interpretem, který ho následně převádí do strojového kódu. Pak stačí mít interpret zkompilovaný pro používanou platformu (OS) a váš kód beze změny může běžet. Váš program je běžně uchován pouze jen v textové podobě (textový soubor) a nazýváme ho běžně jako skript (historicky např. macro).
Programování | Skriptování | |
---|---|---|
Výhody | Rychlost programu | Multi-platform (přenosiltenost), dynamika kódu |
Nevýhody | Nepřenositelnost (jeden OS) | Rychlost (čtení kódu za běhu program) |
Kompilace / interpret | Kompilace pro CPU | Interpret |
Příklady jazyků | C, C++, Pascal, Fortran, … | JavaScript, Python, APDL, … |
Typické použití | Vývoj programu/aplikace | Ovládaní a rozšiřování existujícího nebo vývoj multi-platformí programu/aplikace |
Syntaxe
Existují definovaná pravidla správného zápisu zdrojového kódu tak, aby šel kód kompilovat nebo číst interpretem. Tato pravidla se liší dle zvoleného programovacího/skriptovacího jazyka a jsou obecně nazývána syntaxe programovacího jazyka.
GUI vs. API
Asi je nám jasné, že počítačové programy potřebují vstupy od uživatele a poskytují výstupy. Doby, kdy i běžní uživatelé psali do příkazového řádku, jsou dávno pryč. Uživatel dnes vyžaduje ikonu a chce, aby s ním program komunikoval pomocí grafických prvků (dialogy, tlačítka, menu, …), což nazýváme Graphical User Interface (GUI).
Vedle toho stojí Application Programming Interface (API), které umožnují komunikaci mezi dvěma programy. Například jeden program používá funkce druhého, jeden program řídí druhý atd. Možností je opravdu hodně. Sem vlastně míříme, pokud např. chceme automatizovat nějaké naše úkony v Ansys. Tzn. nestačí znát programovací/skriptovací jazyk, ale musíme si i prostudovat API dokumentaci nadaného programu, abychom poznali jeho vnitřní strukturu.
Python vs. CPython vs. IronPython
Jsme inženýři a rádi bychom skriptovali. Pro tento účel vznikl moderní velice oblíbený skriptovací jazyk Python. Jazyk, u kterého je kladen důraz na jednoduchost a čitelnost je dáná samotnou syntaxí. Python jš opravdu často správnou volbou a proto kolem něho vznikla a dále se rozšiřuje obrovská komunita. I proto si ho Ansys zvolil jako hlavní skriptovací prostředek.
Máme-li hotový Python skript, je třeba zvolit interpreta. CPython je nejrozšířenější interpret pro jazyk Python. Naleznete ho skoro na každém počítači určeném pro inženýrské účely.
Interpret IronPython je druhou variantou, která byla vyvíjena pod taktovkou Microsoft. V ideálním světě by mělo být jedno, kterého interpreta vyberete, ale asi tušíte, že tomu tak není.
CPython | IronPython | |
---|---|---|
Jazyk (Syntaxe) | Python | Python |
Implementace | C (Python Software Foundation) | C# (Microsoft) |
Výhody | Obrovské rozšíření a výběr přídavných modulů | Kompatibilita s produkty Microsoft |
Matematické a fyzikální přídavné moduly (balíčky) | NumPy, SciPy, Pandas, Matplotlib, TensorFlow | Math.Net Numerics |
Inženýrské použití | Zpracovaní experimentů, vizualizace dat, strojové učení (AI), … | Napojení na Ansys, Microsoft Excel, PowerPoint, … |
Automatizace vs. customizace
Příkladem automatizace může být skriptík, který aplikuje tisíc konkrétních sil do jedné konkrétní analýzy. Pravděpodobně nepůjde bez modifikace stejný skript použit i v další analýze.
Pokud se nám skriptík na tisíc sil povede zobecnit, odladit pro různé uživatelské vstupy a dát mu konkrétní tlačítko např. do Ansys Mechanical do hlavního menu, pak mluvíme o customizaci.
Je zřejmé, že hranice mezi těmito termíny je velmi vágní.
Ansys ACT vs. Ansys PyAnsys
ACT (Application Customization Toolkit) je balíček nástrojů pro tvorbu vlastních funkcionalit do Ansys modulů. Součástí jsou jak nástroje pro tvorbu prvků uživatelského rozhraní, tak i přístup do API struktury konkrétních modulů. Oboje je třeba pro customizaci, avšak pro automatizaci nám stačí zpřístupněné API. Hlavním jazykem si Ansys zvolil Python a jako interpret je používán IronPython.
PyAnsys je novinkou v posledních verzích umožňující komunikaci mezi Python skriptem běžícím v CPython interpretovi s jednotlivými moduly Ansys. Stačí doinstalovat jen příslušný PyAnsys balíček do vašeho CPython interpreta a můžete skriptem interagovat s potřebnými moduly a to jen po nezbytně dlouho dobu. Seznam modulů PyAnsys naleznete zde.
Jak ACT, tak i PyAnsys jsou dostupné téměř pro všechny moduly Ansys (Mechanical, Fluent, Maxwel, Discovery, …), avšak způsob použití může byt odlišný.
Ansys ACT | Ansys PyAnsys | |
---|---|---|
Jazyk (Syntaxe) | Python | Python |
Interpret (typický) | IronPython | CPython |
Hlavní účel | Nástroje pro tvorbu UI, zpřístupnění API pro automatizaci | Nástroje na komunikaci s moduly Ansys, zpřístupnění API pro automatizaci |
Příklady použití | Drobná automatizace, customizace (toolbox, workflow, …) |
Drobná automatizace, optimalizační úlohy, webové aplikace, workflow úloh přes více modulů Ansys |
Skriptovatelné vs. kompilované ACT
ACT je mimo jiné určeno pro vývojáře přídavných nástrojů do Ansys a tak je jeho součástí i nástroj na kompilaci ACT do binárního WBEX typu souboru. Takto zkompilovaný tzv. extension je možné doinstalovat u jednotlivých uživatelů, kteří tuto funkcionalitu ocení.
Pak zdrojový kód lze nazývat jako skriptovatelné ACT. Ale skriptovatelné ACT je vlastně i jakýkoliv skriptík pro automatizaci.
APDL
APDL je skriptovací jazyk programu Mechanical APDL (classic Ansys), což je hlavní solver MKP úloh v Ansys Mechanical. Jazyk APDL má velice obdobnou syntaxi jazyka Fortran, což vychází i z historické doby, kdy tento program vznikal.
Znalost APDL může být velkou výhodou pro tvorbu rozšíření (extension) ACT, která přímo pracují se solverem Mechanical APDL.
Microsoft .NET Framework vs. Ansys
Jednoduše řečeno Microsoft .NET Framework je sada funkcionalit (dynamických knihoven) obsahujicí standardní prvky Windows (form, dialog, button, textbox, treeview, checkbox, radiobutton, …), aby nemusel vývojář tyto programovat „od nuly“. Součástí .NET je interpret IronPython ale i interpret C# (viz dále).
Velká část Ansys modulů je právě založena na Microsoft .NET, proto hlavním interpretem pro skriptování je právě IronPython.
C# (alias: CSharp)
Jazyk C# je moderní programovací jazyk, který je kompilovaný do mezi-kódu IL (Intermediate Language), který je překládán do strojového kódu až těsně po zavedení. Toto vyžaduje prezenci .NET knihoven na cílovém počítači (v konkrétní verzi). C# se snaží využít výhod obou světů: rychlost kompilovaných programů a multi-platformost skriptování. Microsoft neustále C# zdokonaluje a chlubí se, že nejnovější verze dokáží optimalizovat během kompilace, že výstupní program je rychlejší než C++ rutiny.
Podmínky, cykly, funkce, procedury
Podmínky „if“ jsou naprosto základním stavebným kamenem veškerého programování. Rozbočit kód dle nějakého aktuálního stavu je zcela holou nutností, bez toho by programování nebylo programování.
Pokud některé operace chci provést opakovaně, není nic jednoduššího, než dané řádky zkopírovat. Jakmile však přijde požadavek na změnu a/nebo se ukáže, že program nefunguje úplně korektně, začneme hledat inkriminované místo. A následně se místo pokusíme opravit/změnit. Při použití techniky kopírování kódu pravděpodobně neopravíme všechna místa. Najednou se program začne chovat nepředvídatelně. Obrazně řečeno, kopírování je začátkem zkázy. Mezi základní prvky prvku opětovného vynucení stejného (či podobného) kódu patří cykly a funkce. Každá funkce má výstupní hodnotu (objekt). Oproti tomu procedura je funkce, která nic nevrací.
Typově chráněné vs. nechráněné proměnné
Základním prvkem programování i skriptování jsou proměnné (variable), do kterých si vývojář ukládá data (čísla, texty, přepínače, kolekce, struktury dat, …) a parametry, kterými data předává do funkcí. Tyto typy se pak liší především způsobem uložení v paměti počítače.
Jazyk Python není ve svém základu typově nechráněný, lze dynamicky vyměňovat typy do jedné proměnné a parametry. Toto je velkou výhodou pro drobné skriptování (např. automatizaci v Ansys), kdy nutnost znalosti typů byla přítěží pro uživatele (inženýra).
Avšak při tvorbě rozsáhlejších skriptů/programů (např. řízené workflow úlohy pro Ansys) může být typová nechráněnost počátkem zkázy, kdy udržitelnost (modifikovatelnost) takovéhoto kódu může být nesmírně problematická (nákladná). Otravná nutnost definovat typ každé proměnné či parametru se najednou stává velkou výhodou, protože se automaticky odstraní chyby programu způsobené nesprávným typem. Zde lze určitě doporučit přechod na programovací jazyk C#, který je silně typově chráněny.
Typově chráněný jazyk | Typově nechráněný jazyk | |
---|---|---|
Příklad jazyka | C, C++, C#, TypeScript | JavaScript, Python |
Vhodnost použití | Rozsáhlejší skripty/programy | Drobná automatizace |
Spojené problémy | Nutnost znalosti typů při vývoji | Neočekávané chyby (výjimky) v programu během běhu (runtime) |
Příklad korektní syntaxe |
double Calc(int x) |
function Calc(x) { return x / 3.0; } var a = Calc(12); |
Příklad nekorektního volání (předáme textový řetězec místo očekávaného čísla) | Calc(„abc“); Chybové chování: program se nepovede zkompilovat/zavést |
Calc(„abc“); Chybové chování: dojde k chybě až při běhu programu (často až u uživatele, což může být hodně nepříjemné) |
Správa paměti
Moderní programovací a skriptovací jazyky jako Python a C# nevyžadují alokaci a uvolňování paměti explicitně vyjádřené ve zdrojovém kódu, správa paměti je prováděna automatizovaně.
Manuální | Automatická | |
---|---|---|
Příklad jazyka | C, C++, Pascal | JavaScript, Python, C# |
Výhody | Přesná správa paměti, optimalizovaný kód minimalizuje paměťové nároky | Lehkost zdrojového kódu (oproštěn o správu paměti), mnohdy nižší paměťové nároky neoptimalizovaného kódu |
Vhodnost použití | High-performance programy (solver, AI, …) | Inženýrské skriptování a automatizace až po aplikace |
Jmenné prostory aneb Namespace(s)
Jednotlivé proměnné ukazují do paměti počítače, kde je uložena hodnota, kterou je třeba si pamatovat. Jména proměnných slouží k lepší orientaci než nutnost pamatovat si složitou adresu konkrétní paměti. Sada těchto jmen proměnných se nazývá jmenný prostor (namespace). Na globální jmenný prostor vidí celý program, takže je možné číst/zapisovat do proměnné odkudkoliv v programu. Lokální jmenné prostory jsou vytvářeny např. pro jednotlivé funkce, kdy proměnná „a = 5“, je automaticky zapomenuta po ukončení funkce.
Objektově orientovaný vs. procedurálně orientovaný
Objektově orientované programovací jazyky (např.: C++, C#, Python, JavaScript) rozšiřují funkčně orientované programovací jazyky (např.: C, APDL, Fortran) o možnost rozřazení proměnných do tříd a vytvoření hlubší struktury ve vyvíjeném software. Je možno tak vytvářet lokální namespace nejen na úrovni funkcí, ale i na úrovní tříd. Z toho vyplývá několik bodů:
- každý program sestavený pomocí objektového programování lze přepsat čistě na funkčně,
- znalost objektového programování umožní zpřehlednit strukturu zdrojového kódu,
- pochopení objektového programování výrazně ulehčuje práci s objektovou strukturou API (např. ACT).
Procedurálně orientované | Objektově orientované | |
---|---|---|
Příklad jazyka |
C, Pascal |
C++, JavaScript, Python, C# |
Výhody |
Jednoduchost (nižší abstrakce) |
Možnost vytvoření sofistikované architektury (struktury) programu |
Nevýhody |
Obtížná správa velkých projektů |
Složitost a náročnější ladění |
Příklad použití | C = Multiply(A, B) Transpose(C); |
C = A * B C.Transpose(); |
Poznámka |
Pro každou funkcionalitu programu existuje nějaká funkce/procedura, do které vstupují potřebné parametry |
Funkcionality dostávají za odpovědnost konkrétní objekty, redukuje to výrazně počet parametrů do metod (funkcí), protože potřebné údaje jsou získány přímo ze jmenného prostoru objektu |
Property, metoda
Vlastnost (property) a funkce (metoda) objektů v objektově orientovaném programování jsou pouze jinými názvy pro funkce či procedury. Ano i property je opět sadou dvou funkcí, jedna čte (získává, validuje, …) a druhá zapisuje (přiřazuje, validuje, …). Proto, když změním property určující šířku tlačítka (např.: button.Width = 50), tak dojde i překreslení na obrazovce, protože zapisovací metoda hodnotu uloží a následně vyvolá překreslení.
Referenční typy, hodnotové typy
Hodnotový typ známe už z matematiky ze základní školy (x = 5). V proměnné „x“ je uložena hodnota 5 a to je vše. Vedle toho referenční typ je pouze adresou, kde je daná hodnota (objekt) uložen. Toto lze přirovnat k běžnému životu... Jako příklad si vezměne telefonní seznam. Pamatujeme si v seznamu jen telefonní číslo (jakožto adresu) a kdykoliv se můžeme doptat na jakékoliv další vlastnosti objektu (zavolám někomu a zeptám se jakou má např. barvu vlasů). Referenční typ je velkou výhodou pro předávání si objektů, kdy se nevytváří kopie celého objektu, ale předá se pouze adresa v paměti, kde je objekt uložen.
Dědičnost
Dědičnost je důležitá vlastnost objektového programování, kdy některé metody (funkce) a vlastnosti (proměnné) objekt může zdědit od svého rodiče. To odstraňuje nutnost kopírování kódu, pokud podobné objekty mají stejné vlastnosti. Např. vlastnost Width a Height budou mít všechny kontrolní prvky Form, TextBox, Button, CheckBox a proto je výhodné je zdědit z rodičovské Control třídy.
Implementace, deklarace, abstract, interface
Pokud naprogramujeme konkrétní kód do konkrétní funkce, tak tomu říkáme implementace. Pokud však jenom řekneme, že nějaká funkce existuje (název, vstupy a výstupy), tak tomu říkáme deklarace. Proč deklarovat? Je to jednoduché, souvisí to s dědičností. Např. jazyk C# dovoluje deklarovat abstraktní metodu, což určuje, co budou mít potomci za funkcionality, ale konkrétní implementaci nechá až na konkrétním potomkovi. Jako příklad mějme třídu Shape, která má abstraktní metodu Area. Zdědíme-li Rectangle a Circle, tak konkrétní implementace pro metodu Area bude určitě rozdílná. Interface je pak pouze sadou abstraktních metod, která říká, co má mít objekt implementováno, aby splnil požadavky přicházející z interface a tím lze vydefinovat celé API pro komunikaci s okolím.
Error-handling, debugging, logování
Toto jsou termíny, se kterými je vhodné se obeznámit, pokud se chystáte sestavit nějaký rozsáhlejší skript či program. Neexistuje program, ve kterém by nedocházelo k výjimkám a správné řízení výjimek (error-handling) může být dost zásadní. Prostředky jako je debugging a logování jsou pak běžné nástroje pokud právě řízení výjimek není v problematické části zrovna sestaveno úspěšně a je nutné dohledat, co se vlastně uvnitř děje.
Nejsme v oblasti programování žádnými nováčky, podívejte se námi vyvíjený software:

M3Opti
Tvarová optimalizace
Optimalizační nástroj pro nelineární strukturální analýzy M3Opti

GDT Inside Ansys
Sada nástrojů
Sada nástrojů pro oblast geometrických a rozměrových tolerancí GDT Inside Ansys

GDT4FEM
Online vyhodnocení válcovitosti
Webová aplikace GDT4FEM.com pro snadné vyhodnocení tolerancí
Zaujala Vás oblast skriptování, automatizace a customizace?
NABÍZÍME:
- Standardní školení
- Školení „na míru“ dle Vašich požadavků
- Spolupráci na Vašem projektu (vývoji)
- Vývoj software na klíč
