当前位置:首页 >> 机械/仪表 >>

ANSYS二次开发


ANSYS 二次开发手册

UIDL 解析 APDL 解析

目录 第二章 解析UIDL篇 ............................................................................ 1
2.1 结识UIDL .................................................................................................... 1 2.2 看看UIDL的模样 ........................................................................................ 1 2.3 Ansys调用UIDL的过程 .............................................................................. 4

第三章UIDL实例解析一 ...................................................................... 6
3.1 问题描述:.................................................................................................. 6 3.2 环境准备:.................................................................................................. 6 3.3 添加菜单:.................................................................................................. 7 3.4 结束语.......................................................................................................... 9

第四章UIDL实例解析二 .................................................................... 10
4.1 问题描述:................................................................................................ 10 4.2 环境准备及构建对话框:........................................................................ 10 4.3 参数提取杂谈............................................................................................ 12 4.4 结束语........................................................................................................ 13 附录.................................................................................................................. 13

第五章UIDL实例解析三 .................................................................... 15
5.1 问题描述.................................................................................................... 15 5.2 环境准备及构建联机帮助:.................................................................... 15 5.3 几点说明.................................................................................................... 18 5.4 结束语....................................................................................................... 19

第六章 解析APDL.............................................................................. 20
6.1 熟悉新朋友—APDL ................................................................................ 20 6.2 二次开发工具之间的比较....................................................................... 20 6.3 结束语....................................................................................................... 20

第七章 APDL综合实例 ..................................................................... 21
7.1 7.2 7.3 7.4 7.5 问题说明................................................................................................... 21 解题思想................................................................................................... 22 构建步骤................................................................................................... 22 几点说明................................................................................................... 26 结束语....................................................................................................... 26

第二章 解析UIDL篇
2.1 结识UIDL
UIDL 是什么?Ansys 二次开放语言的一种。 OK,那么它能带给我们什么?很多很多,如果你想让你在 Ansys 中制 作的用户界面具有专业水准的话,请来结识一下我们的 UIDL 把。 全称: UIDL 的全名是 User Interface Design Language,是 Ansys 中二次 开发工具方面的三大金刚之一。GUI 方面几乎全部的二次开发功能都 将由它运筹帷幄。 功用: 组织我们自己强大的菜单系统。想象一下我们在 Ansys 中也能轻 松做出可以和 VC, 之类主流 GUI 开发工具媲美的菜单响应效 VB 果,Ansys 的世界将是多么的亲切、友好。 构建功能繁复的对话框。Ansys 中美观易用的 ContactWizard 对话 框级联界面一定让你印象很深把,有了它,即使是最菜鸟的门外 汉也能构建一流的工程算例, Ansys5.7 中的 DesignSpace 应该就是 无可争辩的例证之一。虽然从 UNIX 内核上讲(Windows 下的东 西是 Ansys 的后期移植, 很多技术还不成熟, 这里就不加讨论了) , 它们多构建在繁复的 TCL 编程基础上,但我们利用强大的 UIDL 工具,也能轻松架构起我们自己的实用对话框向导。 建立自己的联机帮助 Ansys 中的联机帮助(尤其是 UNIX 下的搜索引擎)非常实用,可 以说是我所接触过许多有限元平台中最为好用的几种帮助平台之 一。 UNIX 下的关键字查询简直是帅呆了, 想构建自己完善的帮助 系统吗?UIDL 同样是这方面不可或缺的理想开发工具。

2.2 看看UIDL的模样
认识了这位 Ansys 二次开发中的大侠了巴,现在我们就来进一步和它 交流交流,把我们的感性认识上升到理性层次中。 2.2.1 UIDL 控制文件总结构 一个完整的 UIDL 控制文件大致如一下结构:
1

控制文件头 结构块结构 …………… 说明: 任何一个 UIDL 控制文件开头都是一个控制文件头,其后接一个或多 个结构块结构。 2.2.2 控制文件头结构 为避免鄙人在这里滔滔不绝,而读者在台下不知所云的尴尬,我们在 以后的讲解中都将从一些典型结构例子入手, 剖析清楚其各个部分的详细 结构,当然这里从例子入手的剖析手段只能做到抛砖引玉,要想熟悉的了 解各个命令的详细信息,请参阅 UIDL 手册: 一个典型的控制文件头如下所示: --------------------------------------------------------------------------------------------:F UIMENU.GRN :D Modified on %E%, Revision (SID) = 5.181.1.67 - For use with ANSYS 5.5 :I 0, 0, 0 :! --------------------------------------------------------------------------------------------几点说明: 1. 控制文件头第一行必须有:F filename,filename 是 UIDL 控制文件 名。 2. 控制文件头第二行必须有:D description, description 是对本文件的 一些说明。 注意到 description 中有时能带%E%扩展, 但只有当你拥有 类似 SCCS 的系统(含一源码控制系统) ,ANSYS 才能 有效的进行 %E%扩展,否则请手动把这些说明替代%E%写入 description 中。 3. 控制文件第三行必须有:I 0, 0, 0, 各个 0 必须 出现在第 9、18、27 行。用户只需要在这些位置填入 0,ANSYS 在调 用该文件后会自动在这些位置填入 GUI 界面的位置信息。 4. :!这一行通常是用来在 UIDL 控制文件中做分隔标记的,可有可 无,这里用来分隔控制文件头和结构块结构,建议在控制文件头和结 构文件块之间,以及各个控制文件块之间都加一行:!加以间隔。 2.2.3 结构块结构 结构块结构是一个 UIDL 控制文件的核心,它涵盖了菜单信息,命令 信息,以及帮助文件信息,按照其不同的类型可划分为菜单结构块,命令 结构块和帮助结构块。 一般来说函数结构块还都伴随着构建一个对话框结
2

