仿真在线:有限元分析咨询与培训中心——Ansys|Fluent|Abaqus|HFSS|SolidWorks|课程培训

Workbench中利用Python驅動DM執行Jscript腳本參數化建模

2017-09-15  by:CAE仿真在線  來源:互聯網

Workbench的工作平臺下可以利用Python進行一些操作,包括添加system和component等等,在工作臺所做的一些操作也都能夠被py代碼所記錄,例如添加幾何模塊DM,打開、更新、以及關閉DM模塊。


而DM模塊本身的腳本語言是jscript,也即是在DM中所進行的建模操作(主要是sketch草圖命令能夠被DM所記錄,而一些簡單的三維操作例如拉伸、旋轉等則可以通過添加js API命令完成)。因此,DM可以通過執行Jscript腳本進行自動參數化建模。

基于這兩方面的理解,可以結合這兩塊內容,可以利用Python驅動DM執行Js腳本進行自動化建模。

首先創建好Jscript腳本文件,文件代碼如下所示,代碼創建了一個簡單的模型,一個名稱為Sketch1的草圖,草圖中定義了坐標,草圖的主要內容是橢圓線,采用的函數為Ellipse,該函數在Workbench的幫助文檔有比較詳細的解釋。

這里補充一點,DM中的js腳本記錄是比較有意思的,完全不像ANSYS 經典中的log文件記錄,js記錄的是最終所呈現的結果,而不關心這個結果是怎么得來的,也即是其內部有一個轉化過程。


var ps1 = new Object();

ps1.Plane = agb.GetActivePlane();

ps1.Origin = ps1.Plane.GetOrigin();

ps1.XAxis = ps1.Plane.GetXAxis();

ps1.YAxis = ps1.Plane.GetYAxis();

ps1.Sk1 = ps1.Plane.NewSketch();

ps1.Sk1.Name = "Sketch1";

with (ps1.Sk1) { ps1.El7 = Ellipse( 8.0, 10.0, 9.0, 6.0, 5.0, 12.0); }

agb.Regen();

然后需要寫Python代碼,用于在Workbench下面添加一個DM模塊,并自動打開。

利用Python向DM傳遞js代碼需要用到SendCommand函數,具體應用如下所示:

# encoding: utf-8

# Release 16.0

SetScriptVersion(Version="16.0.361")

template1 = GetTemplate(TemplateName="Geometry")

system1 = template1.CreateSystem()

system1 = GetSystem(Name="Geom")

geometry1 = system1.GetContainer(ComponentName="Geometry")

geometry1.Edit()

geometry1.SendCommand( Command = """var ps1 = new Object();

ps1.Plane = agb.GetActivePlane();

ps1.Origin = ps1.Plane.GetOrigin();

ps1.XAxis = ps1.Plane.GetXAxis();

ps1.YAxis = ps1.Plane.GetYAxis();

ps1.Sk1 = ps1.Plane.NewSketch();

ps1.Sk1.Name = "Sketch1";

with (ps1.Sk1) { ps1.El7 = Ellipse( 8.0, 10.0, 9.0, 6.0, 5.0, 12.0); }

agb.Regen();""")


其中打開DM的函數是geometry1.Edit(),之后通過SendCommand命令像DM中傳輸一段js腳本命令,執行后即可在Workbench中顯示如下所示:


Workbench中利用Python驅動DM執行Jscript腳本參數化建模ansys分析案例圖片1

注意:上段python代碼中有一條geometry1.Edit(),該函數是打開DM,若沒有該行,那么執行該段代碼時不會打開DM,而是相當于批處理的形式進行運行,結果依然會生成相應的幾何模型,只是看不到彈出的DM窗口。

生成的簡單模型如下所示:


Workbench中利用Python驅動DM執行Jscript腳本參數化建模ansys分析案例圖片2


上文中所說的workbench可以自動記錄py代碼,DM可以自動記錄js代碼,代碼的提取過程這里不做詳細闡述,大概前面所推送的文章可能已經說清楚了怎么操作。

