| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Ansys |
Autor
|
Thema: Ansys APDL - Branching und Code Reuse? (2574 mal gelesen)
|
Harko Mitglied
Beiträge: 17 Registriert: 17.12.2009
|
erstellt am: 15. Jan. 2010 12:01 <-- editieren / zitieren --> Unities abgeben:
Hallo, für ein komplexeres APDL-Makro (Ansys Classic 11) würde ich gerne die ein oder andere Funktionalität auslagern. Diese Funktionalitäten werden, so bestimmte Bedingungen erfüllt sind, von mehreren Stellen im Code aufgerufen. Als Mensch mit einiger Erfahrung im Bereich objektorientierter und prozeduraler Programmierung würde ich das so angehen: Code: *IF, xyz, EQ, 1, THEN *GO, :MyFunction *ELSE *IF, abc, EQ, 2, THEN *GO, :OtherFunction *ELSE, .... *ENDIF *ENDIF
IMHO ist dies eines der Grundkonstrukte jeglicher Programmierung. Leider nicht bei Ansys. Hier kommt eine Fehlermeldung (Warnung) . Die Hilfe (Ansys Classic 11) schreibt lapidar, dass *GO in *IF und *DO Konstrukten zu vermeiden sind. Warum das denn? Wie mach ich das dann sonst? Ein und den gleichen Code mehrfach kopieren? Lieber nicht! Andere Frage: Gibt es eine Möglichkeit, den Titel der Selection-Box, die z. B. beim Aufruf von KSEL, R, P erscheint, per APDL-Befehl zu ändern? Danke, Harko Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens.Friedrich Moderator Dipl. -Ing.
Beiträge: 1048 Registriert: 09.09.2005 ANSYS2021 R2
|
erstellt am: 15. Jan. 2010 13:08 <-- editieren / zitieren --> Unities abgeben: Nur für Harko
Hallo Harko, am besten lagerst du das Objekt in ein Macro aus. dann kannst du auch in schleifen leicht drauf zugreifen. der Titel der Selektion Box kann per APDL ist nicht möglich Als Mensch mit einiger Erfahrung im Bereich objektorientierter und prozeduraler Programmierung solltest du das so angehen: 6.3.5. Changing the Menu Hierarchy and Dialog Boxes Using UIDL You can change the menu hierarchy to suit your analysis needs, alter the design of many of the dialog boxes and add your own macros (in the form of dialog boxes) to the menu hierarchy. The ANSYS program reads a file called menulist110.ans. This file lists the names of files containing the ANSYS menu screens. The menulist110.ans file must be available for the ANSYS program to work. Usually, the menulist110.ans file resides in the /ansys_inc/v110/ansys/gui/en-us/UIDL directory (UNIX systems) or the Program Files\Ansys Inc\V110\ANSYS\gui\en-us\UIDL subdirectory (Windows systems). However, both your current working and home directories are also searched to allow for user customization of the menu system. To modify the ANSYS dialog boxes and main menus, you need to learn the ANSYS-developed GUI programming language, called the User Interface Design Language (UIDL). For more information, refer to the ANSYS UIDL Programmer's Guide. (This manual is not part of the standard ANSYS documentation set; you must order it separately.) 6.3.6. Creating Dialog Boxes Using Tcl/Tk As an alternative to using UIDL to create ANSYS dialog boxes, you can create new GUI components and dialog boxes by using the Tool Command Language and Toolkit, often referred to as Tcl/Tk. viel spass ------------------ Jens Friedrich TU-Dresden Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
arnd13 Mitglied Dipl. Ing.
Beiträge: 735 Registriert: 05.11.2008
|
erstellt am: 15. Jan. 2010 13:10 <-- editieren / zitieren --> Unities abgeben: Nur für Harko
1) Ein Grund, warum *go in *if und *do-Schleifen nicht verwendet werden sollte ist sicher der, dass dann gegebenenfalls das zugehörige *endif bzw. *enddo nicht mehr erreicht wird, wodurch es zu Problemen kommen kann. Möglicherweise kannst Du die ausgelagerten Funktionen schlicht mit /input,<Pfad_und_Dateiname> aufrufen. 2)Titel der Selectionsbox ändern? Weiß ich auch nicht. Du kannst Dir aber eine eigene Abfragebox mit MULTIPRO erstellen. Vielleicht hilft Dir das. Auch *msg,ui ist fürs interaktive Arbeiten hilfreich. Gruß, A.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Harko Mitglied
Beiträge: 17 Registriert: 17.12.2009
|
erstellt am: 15. Jan. 2010 19:51 <-- editieren / zitieren --> Unities abgeben:
Das ging ja fix :-) Danke für die Antworten! @Arnd13: Zitat: [i]1) Ein Grund, warum *go in *if und *do-Schleifen nicht verwendet werden sollte ist sicher der, dass dann gegebenenfalls das zugehörige *endif bzw. *enddo nicht mehr erreicht wird Möglicherweise kannst Du die ausgelagerten Funktionen schlicht mit /input,<Pfad_und_Dateiname> aufrufen.
Verwende ich ein Sprungziel, so komme ich nach Abarbeitung des Ziels nicht garantiert zurück zum aufrufenden Ort. Dies kann man auch bei mehreren Ursprungsorten über State-Variablen etc. definieren. Aber auch nicht schön. Insofern mag der Ansys-Ansatz verständlich sein. Aber dein Ansatz mit /input, also quasi eine Datei je "Methode", ist zwar aus Sicht der Wartbarkeit furchbar, bietet aber zumindest einen möglichen Ansatz, um so etwas überhaupt zu realisieren. Daran hatte ich noch gar nicht gedacht. @Jens: UIDL sowie insbesondere TCL/TK wären eine Option. Auch wenn TCL/TK eine der Sprachen ist, die ich noch nicht in den Fingern hatte. Die menulist Datei habe ich mir schon zu Gemüte geführt. Ohne Doku komme ich hier aber nicht weiter. Und deren Beschaffung versuche ich seit längerem zu veranlassen. Das kann schon mal dauern Harko Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|