UIDL-Tcl/Tk-APDL 联合编程实现 ANSYS 二次开发

本文介绍 ANSYS 的二次开发,二次开发不是为了将软件应用的如何花哨,而是为了更好更快捷的应用软件,有些软件对一些问题的分析过程晦涩难懂,或者是操作过程繁琐,再或者大量重复性工作,二次开发能够有效解决这些问题,大大方便用户(尤其是非专业用户)的使用。

1. UIDL

ANSYS 的界面开发语言有 UIDL 和 Tcl/Tk 两种,Tcl/Tk 能够触及深处因此能够开发的界面功能更加强大,UIDL 则是 ANSYS 本身的开发语言,能够对 ANSYS 的菜单进行一些开发,得到新的菜单功能,或者可以对已有的菜单进行修改等。
对于编程者而言其实界面不那么重要,可有可无,而对于使用者而言界面就变得尤为重要。
ANSYS 的界面开发的相关文件位于 F:\Program Files\ANSYS Inc\v160\ANSYS\gui\en-us\UIDL 目录下面,其中的引用文件 menulist160.ans 就引用了相关的 GRN 和 AUI 文件,自行开发的 UIDL 文件如果要使用,也必须在这个文件进行引用,同时 UIDL 文件也要放在这个目录下面。
UIDL 开发的文件扩展名是 GRN,利用 UIDL 编写开发有其固定的格式。
抬头是控制头文件,由一系列的 UIDL 命令组成,且必须以冒号开头,其结构如下:

:F UIMENU.GRN
:D Modefied %E%,Revision(SID)=%I%
:I 0, 0, 0
:!第一行
:F Filename 控制文件名称
:N 定义唯一的构造块名称
:S 描述构造块的位置信息,这个当引用后会自动更新
:T 描述构造块的类型,可分为 Menu,Cmd,Help 等类型
:A 对不同类型的构造块有不同的功能,在 Menu 中为必须的,定义出现在 GUI 中的子菜单的名称
:D 描述构造块的信息
:C 用于执行 APDL 命令

以下是一段完整的菜单栏的 UIDL 代码,创建了一个新的菜单,在菜单栏的最下面,菜单名称为 Input Parameter.

:F Screwmenu.GRN               ! 建立名称为 Scremenu.GRN 的控制文件
:D Modefied on
%E%,Revision(SID)=%I%
:I      0,      0,       0     ! 第 9,18,27 行
:!
:N MenuRoot                                 ! 定义的构造块名称
:S      0,    0,     0            ! 第 9,16,23 行
:T Menu                                          ! 模块为菜单模块类型
:A ANSYS Main
Menu                     ! 主菜单的菜单名
:D ANSYS Main
MENU               ! 以上四行是模块首部
Men_UVBA_Main_T1                  ! 以下是数据控制部分
Men_UVBA_Main_T2
Men_UVBA_Main_T3
Fnc_preferences                      ! 调用功能模块
Sep_                                        ! 分割线
Men_Preproc                                  ! 调用菜单模块
Men_Solution                         ! 调用求解模块
Men_GenlPost                        ! 调用通用后处理模块
Men_TimePost                        ! 调用时间历程后处理模块
K_LN(DROPTEST)
Sep_
K_LN(DROPTEST)
Men_DropTest
Sep_
Men_ToPo
Men_ROM
Men_DesXplorerVT
K_LN(alpha)
Men_DesOpt
K_LN(ALPHA)
Men_DesOpt_al
Men_ProbDesign
Men_Aux12
Men_RunStat
Sep_
Fnc_UNDO
Sep_
Fnc_FINISH                                  ! 以上是菜单的一般形式
Sep_
Men_input                                      ! 添加菜单
K_LN(UTILMENU)
Men_utilMenu
Men_UVBA_Main_B1
Men_UVBA_Main_B2
Men_UVBA_Main_B3
:E END                                                 ! 该行是模块尾行
:N Men_input
:S      0,    0,     0
:T Menu
:A Input
Parameter
:D Input
Parameter
:C)
Multipro,'start',4                       ! 创建对话框
:C) /prep7
:C)
*cset,1,3,A,'Parameter A',5
:C)
*cset,4,6,B,'Parameter B',10
:C)
*cset,7,9,C,'Parameter C',15
:C)
*cset,10,12,D,'Parameter D',20
:C)
Multipro,'end'
:E END

将上述 UIDL 代码保存在 GRN 文件中,复制到之前所说的目录下面,并修改 ans 文件添加引用,重新打开 ANSYS 即可自动加载,最终显示的菜单栏如下所示。

attachments-2020-05-shpzU4JY5ec483784d540.png 由于在创建新菜单的时候用来 ANSYS 自带的 APDL 命令 multipro,因此点击该菜单会自动弹出一个对话框用于设置几个参数。点击对话框的 OK 按钮后及设置了 4 个参数,可以在 ANSYS 的主菜单栏查看,如下所示。

attachments-2020-05-gXEiCPrO5ec483864cb6e.png 这里面用到的 *cset 和 multipro 命令可以查看笔者之前的文章查看其用法。

可以注意到,上面一大段的 UIDL 代码创建新菜单的同时也引用了 ANSYS 的原来很多菜单,因此可以修改或者删除其中的一些命令,那么菜单就可以按照自己的意愿分布。
如果将 UIDL 代码缩短为如下:

:F Screwmenu.GRN               ! 建立名称为 Scremenu.GRN 的控制文件
:D Modefied on
%E%,Revision(SID)=%I%
:I      0,      0,       0     ! 第 9,18,27 行
:!
:N MenuRoot                                 ! 定义的构造块名称
:S      0,    0,     0            ! 第 9,16,23 行
:T Menu                                          ! 模块为菜单模块类型
:A ANSYS Main
Menu                     ! 主菜单的菜单名
:D ANSYS Main
MENU               ! 以上四行是模块首部
Sep_
Men_input                               ! 添加菜单
K_LN(UTILMENU)
Men_utilMenu
Men_UVBA_Main_B1
Men_UVBA_Main_B2
Men_UVBA_Main_B3
:E END                                          ! 该行是模块尾行
:N Men_input
:S      0,    0,     0
:T Menu
:A Input
Parameter
:D Input
Parameter
:C)
Multipro,'start',4         ! 创建对话框
:C) /prep7
:C)
*cset,1,3,A,'Parameter A',5
:C)
*cset,4,6,B,'Parameter B',10
:C)
*cset,7,9,C,'Parameter C',15
:C) *cset,10,12,D,'Parameter
D',20
:C)
Multipro,'end'
:E END

那么重新打开 ANSYS 后即可显示如下图所示的菜单分布。

attachments-2020-05-3jqDryk05ec48399d2245.png 很明显,此时只剩下一个创建的按钮而已。
基于此,再结合 APDL,可以将某个结构的自动化分析过程完全做成几个菜单就能解决的问题,不需要人为的干预。
本次实例创建一个建模(螺旋体),创建的单菜单栏代码如下:

  • 分享于 · 2020.05.19 16:51 · 阅读 · 3129

[版权声明] :本文系网友分享,仅以非商业性的交流和科研为目的,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本网( friends@stuch.cn )联系!我们将协调给予处理。转载授权码:确权中,请原作者尽快与我们取得联系,阅读原文(请登录)..

0 条评论

请先 登录 后评论
猜猜我是谁
Boom -研究生

14
提问
32
回答
12
文章
注册推广