另外,關于DM自動記錄的js腳本,可以簡單說一點。DM自動記錄的js腳本是比較完備的,因此整個結構也相對較長,可以根據自己實際需要,進行一些修改和調整,將比較長的js代碼減縮成較短。下面是一個例子,首先是DM自動記錄的代碼,如下:


function planeSketchesOnly (p)

{


//Plane

p.Plane = agb.GetActivePlane();

p.Origin = p.Plane.GetOrigin();

p.XAxis = p.Plane.GetXAxis();

p.YAxis = p.Plane.GetYAxis();


//Sketch

p.Sk1 = p.Plane.NewSketch();

p.Sk1.Name = "Sketch1";


//Edges

with (p.Sk1)

{

p.Ln7 = Line(0.50000000, 0.00000000, 0.52000000, 0.00000000);

p.Ln8 = Line(0.52000000, 0.00000000, 0.52000000, -1.00000000);

p.Ln9 = Line(0.52000000, -1.00000000, 0.50000000, -1.00000000);

p.Ln10 = Line(0.50000000, 0.00000000, 0.50000000, -1.00000000);

}



//Sketch

p.Sk2 = p.Plane.NewSketch();

p.Sk2.Name = "Sketch2";


//Edges

with (p.Sk2)

{

p.Ln11 = Line(0.10000000, -0.60000000, 1.00000000, -0.60000000);

p.Ln12 = Line(1.00000000, -0.60000000, 1.00000000, -0.62000000);

p.Ln13 = Line(1.00000000, -0.62000000, 0.10000000, -0.62000000);

p.Ln14 = Line(0.10000000, -0.62000000, 0.10000000, -0.60000000);

p.Ln15 = Line(0.00000000, -0.50000000, 1.36996958, -0.50000000);

}


//Dimensions and/or constraints

with (p.Plane)

{

//Dimensions

var dim;

dim = HorizontalDim(p.Ln7.End, 0.52000000, 0.00000000,

p.Origin, 0.00000000, 0.00000000,

0.17309513, 0.08524206);

if(dim) dim.Name = "H1";

dim = HorizontalDim(p.Ln7.Base, 0.50000000, 0.00000000,

p.Origin, 0.00000000, 0.00000000,

0.21784972, 0.04405282);

if(dim) dim.Name = "H3";

dim = HorizontalDim(p.Ln9.End, 0.50000000, -1.00000000,

p.Origin, 0.00000000, 0.00000000,

0.18917694, -1.09429710);

if(dim) dim.Name = "H5";

dim = HorizontalDim(p.Ln13.Base, 1.00000000, -0.62000000,

p.Origin, 0.00000000, 0.00000000,

0.63773372, -0.70127145);

if(dim) dim.Name = "H8";

dim = HorizontalDim(p.Ln14.Base, 0.10000000, -0.62000000,

p.Origin, 0.00000000, 0.00000000,

0.06909186, -0.66559300);

if(dim) dim.Name = "H9";

dim = VerticalDim(p.Ln8.End, 0.52000000, -1.00000000,

p.Origin, 0.00000000, 0.00000000,

0.68257161, -0.32089647);

if(dim) dim.Name = "V4";

dim = VerticalDim(p.Ln11.Base, 0.10000000, -0.60000000,

p.Origin, 0.00000000, 0.00000000,

0.99779297, -0.16801956);

if(dim) dim.Name = "V6";

dim = VerticalDim(p.Ln13.Base, 1.00000000, -0.62000000,

p.Origin, 0.00000000, 0.00000000,

1.41320222, -0.10522609);

if(dim) dim.Name = "V7";

dim = VerticalDim(p.Ln15.Base, 0.00000000, -0.50000000,

p.Origin, 0.00000000, 0.00000000,

-0.22013445, -0.13289963);

if(dim) dim.Name = "V10";


//Constraints

HorizontalCon(p.Ln7);

HorizontalCon(p.Ln9);

HorizontalCon(p.Ln11);

HorizontalCon(p.Ln13);

HorizontalCon(p.Ln15);

VerticalCon(p.Ln8);

VerticalCon(p.Ln12);

VerticalCon(p.Ln14);

CoincidentCon(p.Ln7.End, 0.52000000, 0.00000000,

p.XAxis, 0.54446962, 0.00000000);

CoincidentCon(p.Ln8.Base, 0.52000000, 0.00000000,

p.Ln7.End, 0.52000000, 0.00000000);

CoincidentCon(p.Ln9.Base, 0.52000000, -1.00000000,

p.Ln8.End, 0.52000000, -1.00000000);

CoincidentCon(p.Ln10.Base, 0.50000000, 0.00000000,

p.Ln7.Base, 0.50000000, 0.00000000);

CoincidentCon(p.Ln10.End, 0.50000000, -1.00000000,

p.Ln9.End, 0.50000000, -1.00000000);

CoincidentCon(p.Ln11.End, 1.00000000, -0.60000000,

p.Ln12.Base, 1.00000000, -0.60000000);

CoincidentCon(p.Ln12.End, 1.00000000, -0.62000000,

p.Ln13.Base, 1.00000000, -0.62000000);

CoincidentCon(p.Ln13.End, 0.10000000, -0.62000000,

p.Ln14.Base, 0.10000000, -0.62000000);

CoincidentCon(p.Ln14.End, 0.10000000, -0.60000000,

p.Ln11.Base, 0.10000000, -0.60000000);

CoincidentCon(p.Ln15.Base, 0.00000000, -0.50000000,

p.YAxis, 0.00000000, -0.50650669);

}


p.Plane.EvalDimCons(); //Final evaluate of all dimensions and constraints in plane


return p;

}