构。 1. 结构块结构基本框架 麻雀虽小,五脏俱全,让我们先看一看结构块的基本结构: 头部分 数据控制部分 尾部分 2. 例子说明 这里基于一个菜单结构块描述一下这些基本结构的细节, 让大家有一 个感性认识: --------------------------------------------------------------------------------------

头部分
:N Men_Add :S 0, :T Menu :A Add :C :D Add 0, 0

数据控制部分
Fnc_VADD Fnc_AADD Fnc_LCOMB

尾部分
:E END

分隔
:! ---------------------------------------------------------------------------------------几点说明: 头部分 :N 行定义一唯一的结构控制块名。 :S 行定义结构控制块位置信息。用户只需在第 9、16、23 行输入 0 即可,ANSYS 在调用该文件中将自动为这些域 填入合适的值。 :T 行定义该结构控制块的类型,可选类型有 Menu、Cmd 或者 Help。 :A 行对不同类型的结构控制块有不同的功用, Menu 块 在 中通常用来定义出现在 GUI 菜单上的名字。
3

:D 行通常用来描述该结构块的信息。 头部分中还可以带许多其他命令,例如 ANSYS 内部命令 等,这里就不详述了,我们将在例子中看到其具体用法。 数据控制部分 数据控制部分根据不同的结构控制块有不同的写法, 但必 须至少有一个数据控制行。 例如在菜单结构块中我们可以在其 中使用 Men_String 来调用其他菜单项, 还可以使用 Fnc_String 命令调用一些命令。String 对应于特定的菜单名部分或者命令 名部分。 其他具体细节这里就不详述了。 我们将在具体实例中 看到他们是如何构建实现的。 尾部分 :E END 标志着一个结构块的结束。 分隔(可选) 一般说来, 我们将在结构块和结构块之间加入:!来间隔 (可 选) 。

2.3 Ansys调用UIDL的过程
上面我们已经熟悉了整个 UIDL 控制文件的结构,可惜我们还是空有武 器,鲜有用武之地,Ansys 到底是怎么使用 UIDL 的呢?搞清楚这一点,我 们才能够游刃有余的控制整个 GUI 界面的定制, 在这部分里我们将描述一下 Ansys 控制 UIDL 文件的过程。 下面的一些设置情况都是基于工作站版本的 ANSYS5.5,其他版本的 ANSYS 的设置处理也类似,这里就不加赘述了。 ANSYS 在调用 GUI 界面时会自动调用 menulist55.ans 文件, 该文件中描 述了 UIDL 前处理器到哪里去寻找 UIDL 控制文件。ANSYS 在其 docu/目录 中有一个基本的 menulist55.ans 文件和对应的基本 UIDL 控制文件。默认情 况下,ANSYS 就调用这一 menulist55.ans 文件。 下面是这一基本 menulist55.ans 文件的内容: ---------------------------------------------------------/ansys55/docu/UIMENU.GRN /ansys55/docu/UIFUNC1.GRN /ansys55/docu/UIFUNC2.GRN /ansys55/docu/UICMDS.HLP /ansys55/docu/UICMDS.HPS /ansys55/docu/UIELEM.HLP /ansys55/docu/UIELEM.HPS /ansys55/docu/UIGUID.HLP
4

/ansys55/docu/UIGUID.HPS /ansys55/docu/UITHRY.HLP /ansys55/docu/UITHRY.HPS /ansys55/docu/UIOTHR.HLP /ansys55/docu/UIOTHR.HPS ---------------------------------------------------------可见,正是因为这一 menulist55.ans 文件的指定,ANSYS 系统将默认调 用对应的基本 UIDL 控制文件。 由此,我们可以产生一个想法:只要我们改变这一基本 menulist55.ans 中的指定,就能使用我们自己的 UIDL 控制文件。 但其实我们有更加好的方法,一般来说我们不建议改变系统 ansys55 目 录里任何文件内容, 以避免不必要的失误。 ANSYS 本身在调用 menulist55.ans 文件的方式上就提供了便于进行 UIDL 开发的机制: 通常 ANSYS 按照以下顺序寻找 menulist55.ans 文件: 用户工作目录(可 以在 Interactive 启动方式中设定)->用户根目录->/ansys/docu 目录,可见只 要我们在用户工作目录中编辑自己的 menulist55.ans 文件, ANSYS 将优先使 用我们自己的 menulist55.ans 文件。如果生成了自己的 UIDL 控制文件,并 在我们自己的 menulist55.ans 文件中指向它们,我们就能实现对 UIDL 的全 控制。以后的实例中我们将看到通用的 UIDL 开发过程。 最后要指出的是,UIDL 前处理器在处理 UIDL 控制文件后,将自动在:I 行(控制文件头部分)和:S 行(结构块的头部分)中填入相应的位置信息,并 在整个文件最后写入一系列:X 行(索引行) 。

5

第三章UIDL实例解析一
3.1 问题描述:
任何一个级联菜单的最底级总是调用命令, 在这个实例里我们试着添加一 个菜单联结, 指向一个我们自己构建的命令。 这个命令的构建方式我们将在实 例二中给出。为方便起见,我们将在主菜单下添加一个 MyProject 菜单项,调 用 MyProject 子菜单。MyProject 子菜单中含有一个 DoProject 命令,该命令对 一个实际问题进行优化设计,我们将在以后的实例中实现它。

