Umiejętne korzystanie z pomocy do skryptowania pozwala zaoszczędzić sporo czasu. Wielu użytkowników ANSYS Mechanical, zamiast dokładnie zapoznać się z informacjami dostępnymi w pomocy/dokumentacji, preferuje metodę prób i błędów.
Powszechne jest też szukanie odpowiedzi na YouTube. „Szybciej” jest obejrzeć 30 minut prezentacji niż poświęcić 2 na przeczytanie pomocy. Obserwuję to, prowadząc szkolenie ze skryptowania w ANSYS Mechanical z wykorzystaniem języka Python. Z ogromu informacji wyświetlanych podczas autouzupełniania, duża część kursantów przetwarza jedynie 10-20%.
W tym wpisie, chciałbym opisać mechanizmy/źródła pomocy dostępne podczas skryptowania w ANSYS Mechanical. Ich znajomość ma istotny wpływ na jakość i szybkość tworzenia skryptów.
Pomoc do automatyzacji w ANSYS Mechanical (skryptowanie i wtyczki)
Automatyzacja w Mechanical ma dwa oblicza: skryptowanie (Scripting) oraz wtyczki (Extensions, Ansys Customization Tool). Obie funkcjonalności wspóldzielą API w języku Python, każda z nich posiada osobną pomoc. Znaczna część pomocy ACT ma formę dokumentacji: uporządkowaną, dokładnie opsiującą strukturę API. Obiekty są rozmieszczone hierarchicznie oraz zawierają listę dostępnych własności (Properties) i funkcji (Methods).
Pomoc dla skryptowania, oprócz początkowych sekcji opisujących działanie interfejsu, jest oparta na przykładach. Poszczególne sekcje zawierają skrawki kodu wykonujące proste operacje (dodanie obiektu, poruszenie kamerą) oraz oferują proste wyjaśnienie. Na kolejnych etapach, proste operacje są łączone w odrobinę większe procedury (np. dodanie obiektu obciążenia i wypełnienie tabelki z wartościami).
Oprócz dokumentacji, pomoc ACT oferuje szeroką gamę przykładowych wtyczek. Otwartość Python’a powoduje, że kod wtyczki możemy skopiować i wykorzystać w obrębie naszego skryptu lub wykorzystać jako szkielet/inspirację podczas tworzenia własnego rozwiązania.
Podpowiedzi oraz uzupełnianie kodu (Autocompletion)
Interfejs skryptowania zawiera opcje podpowiedzi (autocompletion). Jeśli bezbłędnie wpiszemy komendy API, program wyświetli menu kontekstowe zawierające cały szereg informacji. Z moich obserwacji wynika, że większość użytkowników skupia się jedynie na liście dostępnych własności/metod, a kompletnie pomija pozostałe – nie mniej istotne – informacje.
Przykład pokazuje podpowiedzi wyświetlone dla obiektu Mesh i własności ElementSize.
Oprócz listy dostępnych opcji, otrzymujemy zestaw dodatkowych informacji
Dostępność: get/set oznacza dostęp do odczytu i zapisu. Dla niektórych własności wyświetli się samo get, co oznacza, że własnoście nie możemy zmienić (tylko do odczytu).
Typ własności: W przykładzie widzimy obiekty Quantity. Jest to specjalny obiekt umożliwiający definicję wielkości wraz z jednostką. Wpisanie wartości w postaci liczby całkowitej (integer) lub zmiennoprzecinkowej (float, double) spowoduje błąd.
Nazwa własności: Dodatkowo, widzimy czy mamy do czynienia z własnością czy metodą (brak okrągłych nawiasów za nazwą świadczy o tym, że mamy do czynienia z własnością obiektu).
Trochę inaczej wyglądają podpowiedzi dla metod.
Podpowiedzi dla metod
Typ zwracany przez metodę. Jeśli metoda nie zwraca żadnego typu, pojawia się słowo „void”.
Nazwa metody.
Typ i nazwa obiektu w obrębie metody (istotne, jeśli zaglądamy do źródła). Ogólnie jest to informacja dotycząca liczby argumentów, jakie przyjmuje metoda.
W obu przypadkach znajdziemy również krótki opis, a czasami prosty przykład. Jeśli pojawi się opis w kolorze pomarańczowym, musimy zachować ostrożność. Jest to ostrzeżenie o wycofywaniu własności/metody z API (obsolote). Widząc takie ostrzeżenie dobrze jest skorzystać z sugerowanej alternatywy, gdyż w kolejnych wersjach, nasz skrypt może przestać działać poprawnie.
Pisząc skrypt mamy dostępne dwa okna: górne – okno skryptowania oraz dolne – okno trybu interaktywnego. W oknie skryptowania, klawisz ENTER pełni funckję przejścia do nowej linii. Aby uruchomić skrypt, należy wcisnąć przycisk RUN lub DEBUG. W tym trybie, podpowiedzi dotyczą jedynie predifniowanych elementów API. Oznacza to, że podpowiedzi nie wyświetlą się dla nowozdefiniowanych zmiennych użytkownika. Dopiero uruchomienie skryptu spowoduje wyświetlenie się podpowiedzi: zostaną zinterpretowane i pozostaną w pamięci bierzącej sesji.
Brak podpowiedzi dla zmiennej użytkownika
W trybie interaktywnym, klawisz ENTER nie tylko umożliwia przejście do nowej linii, ale wysyła komendy do interpretera (przejście do nowej linii bez wysłania do interpretera umożliwia kombinacja SHIFT+ENTER). Jeśli nie chcemy uruchamiać całego skryptu, a chcemy skorzystać z podpowiedzi dla zmiennej użytkownika w obrębie naszego skryptu, możemy wysłać do interpretera pojedynczą linijkę kodu. Zmienna użytkownika zostanie umieszczona w pamięci i podpowiedzi będą widoczne również dla niej.
Podpowiedzi dla zmiennej użytkownika wyświetlane po uruchomieniu skyptu
Wbudowane metody Python
W kontekście pomocy, nie sposób nie wspomnieć o wbudowanych metodach Python’a.
Komenda dir() uruchomiana bez argumentu, wyświetla listę dostępnych modułów i funkcji w aktualnej sesji. Jeśli jako argumentu użyjemy dowolnego obiektu (np. dir(ExtAPI), wyświetlone zostaną dostępne atrybuty obiektu (metody i własności).
Komenda help() przeznaczona jest do użytku w trybie interaktywnym. W środowisku Mechanical, jako argumentu wymaga obiektu lub metody, dla których chcemy uzyskać pomoc. Po wysłaniu do interpretera wyświetla wbudowaną pomoc. Poniższy zapis z interpretera obrazuje pomoc dla metody ConvertUnit z modułu units.
>>> help(units.ConvertUnit)
Help on function ConvertUnit in module units:
| ConvertUnit(value, fromUnit, toUnit, quantityName=None) | Return the given value converted to the given units.
|
| Keyword arguments:
| value — the value to convert
| fromUnit — the unit of the given value
| toUnit — the target unit
| quantityName — the quantity name (default None)
Widzimy wyraźnie, że metoda help wyświetla wszystkie istotne informacje. Co więcej, tworząc własne moduły możemy w pełni kontrolować wyświetlane informacje. Służą do tego wielolinijkowe komentarze umieszczone w odpowiednich miejscach naszego modułu.
Obie komendy są podstawowymi metodami języka Python. Wszystkich zainteresowanych zapraszam do zapoznania się z oficjalną dokumentacją Python
Na koniec wartp wspomnieć o „nieoficjalnych przykładach”. Język Python nie jest kompilowany ani szyfrowany, co pozwala podejrzeć kod źródłowy dostępnych modułów. Wykorzystując moduł sys oraz atrybut path, możemy wyświetlić listę wszystkich lokalizacji przeszukiwanych podczas używania komendy import.
>>> for p in sys.path:
print(p)
C:\Program Files\ANSYS Inc\v222\commonfiles\IronPython\Lib
C:\Program Files\ANSYS Inc\v222\commonfiles\IronPython\DLLs
C:\Program Files\ANSYS Inc\v222\Addins\ACT\libraries\Mechanical
C:\Program Files\ANSYS Inc\v222\AISOL\DesignSpace\DSPages\Python
C:\Program Files\ANSYS Inc\v222\Addins\ACT\libraries\Mechanical
C:\Program Files\ANSYS Inc\v222\AISOL\DesignSpace\DSPages\Python
C:\Program Files\ANSYS Inc\v222\Addins\ACT\libraries\Mechanical
C:\Program Files\ANSYS Inc\v222\AISOL\DesignSpace\DSPages\Python
Jak widać, powyższe katalogi znajdują się w obrębie katalogu instalacyjnego ANSYS. Aby uniknąć problemów, warto przeglądać je w trybie tylko-do-odczytu lub pracować na kopiach (utworzonych poza „Program Files”).
Zachęcamy do zapoznania się z artykułem z serii dotyczącej skryptowania: Konfiguracja wyświetlania wyników z wykorzystaniem języka Python
Autor:
Bartosz Płochocki, MESco sp. z o.o.