輕松上手Mechanical腳本自動(dòng)化
還在用APDL?你Out了!快使用ANSYS ACT及其強(qiáng)大的API編寫腳本,我們可以輕松地自動(dòng)化Mechanical的日常任務(wù),固化仿真分析流程,極大提升工作效率。
1、Mechanical腳本概述
腳本是指使用編程語(yǔ)言與軟件產(chǎn)品進(jìn)行交互和修改。Workbench Mechanical支持兩種腳本語(yǔ)言:JavaScript和ACT Python,兩者都暫不支持腳本錄制,只能基于API編寫。
ACT自動(dòng)化API是基于Python語(yǔ)言,允許我們自動(dòng)化Mechanical仿真過程(網(wǎng)格劃分、模型設(shè)置、后處理等)和獲取或設(shè)置與本地Mechanical對(duì)象的相關(guān)數(shù)據(jù),這在此之前需要使用JavaScript,現(xiàn)在可以使用IronPython編寫實(shí)現(xiàn)自動(dòng)化腳本。
Python是一種面向?qū)ο?、解釋型的高?jí)編程語(yǔ)言,語(yǔ)法簡(jiǎn)潔、優(yōu)雅、編寫的程序易讀,易于學(xué)習(xí)和掌握,適用于非高級(jí)開發(fā)人員。對(duì)于Mechanical腳本開發(fā)來(lái)說,JavaScript腳本開發(fā)目前沒有公開的API文檔可供參考。
ANSYS提供了非常詳細(xì)和全面的基于Python的ACT開發(fā)文檔,而且正在逐步擴(kuò)展和完善ACT開發(fā)g功能,所以說基于Python的ACT開發(fā)代表了以后ANSYS二次開發(fā)的發(fā)展方向。
ACT開發(fā)資料免費(fèi)贈(zèng)送:絕無(wú)僅有!我整理的132份Ansys ACT二次開發(fā)學(xué)習(xí)資料
2、ACT Python腳本編寫
在嘗試編寫Mechanical自動(dòng)化腳本之前,我們首先應(yīng)該熟悉IronPython2.7的使用方法,然后需要了解Mechanical中ACT控制臺(tái)、對(duì)象結(jié)構(gòu)、如何訪問對(duì)象及其子對(duì)象、如何設(shè)置和修改對(duì)象的屬性值等。
2.1ACT控制臺(tái)
Mechanical中的ACT控制臺(tái)提供ACT Python腳本命令的輸入,以便我們開發(fā)和調(diào)試腳本代碼。

打開后的ACT控制臺(tái)如下所示。通過控制臺(tái)窗口以交互式執(zhí)行腳本命令,我們可以:
為擴(kuò)展的ACT插件查找合適命令;
訪問和設(shè)置Mechanical中對(duì)象數(shù)據(jù);
在開發(fā)插件之前測(cè)試腳本代碼;
調(diào)試開發(fā)的ACT插件。

ACT控制臺(tái)支持多行腳本命令編輯、代碼自動(dòng)縮進(jìn)、代碼自動(dòng)補(bǔ)全、代碼高亮、歷史記錄和代碼片段管理,常用的快捷鍵如下。

2.2代碼自動(dòng)補(bǔ)全
ACT控制臺(tái)提供智能的自動(dòng)補(bǔ)全功能,這意味著它考慮了括號(hào)或引號(hào)等語(yǔ)法元素。當(dāng)在編輯器中輸入句點(diǎn)時(shí),命令行上方將顯示一個(gè)可滾動(dòng)的建議列表,方便我們快速完成腳本命令鍵入。每個(gè)代碼補(bǔ)全建議都有一個(gè)帶有字母和顏色編碼的圖標(biāo):
方形圖標(biāo)中的字母描述了成員的類型,如P代表屬性(Property),M代表方法(Method)。
圓形圖標(biāo)中的字母描述所選成員的返回值類型,如C表示類(Class),E表示枚舉(Enumeration)。

2.3 Mechanical對(duì)象結(jié)構(gòu)
ACT自動(dòng)化API提供對(duì)Mechanical結(jié)構(gòu)樹中所有對(duì)象的訪問權(quán)限,允許我們創(chuàng)建對(duì)象、刪除對(duì)象或修改對(duì)象屬性。
通過ACT訪問Mechanical結(jié)構(gòu)樹時(shí),ExtAPI.DataModel.Project是所有對(duì)象的根節(jié)點(diǎn)。
腳本對(duì)象訪問遵循和Mechanical結(jié)構(gòu)樹相同的結(jié)構(gòu),從這里我們可以訪問所有子節(jié)點(diǎn)上的對(duì)象。
例如訪問Mesh對(duì)象,我們輸入ExtAPI.DataModel.Project.Model.Mesh,或者可簡(jiǎn)寫為Model.Mesh;可以采用相同方式訪問模型所有第一級(jí)對(duì)象(如Geometry、CoordinateSystems等)。