3.2 环境准备:
配置好 ANSYS 环境,这里略过。 在当前用户目录下建立一个子目录 UIDL ---------------------------%mkdir ~/UIDL ---------------------------3. 拷贝相应文件进入该子目录 ------------------------------------------------------%cp /ansys55/docu/menulist55.ans . %cp /ansys55/docu/UIMENU.GRN . %cp /ansys55/docu/UIFUNC1.GRN . %cp /ansys55/docu/UIFUNC2.GRN . ------------------------------------------------------4. 编辑该子目录下文件 menulist55.ans 前面我们已经看到了这个基本 menulist55.ans 的内容, 这里我们想 使用自己的 UIDL 控制文件, 而不用默认目录/ansys55/docu 下的 UIDL 控制文件,因此我们把该文件修改成如下内容: ------------------------------------------------------./UIMENU.GRN ./UIFUNC1.GRN ./UIFUNC2.GRN /ansys55/docu/UICMDS.HLP /ansys55/docu/UICMDS.HPS /ansys55/docu/UIELEM.HLP 1. 2.
6

/ansys55/docu/UIELEM.HPS /ansys55/docu/UIGUID.HLP /ansys55/docu/UIGUID.HPS /ansys55/docu/UITHRY.HLP /ansys55/docu/UITHRY.HPS /ansys55/docu/UIOTHR.HLP /ansys55/docu/UIOTHR.HPS --------------------------------------------------5. 运行测试是不是能够正常启动 ANSYS 以 Interactive 方式启动,设置工作目录为刚刚创建的 UIDL 目录,并 设置初始工作名为 uidl,启动 ANSYS,这是 ANSYS 的 GUI 界面应该 和默认情况下启动,只不过不同的是调用的 UIDL 控制文件是当前 UIDL 目录下的了(只不过两者内容相同而已) 。

3.3 添加菜单:
ANSYS 的浮动根菜单名字叫 MenuRoot, 我们将在根菜单下添加一个菜单 项 MyProject,点击这个菜单项自动调用 MyProject 子菜单。MyProject 子菜单 中我们将放入一个命令 DoProject,点击这个命令,将进入我们的问题处理。 1. 定制 DoProject 命令 这里我们把 DoProject 命令的定义写入 UIFUNC2.GRN 中,编辑 UIFUNC2.GRN 文件, 在其中两个结构块之间加入一个 DoProject 命令 结构块: ------------------------------------------:N Fnc_DoProject :S 86, 73, 6 :T Cmd :A DoProject :D Let's go Inp_P :E END :! ------------------------------------------当然这样一个结构块什么也不干,只是一个虚块,在以后的实例 中我们将完成这个命令的功能。 2. 定制 MyProject 子菜单 这一步中我们把 MyProject 子菜单的定制写入 UIMENU.GRN 中, 编辑 UIMENU。 GRN 文件, 在其中两个结构块之间加入一个 MyProject
7

菜单结构块: ------------------------------------------:N Men_MyProject :S 120, 88, 25 :T Menu :A MyProject :D Optimize the structure -OptimizeFnc_DoProject :E END :! -------------------------------------------这里-Optimize-是出现在菜单上的静态文本,Ansys 对任何寻找不 到定义的调用均当做静态文本处理。如果某子菜单中只有静态文本的 话,Ansys 一般情况下将不显示这个子菜单。 3. 将 MyProject 子菜单加到根菜单下 这里我们再次编辑 UIMENU.GRN 文件, MenuRoot 菜单结构块 在 中添加到 MyProject 的链接。 最后 UIMENU.GRN 的 MenuRoot 菜单结 构块定义类似如下写法: -------------------------------------------:N MenuRoot :S 433, 76, 350 :T Menu :A Main Menu :D ANSYS ROOT MENU Men_UVBA_Main_T1 Men_UVBA_Main_T2 Men_UVBA_Main_T3 Fnc_Preferences Sep_ Men_Preproc Men_Solution Men_GenlPost Men_TimePost Sep_ Men_MyProject Sep_ K_LN(alpha) Men_DesOpt
8

…… ---------------------------------------------可见我们把 Men_MyProject 子菜单链接加入到基于时间历程后处 理的菜单项后。当我们重新启动 ANSYS 时看到的主菜单应该如下图 (a)所示,点击 MyProject 菜单项将出现图(b)的情形。

(a)

(b)

3.4 结束语
上面我们看到了怎么在浮动菜单中简单添加自己定制子菜单的方法, 但这个时候我们点击 DoProject 命令什么也不发生,因为我们在命令定制 中就是这么设定的。以后我们将完善这个命令,让它逐渐强大起来。 大家也许会问,既然定义的这个命令是空命令,那能不能索性不定义 呢。 答案应该是不可以, 大家可以试一试删去 UIFUNC2.GRN 中 DoProject 函数的定义, 当你点击根菜单中的 MyProject 菜单链接,MyProject 应该都 不会弹出。

9

第四章UIDL实例解析二
4.1 问题描述:

r α 图1 H

(a)

(b)

如图 1(a)一所示,一带孔薄板,长 4000mm,宽 2000mm,顶部中 心部分 1800mm 处承受 42MP 的压力,左右两个长圆孔中心分别踞四 周 1000mm,长圆孔的具体形式如图 1(b)所示,上下分别为半圆,中 部用直线衔接。这里假设长圆长轴与水平方向夹角为α。 为了使得孔边缘应力集中最小,这里拟调整α的大小(α∈[-π /2, π/2]),以便在固定的 H 情况下达到长圆孔周围应力集中最小。 本章中,我们将仅仅限于 UIDL 部分完成这个问题,即实现如下 功能:通过菜单和对话框,用户输入参数 H 的大小,我们让 Ansys 自 动生产整个分析模型。

