Workbench如何做二次開(kāi)發(fā)【轉(zhuǎn)發(fā)】

2017-07-03  by:CAE仿真在線(xiàn)  來(lái)源:互聯(lián)網(wǎng)

下面文中的代碼均來(lái)自ANSYS的幫助文檔。


目前極少人做workbench的二次開(kāi)發(fā),一來(lái)是很不好做,二來(lái)可能必要性也沒(méi)那么大。筆者對(duì)Workbench的二次開(kāi)發(fā)作一個(gè)大概的介紹,用到的朋友大概也只能啃幫助手冊(cè)了。

正文

ANSYS Workbench二次開(kāi)發(fā)比較不容易做,其原因一是Workbench本身就是一個(gè)集成平臺(tái)而非一個(gè)軟件,二是開(kāi)發(fā)接口很難理解,開(kāi)發(fā)手冊(cè)寫(xiě)的真不好,三是目前貌似極少人(資料)做這方面的東西,流傳的資料幾乎沒(méi)有(除了ANSYS網(wǎng)站的官方文檔,在百度文庫(kù)有一些,再就是幫助手冊(cè)了)。

舉個(gè)例子,Workbench的二次開(kāi)發(fā)與HyperMesh相比有多費(fèi)勁,下圖是HyperMesh的一個(gè)API函數(shù)幫助文檔所給的注釋,可以看到,注釋寫(xiě)的非常的詳細(xì),包括函數(shù)的用途、類(lèi)型、語(yǔ)法、描述、數(shù)據(jù)類(lèi)型、變量描述等等。

Workbench如何做二次開(kāi)發(fā)【轉(zhuǎn)發(fā)】ansys結(jié)構(gòu)分析圖片1

圖1

下面再看看ANSYS幫助手冊(cè)所給的一個(gè)API函數(shù)的解釋,相比之下,費(fèi)勁很多,看了解釋也很難知道到底該怎么使用這個(gè)API函數(shù),而且更詭異的是居然還有很多的API函數(shù)沒(méi)有給出解釋,下圖這個(gè)是創(chuàng)建一個(gè)圓柱殼的API函數(shù),但是其他的比如創(chuàng)建矩形的API函數(shù)連解釋都沒(méi)有,使用者甚至不知道函數(shù)名稱(chēng)是什么。

感覺(jué)Workbench對(duì)于二次開(kāi)發(fā)的功能沒(méi)那么重視,不是其想引導(dǎo)的趨勢(shì)。

Workbench如何做二次開(kāi)發(fā)【轉(zhuǎn)發(fā)】ansys仿真分析圖片2

圖2

不過(guò),饒是如此,還是可以做,尤其在后處理方面,在前處理方面則很是費(fèi)勁,開(kāi)放的接口太少。

今次大概介紹下Workbench的二次開(kāi)發(fā)。

Workbench二次開(kāi)發(fā)的程序叫做extension,Extension主要有四個(gè)功能:

定義工具條和按鈕;

將按鈕與ACT對(duì)象綁定;

定義彈窗;

存儲(chǔ)數(shù)據(jù)。

下面的例子是在Workbench的Mechnical模塊下創(chuàng)建工具條和按鈕。

創(chuàng)建的工具條可以在支持ACT directomization(Workbench,AIM,Mechnical,DesignModeler,以及DesignXplore)的應(yīng)用程序中使用,也可以在支持guided-process extension(Fulent、Eletronic Desktop)的應(yīng)用程序中使用。

開(kāi)發(fā)的extension的界面形式是通過(guò)xml語(yǔ)言進(jìn)行編寫(xiě)的,通過(guò)xml定義extension的名稱(chēng)、屬性、執(zhí)行腳本、界面上的內(nèi)容等等,xml寫(xiě)出來(lái)的程序本身不能完成有效功能,只是一個(gè)定義好屬性以及保留了接口的界面而已。

<extension version="1" minorversion="0" name="ExtToolbarSample">

<script src="toolbarsample.py" />

<interface context="Mechanical">

<images>images</images>

<callbacks>

<oninit>init</oninit>

</callbacks>

<toolbar name="ToolBar1" caption="ToolBar1">

<entry name="TB1Button1" icon="button1Red">

<callbacks>

<onclick>OnClickTB1Button1</onclick>

</callbacks>

</entry>

<entry name="TB1Button2" icon="button2Red">

<callbacks>

<onclick>OnClickTB1Button2</onclick>

</callbacks>

</entry>

<entry name="TB1Button3" icon="button3Red">

<callbacks>

<onclick>OnClickTB1Button3</onclick>

</callbacks>

</entry>

</toolbar>

<toolbar name="Toolbar2" caption="Toolbar2">

<entry name="TB2Button1" icon="button1Blue">

<callbacks>

<onclick>OnClickTB2Button1</onclick>

</callbacks>

</entry>

<entry name="TB2Button2" icon="button2Blue">

<callbacks>

<onclick>OnClickTB2Button2</onclick>

</callbacks>

</entry>

<entry name="TB2Button3" icon="button3Blue">

<callbacks>

<onclick>OnClickTB2Button3</onclick>

</callbacks>

</entry>

</toolbar>

</interface>

</extension>

