周凱旋
(西南交通大學(xué)土木工程學(xué)院,四川成都 610031)
從20世紀(jì)70年代以來,隨著計(jì)算機(jī)技術(shù)的迅速發(fā)展,有限元分析軟件在結(jié)構(gòu)分析中的作用日益顯著,其中ANSYS作為大型通用有限元軟件之一,擁有結(jié)構(gòu)、熱、電、磁、流體等分析功能[1]。由于ANSYS是作為一種通用有限元軟件而使用,故在某些特定專業(yè)問題分析上流程復(fù)雜、操作繁瑣、不易掌握,為了便于專業(yè)用戶使用,ANSYS為二次開發(fā)提供了多種語言接口,用戶可根據(jù)自身專業(yè)特點(diǎn),對ANSYS進(jìn)行功能擴(kuò)充和系統(tǒng)集成。在ANSYS二次開發(fā)的過程中,主要用到APDL、UIDL、UPFs等語言,此外,ANSYS的運(yùn)行依賴于TCL/TK腳本語言,因而ANSYS可以采用該種語言進(jìn)行用戶自定義界面編寫,配合使用上述語言,極大的方便了用戶根據(jù)自身需要對ANSYS進(jìn)行二次開發(fā)。
UIDL是User Interface Design Language的縮寫,就是用戶界面設(shè)計(jì)語言。在ANSYS中主要完成以下三種圖形界面的設(shè)計(jì):主菜單系統(tǒng)及菜單項(xiàng)、對話框和拾取框、對話框幫助系統(tǒng)。一個(gè)完整的UIDL至少包含一個(gè)控制文件頭及若干個(gè)結(jié)構(gòu)塊,控制文件頭及結(jié)構(gòu)塊中各個(gè)位置代碼均有嚴(yán)格規(guī)定[2-3]。
在安裝有ANSYS的計(jì)算機(jī)上(15.0版本),UIDL在如下安裝目錄下,ANSYS15.0ANSYS INCV150ANSYSGUIEN-USUIDL,在UIDL文件夾下,主要有UIMENU.GRN、UIFUNC1.GRN、UIFUNC2.GRN、MENULIST150.ANS等文件,前三個(gè)用于菜單界面的制定,最后一個(gè)是ANSYS調(diào)用UIDL的文件路徑。也就是用戶在編寫UIDL語言時(shí),可以在原ANSYS安裝目錄下的UIMENU.GRN、UIFUNC1.GRN、UIFUNC2.GRN中進(jìn)行編寫,亦可在其他任意位置編寫自己的UIDL文件,只需要將ANSYS安裝目錄下的MENULIST150.ANS文件中的調(diào)用路徑做相應(yīng)修改即可。
ANSYS菜單界面的開發(fā)基于UIDL即可,主要修改UIDL文件夾下的UIMENU.GRN與UIFUNC2.GRN文件即可完成菜單的添加[5]。根據(jù)編寫規(guī)則,在UIMENU.GRN中的任意兩個(gè)結(jié)構(gòu)塊之間編寫自己的菜單代碼即可。代碼所在的位置決定菜單在界面上顯示的位置,如圖1所示菜單界面,其對應(yīng)的一、二級菜單代碼見表1,并在表中對代碼所實(shí)現(xiàn)的功能做出解釋。
圖1 菜單界面示例
三級菜單的添加需要在UIFUNC2.GRN文件中進(jìn)行,在UIFUNC2.GRN中的代碼編寫規(guī)則與表1相同,同樣在任意兩個(gè)結(jié)構(gòu)塊之間編寫三級菜單的代碼,最后將Doproject添加至UIFUNC.GRN中的根菜單(Menuroot)下即完成圖1所示菜單界面的編寫。
通過以上編寫,完成在ANSYS中添加自己的菜單界面,單擊菜單選項(xiàng)所響應(yīng)的界面,可以在UIDL中進(jìn)行編寫,也可以采用TCL/TK語言進(jìn)行編寫并生成一個(gè)TCL文件,只需在UIDL中調(diào)用該文件即可。
表1 一、二級菜單源代碼
在創(chuàng)建用戶界面時(shí),窗口是最頂層結(jié)構(gòu),其他一切構(gòu)件的擺放均需要在窗口上實(shí)現(xiàn),如Toplevel.Dcck 可以創(chuàng)建一個(gè)名稱為Dcck的窗口。命令Wm Title.Dcck “建模窗口”設(shè)置窗口標(biāo)題顯示的文本內(nèi)容為“建模窗口”。在創(chuàng)建頂層窗口之后,才能在窗口上面進(jìn)行其他構(gòu)架的設(shè)計(jì)[6]。
創(chuàng)建標(biāo)簽的命令是Lable,如“Label.H -Text “名稱”-Relief Sunken -Width 10 -Font {仿宋 25}”,.H是所創(chuàng)建標(biāo)簽的名稱,Text為標(biāo)簽顯示的文本內(nèi)容。標(biāo)簽的文本選項(xiàng)有Text與Textvariable兩種,Text是文本要顯示的字符串,Textvariable 選項(xiàng)可以將它的值設(shè)置為一個(gè)對全局的變量并顯示該變量的內(nèi)容,當(dāng)文本框中的內(nèi)容改變時(shí),該變量會發(fā)生相應(yīng)的改變。-Font用于設(shè)置標(biāo)簽字體。Labelframe命令與Label命令格式相似,用于創(chuàng)建標(biāo)簽框架,并將界面上的組件進(jìn)行分組,使界面整潔有序。
創(chuàng)建按鈕的基本語句如:Button Cancel -Text “取消” -Command Quxiao。創(chuàng)建了一個(gè)名為“Cancel”的按鈕,按鈕上顯示的文本內(nèi)容為“取消”,-Command選項(xiàng)為按鈕創(chuàng)建一個(gè)名稱為“Quxiao”響應(yīng)過程,但這個(gè)過程的響應(yīng)功能還需要另外定義。
創(chuàng)建輸入框的命令為Entry,如Entry.Entry -Width 20 -Relief Sunken,創(chuàng)建一個(gè)名為Entry的輸入框,指定其寬度為20,-Relief選項(xiàng)用于設(shè)置輸入框的凹凸樣式,其后面參數(shù)有Raised、Sunken、Flat、Groove、Ridge,同樣適用于標(biāo)簽框架。
TK的幾何管理器決定組件在窗口上的位置及尺寸。TK中有三種幾何管理器分別是打包器(Pack),定位器(Place)與網(wǎng)格管理器(Grid)。最常用的為Grid,它將界面劃分網(wǎng)格,將組件在窗口上按行列布置,其后面的屬性有-Row(行位置),-Column(列位置)。Rowspan(跨行),Columnspan(跨列),如Grid $Lab1 -Row 2 -Column 1,將Lab1放在窗口上的第二行,第一列位置。
創(chuàng)建圖像的語句如:Image Create Type Name Option Value。Image Create是創(chuàng)建圖像的命令;Type是圖像的類型;Name是的圖像的名字;Option Value對參數(shù)指定圖像的屬性。圖像可以采用內(nèi)部命令創(chuàng)建也可以調(diào)用已有的圖片。圖片的顯示可以采用如下方法,先讀取圖片并將其顯示在一個(gè)標(biāo)簽上,然后通過Grid命令將帶有圖片的標(biāo)簽顯示在窗口上。
綁定事件可以實(shí)現(xiàn)圖形的動態(tài)刷新。綁定事件的命令為bind,可以用于綁定的事件有Key或Keypress—按下按鍵,Keyrelease—釋放按鍵,Button或Buttonpress—按下鼠標(biāo)鍵等。如語句:Bind.Entry
綜合運(yùn)用以上功能,用戶即可根據(jù)自身需求編寫出自己的用戶界面,將編寫該界面所用的每一類代碼舉例列于表2,配合使用如下代碼,即可編寫出圖2所示用戶界面。
表2 部分源代碼
圖2 自定義用戶窗口界面
用TCL/TK編寫的界面文件以TCL為擴(kuò)展名,將編寫好的TCL文件放在電腦中,并在ANSYS中可以通過以下三種命令的方式調(diào)用TCL/TK所編寫的文件。
(1)~Tcl,’Source Filename’;
(2)~Tk,’Source Filename’;
(3)~Tui, ’Source Filename’。
其中’Source Filename’是TCL/TK程序,包括調(diào)用路徑和所要調(diào)用的TCL文件名。在用UIDL所編寫的菜單中也可以調(diào)用TCL文件,要實(shí)現(xiàn)該功能就要在用UIDL編寫菜單時(shí)使用:C命令,在該命令后編寫相應(yīng)調(diào)用語句。
TCL文件亦可向ANSYS傳遞命令,實(shí)現(xiàn)該功能的命令為Ans_Sendcommand,在上述編寫界面的TCL文件中,在代碼開頭加入Ans_Sendcommand,那么在該代碼后面即可編寫ANSYS自身的APDL命令,用于建模計(jì)算等。也就是ANSYS的用戶界面編寫及后續(xù)的計(jì)算分析命令,均可集成于TCL文件中。
本文介紹了在ANSYS中通過修改UIDL中相應(yīng)文件來定制用戶自定義菜單的方法,運(yùn)用TCL/TK中創(chuàng)建窗口、標(biāo)簽以及按鈕等功能編寫用戶界面,通過幾何管理器實(shí)現(xiàn)構(gòu)件在窗口上的合理擺放,并由綁定事件功能實(shí)現(xiàn)界面上構(gòu)件的過程響應(yīng),最后通過ANSYS與TCL文件互調(diào)命令,實(shí)現(xiàn)ANSYS調(diào)用集成的TCL文件與TCL文件向ANSYS傳遞命令。根據(jù)該方法,用戶可以方便的編寫符合自身需求的界面,并將部分ANSYS命令集成于TCL文件中,從而可以大大提高設(shè)計(jì)效率。此外,本文給出代碼示例,可以為其他用戶開發(fā)自身需求的界面提供參考。