4.2 环境准备及构建对话框:
1. 基于上一个实验的环境, 在~/UIDL 目录下构建一个输入脚本, 这里我 们权且称其为 create.inp,该脚本能针对固定的 r、H、α来构建出分析 模型。Create.inp 脚本文件可以参看附录。 在文件 UIFUNC2.GRN 中任意两个结构块之间添加函数 DoProject 的 定义: -------------------------------------------------------------:N Fnc_DoProject :S 0, 0, 0 :T Command 图2 :A Optimize My Project
10

2.

:D Please Input the Custom Information :C )*SET,My_H,150 Inp_NoApply Cmd_)*Cset,1,1 Fld_0 Typ_Lab Prm_Custom the Geographic Information Fld_2 Prm_ Please Input the H for Analysis(100~200) Typ_INT Def_*PAR(MY_H) Cmd_)/Go Cmd_)fini Cmd_)/clear Cmd_)*GET,My_H,CPAR,1 Cmd_)/Input,create,inp :E END :! -----------------------------------------------------------------图3 这里我们可以清晰的看到,在命令结构块中,:A 命令后的说明将 出现在调用该函数的菜单项中,如图 2 所示,:D 命令后的说明将出现 在我们定制的对话框标题上。 几点说明: 这里我们定制了一个对话框(无拾取点线等的功能) ,在任何 一个自定义的对话框中,至少应该有一个 Typ_命令,但不能 有 Inp_P 命令。 本对话框由于比较简单,不需要 Apply 按钮(该按钮多用来 处理复杂输入,动态刷新功能) 因此我们设定为 , Inp_NoApply 命令。 下面的 Fld_0,Fld_2 什么的都是一个个对话框域。不同的数 据输入域,比方说:输入框、多选框、列表框的都必须有独立 的域号,象本例中一个数值输入框域代号为 2。但所有静态文 本都可以写在 Fld_0 域内,因为不会出现我们调用时的冲突。 这里,我们的 Fld_0 域内是 Typ_Lab 的静态文本,内容书写在 Prm_后。Fld_2 域是一个整数输入对话框域(Typ_INT) ,前面 Prm_后有一段文字说明,并设定默认值(Def_) 。

11

3.

下面的几行 Cmd_)后跟的都是针对这一数值输入域处理的 Ansys 命令,主要功能是先清数据库,再取到域 2 内用户输入 的 H 参数值,然后进行基于该参数的模型构建。 输出结果:

这是α= π/4, H=150 情况下自动 生成的几何 模型。虽然例子比较简单,但我们从中可以掌握一种 GUI 定制参数并 运用到脚本建模中的技巧,掌握了这种技巧,我们就不难轻松的构建 各种更加复杂的模型。

4.3 参数提取杂谈
上面我们看到了一种比较简单有效的对话框参数提取、传递的技巧, 其实在 Ansys 中参数的提取有好些方法。 通常的用户命令中(比方说设定实常数等), Ansys 中由于有固定的命令 与其对应, GUI 函数命令中 Ansys 是这样定制的, 在 在对话框起始处给出 一个 Cmd_R 命令(这里以提取实常数命令 R 为例), 其后对应的 Fld_2、 Fld_3 等域 Ansys 将自动拾取之并对应 R 命令的第二个参数、第三个参数等。但 我们初学二次开发时不可能拥有自己的命令,因此这里我们弃而不用。等 以后我们学习了 UPF 二次开发工具,能够定制自己的命令后,我们再来 回顾一下这种参数话方法。 这里我们使用的是 CSET 命令和 CPAR 命令,也是一种比较简洁有效 的方式。命令结构块头部分我们用:C )*SET,My_H,150 命令在环境中设定 一变量 My_H,初值为 150,并用 Def_*PAR(MY_H)命令指定为数值域 的初值。然后用 Cmd_)*CSET,1,1 命令把第一个数值域的内容指定存储到 *CSET 命 令 对 应 的 一 矢 量 数 值 中 , 其 次 在 数 值 域 中 指 定 用
12

Cmd_)*GET,My_H,CPAR,1 命令让参数 My_H 再把用户输入的数值域内容 从该矢量数组中读回来,这样我们就有了一个用户输入的参数值 My_H, 最后就可以直接调用脚本文件,生成需要得到的参数化建模结果。 在 UIFUNC2.GRN 中我们还可以看到其他一些参数化提取方式,比如说 利用系统参数_z1~_z9…,用命令*GET,PAR,CMD,0,FIELD,2 来拾取命令中 域 2 中的内容到自己设定的参数中。以后我们可以对各种方法都练练手, 这里就不再赘述了。

4.4 结束语
上面我们用 UIDL 对话框的技术轻松实现了有用户化界面的参数化建 模,在以后的例子中我们将对这个实例进行完善,并融入 APDL 和 UPF 的内容。

附录
create.inp 清单: ----------------------------------------------------------------------------------------!This is a script which can create the modal with a parameter sita. !Clear the workspace !fini !/clear,nostart !Setup the Parameters PI=4*atan(1) sita=PI/4 r=200 !H=150 H=My_H !Customize the Material Property keyw,pr_struc,1 /prep7 et,1,shell63 r,1,120,120,120,120 uimp,1,ex,dens,nuxy,2400,1.2,0.375
13

!Modeling !Create plate k,1,0,0 k,2,2000,0 k,3,2000,2000 k,4,0,2000 k,5,1800,0 k,6,1000,1000 l,1,5 l,5,2 l,2,3 l,3,4 l,4,1 al,1,2,3,4,5 !Create hole !Create my coordinate k,7,1000+H*cos(sita),1000+H*sin(sita) k,10,1000+H*cos(sita),1000+H*sin(sita),100 k,8,1000+r*cos(sita+PI/2),1000+r*sin(sita+PI/2) cskp,11,0,6,7,8 csys,11 !Create Hole k,9,H,r l,7,9 l,7,6 adrag,6,,,,,,7 arotat,6,,,,,,7,10,-90 arsys,y,2,3,1 arsym,x,2,5,1 aadd,2,3,4,5,6,7,8,9 asba,1,10 ----------------------------------------------------------------------------------------------

