Skriptování versus programování v Ansys – jak se v tom vyznat a kdy co použít?

Vytvořeno dne 31. 1. 2025

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.

 

Image
banner

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)
{
   return x / 3.0;
}
double a = Calc(12);

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é)

 

Zažádejte si o záznam webináře

 

Image
banner

 

Požádat o záznam

 

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:

     

    programovani a skriptovani

    M3Opti

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

    programovani a skriptovani

    GDT Inside Ansys

    Sada nástrojů

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

    gdt4fem

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