除了Environment對(duì)象(如邊界載荷、后處理等)之外,結(jié)構(gòu)樹中的所有對(duì)象都遵循單例模式,即第一級(jí)對(duì)象的實(shí)例對(duì)象不可能同時(shí)存在兩個(gè)。
Environment對(duì)象作為第一級(jí)對(duì)象的子對(duì)象,存在一個(gè)或多個(gè)實(shí)例對(duì)象,不存在直接的訪問點(diǎn)。例如,我們可以添加多個(gè)Pressure載荷,如果要想訪問這些對(duì)象,就必須通過Children屬性或GetChildren方法訪問。
2.4子對(duì)象
如上所述,對(duì)于能在Mechanical結(jié)構(gòu)樹中存在多個(gè)實(shí)例的對(duì)象,不存在直接的訪問點(diǎn)。對(duì)于這些子對(duì)象,我們可以按照以下方法訪問:①引用父對(duì)象實(shí)例,使用Children屬性或者GetChildren方法,獲得所有子對(duì)象列表。②通過列表索引或?qū)ο竺Q(Name)引用的方式去獲得子對(duì)象。下面我們通過一個(gè)實(shí)例演練一下。

上面模型中,可以直接通過結(jié)構(gòu)樹訪問Named Selections對(duì)象,并將實(shí)例對(duì)象賦值給變量nsObject;
然后獲取nsObject對(duì)象的Children屬性得到子對(duì)象列表;也可以基于父對(duì)象中子對(duì)象的枚舉類型,使用GetChildren方法獲得子對(duì)象列表,方法需要傳入兩個(gè)參數(shù):①枚舉類型(DataModelObjectCategory),指定要查找的對(duì)象的類別。②布爾類型,指定是否遞歸地檢索子類。
獲得子對(duì)象列表之后,將其賦值給nsList變量。
最后通過nsList的列表索引訪問子對(duì)象;獲得子對(duì)象之后,我們可以訪問它們的Name屬性,然后在控制臺(tái)打印出來(lái),代碼和結(jié)果如下。# 獲取Named Selections實(shí)例對(duì)象nsObject = Model.NamedSelections
# 三種方法獲取Named Selections對(duì)象的子對(duì)象列表
nsList = nsObject.Children
nsList = nsObject.GetChildren(DataModelObjectCategory.NamedSelection,True)
nsList = DataModel.GetObjectsByType(DataModelObjectCategory.NamedSelection)
# 列表索引方式獲得子對(duì)象實(shí)例
nsFixed = nsObject.Children[0]
nsPress = nsObject.Children[1]
nsBracket = nsObject.Children[2]
# 訪問子對(duì)象的Name屬性,打印到控制臺(tái)
print?nsFixed.Name, nsPress.Name, nsBracket.Name

上面代碼中,我們通過列表索引獲取子對(duì)象,同樣也能通過其名稱引用子對(duì)象實(shí)例,封裝的代碼方法如下:
# 給定Named Selection名稱獲取子對(duì)象實(shí)例def?GetLocByName(ns_name):
for?ns?in?Model.NamedSelections.Children:
if?ns.Name == ns_name:?return?ns
nsFixed = GetLocByName("FixedSurface")
nsPress = GetLocByName("PressSurface")
nsBracket=GetLocByName("BracketBody")
2.5添加子對(duì)象Mechanical結(jié)構(gòu)樹中的第一級(jí)對(duì)象都可作為父對(duì)象添加子對(duì)象;在界面上我們可以選中父對(duì)象,然后單擊右鍵會(huì)出現(xiàn)菜單,選擇Insert項(xiàng)下的子菜單項(xiàng)就可添加子對(duì)象。