14

第五章UIDL实例解析三
5.1 问题描述
本章我们我们将描述 UIDL 的最后一个功能—构建我们自己的联机帮助文 档。 诚然联机帮助在一般的开发过程中有点无足轻重, 但如果你想让你的工作更加 完善、更加专业的话,建立起自己强大的帮助系统是必不可少的,这一个实例 中我们将对 UIDL 实例二构建我们自己的联机帮助文档。 构建完联机帮助文档 后,在菜单中点击 DoProject 菜单项将显示如下对话框:

看到了把,现在这个对话框中增加了一个 Help 按钮,点击这个 Help 按钮 看看效果把,显示结果如下:

这里的文字可以任意,轻松写入任何泥想写入的帮助信息巴。下面我们就 详细的说明如何建立这样的一个联机帮助。

5.2 环境准备及构建联机帮助:
Ansys 中的联机帮助一般有三种形式: ASCII 形式, ZBitmap 形式, PostScript
15

形式。PostScript 形式的联机帮助多是在 Unix 下和打印功能有关的,我们这里 就不加详述了。ZBitmap 形式的联机文档应该是功能最强大的,应该类似于 Windows 下的 PDF 格式帮助文档把,可以在帮助文档中有图形或者文字的超 级链接,构建这样的帮助文件我们得需要构建 744pixels×925pixels 的 XWD 格式图像,xwd 格式是 UNIX 中用 xwd 工具抓图所得的一种图像格式,可惜 的是这里我们崭时缺少这样能够生成固定尺寸格式的 XWD 图像文件的工具, 所以这里我们也不准备仔细对它的构建方法进行描述 (你可以试验用任意尺寸 的 XWD 格式构建 ZBitmap 格式的帮助文档, 正常情况下 Ansys 系统应该不加 显示任何图片) 。 这里我们在上一个实例的基础上描述一下如何建立 ASCII 形式的帮助文 档。 1. 在 Unix 下,构建你的帮助文档文字信息,把它存成文件 hlp_other2: ――――――――――――――――――― ZengP Work Group This Project is designed by Heling. Enjoy it! ――――――――――――――――――― 2. 检查 hlp_other2 文件字节数: Unix 下可以用命令 ls hlp_other2 或者 wc –c hlp_other2 命令查看该文件 的字节数,这里得出的字节数为 63 3. 构建帮助文件的数据控制部分,把它存成 hlp_other1 ――――――――――――――――――― Customized Help Hlp_ Hlp_ ASCII 63 END_OF_HYPERLINKS ――――――――――――――――――― 这里的数据控制部分是有固定格式的, 第一行表示帮助对话框的标题。 第二行和第三行是描述该帮助文件的前端链接和后端链接。这里由于 是我们自己定义的帮助文档,没有前端链接和后端链接,因此我们都 把它写成 Hlp_就可以了,第四行是描述帮助文件格式、字节信息的, 这里我们是 ASCII 格式,字节数是上一步中得到的字节数 63(对 ZBitmap 格式后面需要提供压缩后字节数和压缩前字节数两个信息, 具 体 做 法 请 自 己 参 看 UIDL 帮 助 手 册 ) 以 下 到 最 后 一 行 的 。 END_OF_HYPERLINKS 之间是定义帮助文档之间超级链接的,由于 我们这里是做 ASCII 的帮助信息,不是 ZBitmap 格式的,因此没有任 何超级链接需要定义。 4. 把 hlp_other1 和 hlp_other2 合成一个文件 hlp_other
16

%cat hlp_other1 hlp_other2 >hlp_other 5. 检查一下文件 hlp_other 的字节数 %wc –c hlp_other 这个例子中得到的字节数是 116 6. 构建帮助文件的头信息,把它存储为 head_other: ――――――――――――――――― :N Hlp_0_Contents :S 0, 0, 0 :T HELP 116 ――――――――――――――――― 7. 构建帮助文件尾信息,把它存储为 end: ――――――――――――――――― :E End ――――――――――――――――― 8. 构建帮助文件的控制文件头,把它存储为 control_other: ――――――――――――――――― :F OTHER.HLP :D Modified on 1/17 :I 0, 0, 0 :! ――――――――――――――――― 9. 构建总的帮助文件 OTHER.HLP %cat control_other head_other hlp_other end >OTHER.HLP 10. 把我们构建好的帮助文件 OTHER.HLP 加入 menulist55.ans 中去。 最后 menulist55.ans 显示内容如下: ――――――――――――――――― ./UIMENU.GRN ./UIFUNC1.GRN ./UIFUNC2.GRN /ansys55/docu/UICMDS.HLP /ansys55/docu/UICMDS.HPS /ansys55/docu/UIELEM.HLP /ansys55/docu/UIELEM.HPS /ansys55/docu/UIGUID.HLP /ansys55/docu/UIGUID.HPS /ansys55/docu/UITHRY.HLP /ansys55/docu/UITHRY.HPS /ansys55/docu/UIOTHR.HLP /ansys55/docu/UIOTHR.HPS
17