整段代碼定義了一個(gè)名為ExtToolbarSample的extension,執(zhí)行的python腳本是toolbarsample.py,通過(guò)<image>指定了背景,通過(guò)<interface context>指定該extension應(yīng)用在mechnical模塊下,通過(guò)<toolbar>定義了名稱(chēng)為T(mén)oolBar1的工具條,并且通過(guò)<entry>定義了按鈕入口,也就是該按鈕可以執(zhí)行函數(shù)OnClickTB1Button1。同樣的按鈕還定義了ToolBar2和ToolBar3,并分別綁定了點(diǎn)擊這幾個(gè)按鈕所要執(zhí)行的函數(shù),這些函數(shù)均在toolbarsample.py腳本文件中定義。

后面的代碼定義了另一個(gè)工具條,也即是上面這段代碼定義了兩個(gè)工具條,每個(gè)工具條上面分布有三個(gè)按鈕。

這六個(gè)按鈕均有相應(yīng)的函數(shù)與之綁定,一旦點(diǎn)擊該按鈕,便能執(zhí)行相應(yīng)的函數(shù),完成某個(gè)功能。

定義完成后的extension形式如下所示:

Workbench如何做二次開(kāi)發(fā)【轉(zhuǎn)發(fā)】ansys仿真分析圖片3

圖3

可以看到定義的兩個(gè)工具條及6個(gè)按鈕。

上面的XML所定義的接口代碼需要通過(guò)Python腳本文件的形式來(lái)實(shí)現(xiàn)。

針對(duì)上面按鈕所綁定的函數(shù),定義的toolbarsample.py文件內(nèi)容如下:

import os

import datetime

clr.AddReference("Ans.UI.Toolkit")

clr.AddReference("Ans.UI.Toolkit.Base")

from Ansys.UI.Toolkit import *

def init(context):

ExtAPI.Log.WriteMessage("Init ExtToolbarSample ...")

def OnClickTB1Button1(analysis):

LogButtonClicked(1, 1, analysis)

def OnClickTB1Button2(analysis):

LogButtonClicked(1, 2, analysis)

def OnClickTB1Button3(analysis):

LogButtonClicked(1, 3, analysis)

def OnClickTB2Button1(analysis):

LogButtonClicked(2, 1, analysis)

def OnClickTB2Button2(analysis):

LogButtonClicked(2, 2, analysis)

def OnClickTB2Button3(analysis):

LogButtonClicked(2, 3, analysis)

def LogButtonClicked(toolbarId, buttonId, analysis):

now = datetime.datetime.now()

outFile = SetUserOutput("ExtToolbarSample.log", analysis)

f = open(outFile,'a')

f.write("*.*.*.*.*.*.*.*\n")

f.write(str(now)+"\n")

f.write("Toolbar "+toolbarId.ToString()+" - Button "+buttonId.ToString()+" Clicked. \n")

f.write("*.*.*.*.*.*.*.*\n")

f.close()

MessageBox.Show("Toolbar "+toolbarId.ToString()+" - Button "+buttonId.ToString()+" Clicked.")

def SetUserOutput(filename, analysis):

solverDir = analysis.WorkingDir

return os.path.join(solverDir,filename)

該腳本中通過(guò)def定義了多個(gè)函數(shù),其中有按鈕所綁定的函數(shù),在這段Py代碼中除了用到通常的python語(yǔ)言,也用到了ANSYS Workbench的API函數(shù),例如ExtAPI.Log.WriteMessage(顯示信息)。

所有關(guān)鍵的功能也是通過(guò)Python語(yǔ)言和API函數(shù)聯(lián)合實(shí)現(xiàn)的。一般來(lái)說(shuō),提供的接口越多,所能做的開(kāi)發(fā)也越復(fù)雜,開(kāi)發(fā)起來(lái)也容易。

結(jié)合x(chóng)ml和py兩個(gè)文件以及其他一些輔助的,比如背景圖片等,就可以完成一個(gè)extension的開(kāi)發(fā),以擴(kuò)展Workbench的功能。


轉(zhuǎn)自公眾號(hào):CAE技術(shù)分享

開(kāi)放分享:優(yōu)質(zhì)有限元技術(shù)文章,助你自學(xué)成才

相關(guān)標(biāo)簽搜索:Workbench如何做二次開(kāi)發(fā)【轉(zhuǎn)發(fā)】 Ansys有限元培訓(xùn) Ansys workbench培訓(xùn) ansys視頻教程 ansys workbench教程 ansys APDL經(jīng)典教程 ansys資料下載 ansys技術(shù)咨詢(xún) ansys基礎(chǔ)知識(shí) ansys代做 Fluent、CFX流體分析 HFSS電磁分析 Abaqus培訓(xùn) 

編輯
在線(xiàn)報(bào)名:
  • 客服在線(xiàn)請(qǐng)直接聯(lián)系我們的客服,您也可以通過(guò)下面的方式進(jìn)行在線(xiàn)報(bào)名,我們會(huì)及時(shí)給您回復(fù)電話(huà),謝謝!
驗(yàn)證碼

全國(guó)服務(wù)熱線(xiàn)

1358-032-9919

廣州公司:
廣州市環(huán)市中路306號(hào)金鷹大廈3800
電話(huà):13580329919
          135-8032-9919
培訓(xùn)QQ咨詢(xún):點(diǎn)擊咨詢(xún) 點(diǎn)擊咨詢(xún)
項(xiàng)目QQ咨詢(xún):點(diǎn)擊咨詢(xún)
email:kf@1cae.com