ACT自動(dòng)化API中,要想添加子對(duì)象到結(jié)構(gòu)樹中,首先要獲得其父對(duì)象實(shí)例,然后調(diào)用父對(duì)象的addObjectName()方法,其中ObjectName是所需對(duì)象的名稱;最后需要設(shè)置子對(duì)象的屬性參數(shù)。
例如,我們?cè)陟o結(jié)構(gòu)(Static Structure)分析下添加一個(gè)Force載荷,可輸入以下代碼:
#1.To get the static structural analysis object, type:
analysisObj = Model.Analyses[0]
#2.To create the force and assign it to a variable, type AddForce()
force = analysisObj.AddForce()
#3.Nowwecanmanipulatethecreatedforce'spropertyusing
force.TypeHereAProperty=TypeHerePropertyValue
2.6修改對(duì)象屬性
一旦我們獲得Mechanical對(duì)象的實(shí)例后,就可以在ACT控制臺(tái)中,通過腳本命令讀取和修改界面上詳細(xì)視圖(Details View)中對(duì)應(yīng)的屬性參數(shù)。在Mechanical中屬性值常見的有6種輸入類型:Number、Enumeration、Bool、Quantity、Scoping和Magnitude,下面我們?cè)敿?xì)介紹一下使用方法。(1) Number值類型對(duì)象詳細(xì)視圖下需要輸入無(wú)單位數(shù)值的項(xiàng),屬性值應(yīng)該賦予對(duì)應(yīng)Number值類型,如int整形。例如更改分析設(shè)置中的計(jì)算步數(shù),輸入如下。
(2) Enumeration值類型
對(duì)象詳細(xì)視圖中提供下拉框選擇的選項(xiàng),屬性值應(yīng)賦予對(duì)應(yīng)的Enumeration值類型,如下設(shè)置屬性SolverType值為SolverType.Direct枚舉類型。

(3) Bool值類型對(duì)象詳細(xì)視圖中需要只選擇On和Off的選項(xiàng),屬性值應(yīng)賦予對(duì)應(yīng)的Bool類型。比如激活分析設(shè)置中的大變形選項(xiàng),輸入如下。

(4) Quantity值類型
對(duì)象詳細(xì)視圖中需要輸入帶單??數(shù)值的項(xiàng),屬性值應(yīng)賦予對(duì)應(yīng)的Quality類型:類型為Quantity(‘value[unit]’)。例如,更改網(wǎng)格單元格尺寸為2mm,輸入如下。

(5) Scoping值類型
對(duì)象詳細(xì)視圖中Scope組中需要指定Geometry的項(xiàng),對(duì)象的Location屬性應(yīng)賦予對(duì)應(yīng)的Scoping值類型。Mechanical提供兩種指定方式:Geometry Selection和Named Selection。例如,添加一個(gè)Pressure載荷,并指定加載的邊界位置,我們采用兩種方式實(shí)現(xiàn),輸入如下。
Geometry Selection選擇:需要先創(chuàng)建一個(gè)SelectionInfo對(duì)象,然后將幾何實(shí)體賦予SelectionInfo對(duì)象的Entities屬性,最后指定給壓力載荷對(duì)象的Location屬性。

Named Selection選擇:需要得到Named Selections下子對(duì)象的實(shí)例,然后指定給壓力載荷對(duì)象的Location屬性。

(6) Magnitude值類型對(duì)象詳細(xì)視圖中需要輸入Magnitude值的項(xiàng),屬性值應(yīng)賦予Magnitude值類型;Mechanical中提供三種輸入模式:①公式輸入②表格數(shù)據(jù)③常數(shù)類型。例如,我們繼續(xù)以(5)中的壓力載荷對(duì)象,給定載荷數(shù)值大小。
公式輸入

表格數(shù)據(jù)

常數(shù)類型

2.7輸出云圖
云圖輸出首先需要?jiǎng)?chuàng)建后處理對(duì)象,然后激活對(duì)象讓其高亮顯示,最后使用Graphics.ExportImage方法,指定輸出的圖片路徑即可。例如,我們創(chuàng)建一個(gè)總變形云圖,然后輸出照片,代碼示例如下。
total_deform=Model.Analyses[0].Solution.AddTotalDeformation()total_deform.EvaluateAllResults()total_deform.Activate()Graphics.ExportImage("E:\\Workdata\\total.png")3、Workbench集成在Workbench腳本中可以通過SendCommand命令將ACT Python命令發(fā)送Mechanical去執(zhí)行,以實(shí)現(xiàn)仿真流程的集成,代碼示例如下所示。

4、案例練習(xí)
本期中我們可以基于SCDM腳本建模生成的模型,在Mechanical中使用ACT Python腳本實(shí)現(xiàn)自動(dòng)化仿真分析。

使用SCDM創(chuàng)建模型和Mechanical仿真設(shè)置過程大家可以參照上一篇文章,然后參照本期內(nèi)容,自己上手編寫自動(dòng)化腳本吧。
領(lǐng)取鏈接及位置:
https://www.fangzhenxiu.com/share/activity/giftNew?id=117&checkCode=FLLB506675368
領(lǐng)取方式:點(diǎn)擊鏈接,輸入手機(jī)號(hào),獲取網(wǎng)盤資料群,掃碼進(jìn)群,打開下圖位置,即可領(lǐng)取~