./OTHER.HLP ――――――――――――――――― 11. 在我们的函数定义 DoProject 中加入联机帮助信息. 编辑 UIFUNC2.GRN 中的 DoProject 函数定义,由于我们定制的帮助 文件名为 Hlp_0_Contents,我们把它加入到函数定义中去,编辑完后 该函数定义内容结果如下: ――――――――――――――――――――― :N Fnc_DoProject :S 396, 147, 242 :T Command :A Optimize my Project :D Please Input Custom Information :C )*Set,My_H,150 :H Hlp_0_Contents Inp_NoApply Cmd_)*Cset,1,1 Fld_0 Typ_Lab Prm_Custom the Geographic Information Fld_2 Prm_ Please Input the H for Analysis(100~200) Typ_INT Def_*PAR(My_H) Cmd_)/Go Cmd_)fini Cmd_)/clear Cmd_)*GET,My_H,CPAR,1 Cmd_)/Input,create,inp :E END :! ――――――――――――――――――――――――- 12. 万事具备,测试一下你自己构建的帮助文档把。

5.3 几点说明
从前面可以看到,一个帮助文件一般有文件控制头和若干帮助文件结 构块组成,对帮助文件结构块来说,其包含四个部分:头部分,数据控制 部分,帮助内容部分和尾部分。与函数说明不同的是它增加了帮助内容部
18

分,这里存放各种格式的帮助文档,其次它需要提供许多帮助内容部分的 字节信息。所以构建帮助文件的时候一般都是分块构建,不断用 wc 或者 ls 命令观看字节信息,最后生成完善的帮助文件。感兴趣的同学可以自己 生成强大的帮助文档信息,由于这一部分不是二次开发的重点,我们在这 里也不详细讨论其细节了, 利用上面的知识我们已经足以构建任何复杂的 ASCII 文档信息。

5.4 结束语
到这里为止,我们已经对 UIDL 的所有功能都基于例子进行了详细描述, 讲到这里大家已经有足够的 UIDL 知识构建比较专业化的基于 GUI 界面的参 数化建模本领了。在后续章节,我们将基于 APDL 和 UPF 知识对这一例子进 行优化处理实现,希望大家保持充足的兴趣继续向下学习。

19

第六章 解析APDL
6.1 熟悉新朋友—APDL
APDL 是我们即将结识的第二个强大二次开发工具。它的全称是 ANSYS Parametric Design Language。APDL 可以帮助你更加有效的进行分析计算,可 以让你轻松自动化你的工作(循环、分支、宏等结构) ,并是一种高效的参数 化建模手段。很多情况下,APDL 主要用在优化设计或者自适应网格划分中。 但在日常分析中如果你知道善用,APDL 也将发挥其强大的优势,让你的工作 变的生动起来。

6.2 二次开发工具之间的比较
APDL 所能实现的功能通俗的说来应该是次于 UPF 而强与 UIDL,但实际 上是由于三者具体侧重点不同造成的: UIDL 主要控制 GUI 界面的各类二次开 发方法,涉及的分析部分就要少一些,APDL 可以称其为和分析部分频繁打交 道的一组小型工具,功能强大,但不和 UIDL 一样能够非常具体的针对某一两 方面的二次开发处理,通常情况下的他融合在分析的角角落落中。UPF 是三 者之间的最强者,他能完成最复杂的二次开发工作,比如说构建新单元,复杂 数据库交互,外围命令定制等,但 UPF 在很多情况下也借助了 APDL 命令来 完全实现其功能。 同样我们也能在 UIDL 中欠入 APDL 命令, 来构建比较复杂 的 GUI 二次开发工作。 一句话,UIDL、APDL 和 UPF 三者各有所长,密不可分。结合使用三者, 我们将能够实现任何强大的分析功能。

6.3 结束语
我们这里对 APDL 的介绍将着重于它的一些基本功能, 而不会象 UIDL 那 样用一组实例来完整的描述他的所有功能,当然其间也会夹杂讲述一些例子, 来加强大家对 APDL 工具应用技巧。

20

第七章 APDL综合实例
7.1 问题说明
本章在阐明 APDL 技术时本想也采取实例的方式,把 APDL 的各个细 节都用一个个详细的实例说清楚,无奈 APDL 细节内容比较繁复,而且不 和 UIDL 那样各成体系,APDL 的应用很多情况下都是和 UIDL、UPF 结 合在一起应用的,它甚至渗透到基础分析中的各个环节中,可以说也是 ANSYS 的脚本基础。 考虑到大家都不会有兴趣来聆听枯燥的数组构建法, 宏函数的参元特性等罗嗦的 APDL 语法, 这里我们打算用一个比较大的综 合实例来想大家描述一部分 APDL 的功能,从这里你将能看到我们能用 APDL 干些什么。 还记得 UIDL 实例解析二中的一个例子巴,这里我们有必要重温一下:

r α 图1 H

(a)

(b)

如图 1(a)一所示,一带孔薄板,长 4000mm,宽 2000mm,顶部中 心部分 1800mm 处承受 42MP 的压力,左右两个长圆孔中心分别踞四 周 1000mm,长圆孔的具体形式如图 1(b)所示,上下分别为半圆,中 部用直线衔接。这里假设长圆长轴与水平方向夹角为α。 为了使得孔边缘应力集中最小,这里拟调整α的大小(α∈[-π /2, π/2]),以便在固定的 H 情况下达到长圆孔周围应力集中最小。 在 UIDL 实例二的部分我们只是在 GUI 界面下实现了它的参数化 建模,这部分工作在本章的综合实例中仍然有效,下面我们将一步步 完全实现这一问题。

21