var ps1 = planeSketchesOnly (new Object());


var rev1=agb.Revolve(agc.Add,ps1.Sk1,ps1.YAxis,agc.DirReversed,180.0, 0.0, agc.No, 0.0, 0.0)

agb.Regen();


從上面這段js代碼可以看出,整個草圖建立的過程是用一個函數來定義的,通過調用函數var ps1 = planeSketchesOnly (new Object())即可生成草圖,有點面向對象的意思。

還可以注意到,代碼中包含了很多關于尺寸約束的部分,雖然在利用GUI操作時,尺寸約束過程通常必不可少,但是在js代碼中卻是可以省略的,原因在于代碼建立線(舉例)直接用的就是約束后的尺寸,已經實現了參數化,無需再添加尺寸約束部分的代碼,除非是想要強行修改尺寸。

基于此觀點,可以將上段的代碼進行精簡,精簡后的js腳本如下:


var ps1 = new Object();

//Plane

ps1.Plane = agb.GetActivePlane();

ps1.Origin = ps1.Plane.GetOrigin();

ps1.XAxis = ps1.Plane.GetXAxis();

ps1.YAxis = ps1.Plane.GetYAxis();


ps1.Sk1 = ps1.Plane.NewSketch();

ps1.Sk1.Name = "Sketch1";


with (ps1.Sk1)

{

ps1.Ln7 = Line(0.50000000, 0.00000000, 0.52000000, 0.00000000);

ps1.Ln8 = Line(0.52000000, 0.00000000, 0.52000000, -1.00000000);

ps1.Ln9 = Line(0.52000000, -1.00000000, 0.50000000, -1.00000000);

ps1.Ln10 = Line(0.50000000, 0.00000000, 0.50000000, -1.00000000);

}


ps1.Sk2 = ps1.Plane.NewSketch();

ps1.Sk2.Name = "Sketch2";


with (ps1.Sk2)

{

ps1.Ln11 = Line(0.10000000, -0.60000000, 1.00000000, -0.60000000);

ps1.Ln12 = Line(1.00000000, -0.60000000, 1.00000000, -0.62000000);

ps1.Ln13 = Line(1.00000000, -0.62000000, 0.10000000, -0.62000000);

ps1.Ln14 = Line(0.10000000, -0.62000000, 0.10000000, -0.60000000);

ps1.Ln15 = Line(0.00000000, -0.50000000, 1.36996958, -0.50000000);

}


var rev1=agb.Revolve(agc.Add,ps1.Sk1,ps1.YAxis,agc.DirReversed,180.0, 0.0, agc.No, 0.0, 0.0)

agb.Regen();



代碼長度短了很多,而效果依然一樣。


開放分享:優質有限元技術文章,助你自學成才

相關標簽搜索:Workbench中利用Python驅動DM執行Jscript腳本參數化建模 Ansys有限元培訓 Ansys workbench培訓 ansys視頻教程 ansys workbench教程 ansys APDL經典教程 ansys資料下載 ansys技術咨詢 ansys基礎知識 ansys代做 Fluent、CFX流體分析 HFSS電磁分析 Abaqus培訓 

編輯
在線報名:
  • 客服在線請直接聯系我們的客服,您也可以通過下面的方式進行在線報名,我們會及時給您回復電話,謝謝!
驗證碼

全國服務熱線

1358-032-9919

廣州公司:
廣州市環市中路306號金鷹大廈3800
電話:13580329919
          135-8032-9919
培訓QQ咨詢:點擊咨詢 點擊咨詢
項目QQ咨詢:點擊咨詢
email:kf@1cae.com




主站蜘蛛池模板: 清关公司_进口报关公司【恒邦】进口报关流程及费用 | 中国焊接协会网站—中国焊接信息网;焊接行业最权威访问量最大的专业网站:焊接信息、焊接材料,焊接机器,焊接设备,焊机,焊材,辅助设备,焊机配件,仪器仪表,电动工具,钎焊,送丝机,表面处理,自动化专机,焊锡丝,助焊剂 | 耀美软瓷施工队-13638350103-专注于软瓷施工勾缝的贴软瓷施工队 - 软瓷,软瓷施工,软瓷勾缝,软瓷怎么施工,软瓷怎么勾缝,贴软瓷,软瓷施工队 | 全自动贴标机厂家-深圳市优斯迪自动贴标机官网| 显微镜|金相显微镜|光学显微镜专业生产商-上海光学仪器厂 | 山东货架厂家,重型货架,阁楼货架,钢平台,板材货架-山东智造仓储设备有限公司 | 深圳起重机,龙门吊,天车起重工程,电动葫芦,液压升降货梯-深圳市德力起重机械有限公司 | 锯轨机|气动锯轨机|内燃锯轨机|电动钢轨钻孔机|内燃钢轨钻孔机-山东卓力铁路设备有限公司 | 网站建设|外贸网站建设|做网站公司-济南超越互联-推荐 | 吸管包装机_塑料杯包装机_纸杯包装机_吸管挤出机_温州恩博机械有限公司 | 上海互动多媒体公司_上海触摸屏软件开发_上海互动投影开发_上海VR虚拟现实制作_上海全息投影制作_上海互动轨道屏制作—盟邑数字 上海浩斌信息科技有限公司RFID读写器,IC卡读卡器,手持机,数据采集终端,电力仓库管理软件开发,固定资产软件,纱管标签,试剂管理,RFID试剂柜,档案管理,档案柜,智能货架 | 亿企商贸-亿万企业的商务贸易平台-B2B企业产品发布供求信息平台,一带一路中国企业及产品展示平台,免费企业智能自助建站网络营销推广平台,打造B2B企业黄页产品信息发布推广专业综合电子商务平台! | 扬州华工电气有限公司|环氧树脂管|金刚石绝缘板|U型绝缘槽|电解槽绝缘材料 | 上海舞台灯光音响租赁搭建线阵_年会演出摇头光束面光灯出租_led电子显示屏出租-上海led大屏幕租赁 | 种植槽系统,移动苗床,多层种植货架,潮汐苗床,物流苗床,潮汐面板,立体旋转育秧床,河北博超温室设备有限公司 | 西安鲁班装饰 - 家庭装修,别墅装修,西安十大装修公司排名 | 中深世纪广告公司 深圳标志设计,深圳logo设计公司,包装设计公司,深圳商标设计,深圳画册设计公司 中商信息网-商务数据网-中文商务数据网 | 西安泰富西玛电机有限公司总部-电机-高压电机-西玛电机-西安西玛电机-泰富西玛电机-西安电机厂-西玛电机销售 | 上海办公家具_高端实木办公家具_现代智能办公家具定制厂-上海迈亚家具有限公司 | 天津实验室纯水机-GMP认证制药纯化水设备-天津开发区瑞尔环保科技有限公司 | 印刷公司,北京印刷厂,宣传画册手册印刷厂-和智印彩页设计 | 深圳理津技术有限公司(REHLOGY)-全球工业品供应商:自动化产品|仪器仪表|设备|备品备件|工具|消耗品|非标设备|建筑工程等一站式综合服务! | 四川蜀易控科技有限公司-酒店客房控制系统-智慧酒店智能化客房控制系统生产厂家 | 廊坊微信营销,廊坊小程序开发,廊坊APP开发(安卓_苹果ios开发),微信朋友圈广告,百度推广,廊坊网络公司品牌服务商-河北盛秋网络科技有限公司 | 徐州护栏,铝艺栏杆,铝艺大门,铝艺栏杆门,别墅铝艺大门-徐州桂丰金属科技有限公司 | 久久91精品久久91综合_国产亚洲自拍一区_国产精品第1页_亚洲高清视频一区_91成人午夜在线精品_亚洲国产精品网站在线播放_亚洲国产成人久久综合区_国产精品亚洲专区在线观看_免费视频精品一区二区三区 | 鲜淘网 - 精选全球水果蔬菜肉食海产生鲜,酒水食品零食加盟供求信息 | 金亨木业建筑模板_清水模板_覆膜板_金亨木业建筑模板厂家批发 | 重庆宏工_隧道取芯钻机_公路护栏钻机-车载式钻机_打钻一体机_护栏抢修车_隧道钻机-工程机械 | 机器人码垛机-纸箱套袋机-水平缠绕机-贴标机-开箱机-装盒机-杭州贝立智能设备有限公司 | 现代卓越官网-专注于pmp培训证书-pmp考试报名时间-pmp认证-项目管理pmp-ACP敏捷管理-NPDP认证 | 济宁山银煤矿机械有限公司,钻采工具,防爆电器,凿岩机械,风动工具,矿山机械,建筑机械,支护设备,通风防尘,铁路设备,仪器仪表,大型设备,矿用泵,钎具类,消防类,矿车类,配件区类 | 太原万通汽车学校[官网]-太原好的汽修培训学校,学新能源汽车技术,学汽修,学汽车检测与维修技术 | 阴_阳离子聚丙烯酰胺价格_聚合氯化铝厂家_聚合硫酸铁-巩义市亿洋水处理材料有限公司 | 石英砂|无烟煤滤料|火山岩|聚合硫酸铁|活性炭-河南碧水清源水处理材料有限公司 | 领先的木工机械生产厂家,原木加工流水线,立式带锯机,数控木工跑车-邢台亚士达机械制造有限公司 | 泰安铭德机械有限公司,有机肥设备,山东有机肥设备厂家,铭德机械 泰安华特玻璃钢有限公司|泰安玻璃钢|泰安华特玻璃钢 | 社会百态,七仙女思春完整版免费高清电影引发的思考 | 石膏砂浆生产线_特种砂浆生产线_轻质抹灰石膏设备-青岛环港重工科技有限公司 | 津成电线电缆价格,天津津成线缆,津成线缆销售电话,天津津成线缆批发电话-天津市津成电线电缆有限公司 | 液体粉末包装机_颗粒粉剂自动包装机-上海巧慈自动化设备有限公司 |