7.2 解题思想
本问题是在用户给定 H 的情况下求得α角的最优解,使得孔边最大拉 应力最小(这是因为材料抗拉性能比较弱) 。这里我们的想法是把α取每 一个角度时候得到的孔边最大拉应力都求出,比较一下,得到孔边拉应力 最小情况下对应的α取值。现在的问题是,我们只能够对每一离散的α值 求取其孔边最大拉应力,让α在[0°~360°]之间连续取值不仅是无法做 到的,而且在工程中也没有必要,这里我们拟每隔一定角度计算一下孔边 最大拉应力,最终在这些有限的角度中求取出最佳的α值。因此我们还需 要用户自定义求解的精度参数,即我们每隔多少角度来计算一次(决定了 结果精确到什么程度) 比方说我们定义每隔 5°计算一次的话, 。 整个优化 过程需要进行 180/5=36 次求解运算。

7.3 构建步骤
下面说明一下在构建过程中的一些全局参数: My_H:用户输入的 H 参数值 My_sita:每次计算对应的α参数值 My_dsita:每两次计算之间间隔的角度值(用户输入的参数) 。 My_N:总共需要分析计算的次数。My_N=180/My_dsita My_sita0:初始α值,这里统一定义为 0°。 My_MinS1:最优化位置处的最大拉应力值。 (计算完以后才是) My_Msita:最优化位置处对应的α值。 Mysmin: 每次分析计算得到对应特定α角时的孔边最大拉应力。 (一般 都是孔边产生应力集中,所以也是整个板料内部的最大拉应力处) _s1 数组:对应特定α时求解得到各个节点上的最大拉应力值。 1. 首先我们重新构建一比较完善的参数话建模脚本,取名为 modaling.mac, 该脚本针对固定的 My_H 和 My_sita 将构建整个几何模 型,加好载荷和约束,具体细节请参看附录。 构建脚本 mysolve.mac: ―――――――――――――――――――――― My_sita0=0 My_N=180/My_dsita *do,I,0,My_N-1 parsav,all,mypar fini
22

2.

/clear,start parres,new,mypar My_sita=My_sita0+My_dsita*I modaling /solu solve /post1 ar11=ndinqr(0,14) _s1= *dim,_s1,,ar11 *vget,_s1(1),node,1,s,1 *vscfun,mysmin,max,_s1(1) *if,I,eq,0,then My_MinS1=mysmin My_Msita=My_sita *ELSE *IF,mysmin,lt,My_MinS1,then My_MinS1=mysmin My_Msita=My_sita *ENDIF *ENDIF parsav,all,mypar *enddo ――――――――――――――――――――――――― 下面是几点说明: 程序整个框架是先根据用户输入的参数定制好一些解题环境,比 方说求出需要重复计算的次数 My_N, 然后用 APDL 的*do 循环结 构繁复执行 My_N 次,每次求得对应角度的孔边最大拉应力值, 不断积累出这些对应角度孔边最大拉应力值的最小结果。完成了 My_N 次结果后, 最优结果 My_MinS1 和对应的角度 My_Msita 也 就求出来了。 不同次分析计算过程前必须对 ANSYS 环境中的现有模型清零, 用 到/clear 命令,但该命令会使用户参数同时清零,这里用到 parsav 和 parres 技术,在每次清零过程前先把当前工作区的参数保存起 来,清模型结束后再调入工作区,这样就实现了只清模型、不清 参数的效果。 解题结束后, 我们先用 ndinqr(0,14)这一 UPF 命令求取模型中的节 点总数。 然后用*vget 命令把所有节点上的最大拉应力都保存到_s1 数组中,最后用*vscfun 函数得到_s1 数组中的最大值。
23

3.

注意每次求解完提取数据时都要重新定义_s1 数组的大小 (因为每 次划分单元后总节点数不同) ,这时候每次 ANSYS 都回出现让你 确认是否把已经存在的_s1 数组结构改变的对话框, 这将导致自动 化求解中断, 这里我们采用的一个技巧是每次重新定义_s1 数组前 先清掉_s1 数组(用_s1=命令行) 。这样救避免了 Ansys 的询问。 同 样 解 决 /clear 命 令 的 Ansys 询 问 方 法 就 是 写 全 /clear 命 令:/clear,start。注意这里我们是必须要用 start 参数的,它表面我们 在新建模型时读入 start55.ans 文件,我们必须在工作目录中构建 一个我们自己的 start55.ans 文件,里面添加上 PI 参数的说明(因 为 modaling.mac 宏文件中将利用这一参数,如果系统环境中没有 这一参数的说明,将产生建模错误) 。 解决完一次运算, 保存完数据后记得用 parsav 函数保存环境参数。 完善 GUI 参数化界面 这里我们要比上次 UIDL 实例二中多增加一个参数 My_dsita,为此我 们修改 UIFUNC2.GRN 函数中 DoProject 函数: ――――――――――――――――――― :N Fnc_DoProject :S 0, 0, 0 :T Command :A Optimize my Project :D Please Input Custom Information :C )*Set,My_H,150 :C )*Set,My_dsita,90 :H Hlp_0_Contents Inp_NoApply Cmd_)*Cset,1,2 Fld_0 Typ_Lab Prm_Custom the Geographic Information Fld_2 Prm_ Please Input the Dsita for Analysis(1~90) Typ_INT Def_*PAR(My_dsita) Fld_3 Prm_ Please Input the H for Analysis(100~200) Typ_INT Def_*PAR(My_H) Cmd_)/Go Cmd_)*GET,My_H,CPAR,2
24

Cmd_)*GET,My_dsita,CPAR,1 Cmd_)mysolve :E END :! ―――――――――――――――――――――――― 这里可以看到和 UIDL 篇中的实例相比,多加了参数 My_dsita 的用户 化输入。最后的命令修改成直接用文件名调用(这是因为我们把文件 名后缀改为了.mac,它标志着标准的宏文件) 。 最后的对话框显示如下:

用户定制好分析精度和 H 值后,点击 OK 就开始了完整的分析过程。 4. 求解结果 最后求解完毕后得到了一些最优化结果:用*status 命令可以看到所 有参数结果(这里我用每隔 5 度进行一次分析求解) : My_Msita=40°,用该最优化建模图形为:

25

这里由于实常数对应力集中的效应没有影响,我们就不再给出具体计 算结果来了。 有效的仅是在同样的载荷条件下不同角度的孔上最大拉应力 的情况。

7.4 几点说明
APDL 中的参数化建模、优化涉及是十分复杂有效的,这里我们只是给出 了一个小小的例子,用来举一反三。套用同样的方法和机制,我们可以完成更 加复杂的问题。 这里我们仅仅用到了 APDL 功能中的一小部分,我们完全可以想象一下 UIDL+APDL+UPF 能够完成什么样复杂程度的功能—几乎是任何功能!

7.5 结束语
这里结合 APDL,UIDL 和 UPF 讲述了一个比较综合的例子,在以后描述 了 UPF 功能后,大家将更加为 UPF 功能的强大而神往不已。 附录: modaling.mac:
26

―――――――――――――――――――――――――――――― !This is a script which can create the modal with a parameter sita. !Parameter Setting sita=My_sita/180*PI r=0.2 H=My_H/1000 !Customize the Environment keyw,pr_struc,1 /prep7 et,1,shell63 r,1,0.12,0.12,0.12,0.12 uimp,1,ex,dens,nuxy,2.1e9,1.2,0.375 !Modeling !Create plate k,1,0,0 k,2,2,0 k,3,2,2 k,4,0,2 k,5,0.9,2 k,6,1,1 l,1,2 l,2,3 l,3,5 l,5,4 l,4,1 al,1,2,3,4,5 !Create hole !Create my coordinate k,7,1+H*cos(sita),1+H*sin(sita) k,10,1+H*cos(sita),1+H*sin(sita),100 k,8,1+r*cos(sita+PI/2),1+r*sin(sita+PI/2) cskp,11,0,6,7,8 csys,11
27

!Create Hole k,9,H,r l,7,9 l,7,6 adrag,6,,,,,,7 arotat,6,,,,,,7,10,-90 arsys,y,2,3,1 arsym,x,2,5,1 aadd,2,3,4,5,6,7,8,9 asba,1,10 csys,0 arsym,x,2, , , ,0,0 nummer,all, , , ,low aadd,1,2 /auto,1 gplot !Meshing the plane smrt,6 amesh,all !Add DOF DK,2,UX,0, ,,UY DK,14,UX,0,,,UY !Add Pressure SFL,4,PRES,42 SFL,11,PRES,42 ―――――――――――――――――――――――――――

28


相关文章:
UIDL二次开发步骤
UIDL二次开发步骤_工学_高等教育_教育专区。ANSYS二次开发工具UIDL语言开发实例UIDL 二次开发工具在自卸车车厢设计中的实现 ANSYS 调用 UIDL 的过程 : 以下在 ANSY...
ANSYS Workbench的二次开发
ANSYS Workbench的二次开发_计算机软件及应用_IT/计算机_专业资料。ANSYS Workbench 的二次开发 市场竞争越来越激烈,这就要求压力容器分析设计在内的产品设计必须在更...
ANSYS二次开发 [精华]
ANSYS二次开发 [精华]_IT/计算机_专业资料。ansys 具有多种实用的二次开发工具: ANSYS 除了具有较为完善的分析功能外,同时还为用户进行二次开发提供了多种实用工...
ANSYS命令流、二次开发与HELP文档(介绍)
4 ANSYS 命令流、二次开发与 HELP 文档 ANSYS 命令流、二次开发与 HELP 文档之(三)——开发新命令与工具条交互 APDL 宏程序对使用者来说最大的益处在于能够把...
基于工程应用的VB与ANSYS接口问题及二次开发
基于工程应用的VB与ANSYS接口问题及二次开发_机械/仪表_工程科技_专业资料。摘要:目前,ANSYS软件在工程中应用广泛,计算结果在工程中的认可度也很高。本文主要介绍了...
ANSYS添加toolbar的方法
ANSYS添加toolbar的方法_计算机软件及应用_IT/计算机_专业资料。ANSYS二次开发之添加toolbar的方法ANSYS 添加 toolbar 的方法 1. 创建命令 abbr *ABBR 命令或者 GUI...
AutoCAD与Ansys数据接口的开发研究
AutoCAD 与 Ansys 数据接口的开发研究 及在工程中的应用 摘要:利用 AUTOCAD 中 VBA 语言进行二次开发,真正实现了在 AutoCAD 中建模,将数据导 入到 ansys 进行...
基于ANSYS二次开发的三剪统一强度理论的弹塑性刚度矩阵...
龙源期刊网 http://www.qikan.com.cn 基于 ANSYS 二次开发的三剪统一强度理论 的弹塑性刚度矩阵的验证 作者:陈波 刘闻欣 张文完 来源:《新农村》2011 年第 ...
ABAQUS_Fortran二次开发
ABAQUS_Fortran二次开发_计算机软件及应用_IT/计算机_专业资料。abaqus的二次开发...ANSYS,ABAQUS 等,这些软件的共同特点是具有丰富的单元库和求解器,强大而可 靠的...
ANSYS基本模块介绍_图文
·拓扑优化 二次开发特征 · ANSYS 参数化设计语言(APDL) · 用户可编程特性(UPF) · 用户界面设计语言(UIDL) · 专用界面开发工具(TCL/TK) · 外部命令 ...
更多相关标签: