首页/文章/ 详情

【SimLab自动化】3分钟如何快速创建148个载荷?

8月前浏览4775

本文摘要(由AI生成):

这篇文章主要介绍了如何使用 Python 的tkinter库和pandas库,根据csv格式的载荷数据,自动快速创建载荷以及分析步,进行差速器壳体强度分析。文章提供了两个版本的代码,初级版和高级版,并对每个版本的代码进行了详细的解释和使用说明。同时,文章还介绍了SimLab 二次开发的基本思路和接口,以及如何确认 SimLab 支持的 Python 库。


   

上一期介绍了使用 Python 的 tkinter 库来自由定制复杂界面,可以根据实际需求创建任意类型的界面。本期我们以差速器壳体强度分析为例,介绍如何根据 csv 格式的载荷数据,使用脚本自动快速创建载荷以及分析步。


注意:本文所有代码都基于 Altair SimLab™ 2020.1 经典界面。


1. 分析工况介绍


差速器强度分析时要考虑螺栓预紧力,另外针对不同档位有 37 个工况,每个工况中有 4 个载荷加载点,加载点上受力和转矩。


 

图1 差速器壳体模型


载荷数据来自实验或者前期的多体动力学分析,保存为 csv 格式,可使用 Python 中的 pandas.read_csv 工具读取数据。csv 文件中每一行表示一个工况,每个工况都有 4 个载荷加载点,每个加载点都受 3 个方向的集中力和 3 个方向的转矩。


 

图2 载荷表(点击图片可查看高清大图)


2. 代码最终效果


根据不同的需求,在文末下载链接中提供两个版本的代码:初级版和高级版。


初级版可以认为是代码初稿,逻辑结构简单,但刚好能实现所需功能。代码将所有载荷步放到一个 Solution 中,且载荷和分析步都是自动编号,工况识别不方便。

 

图3 初级版效果


高级版在初级版上经过一定的优化,考虑了更多可能存在的问题,结构逻辑相对更复杂,代码可将分析步名称自动设置为 csv 文件中对应的分析步名称,以便识别工况,并且自动根据工况分组创建 6 个 Solution。

 

图4 高级版效果


3.  代码使用方法


两个版本的代码都有 4 个修改点,使用代码前需先修改,然后将代码复 制到 SimLab 中的 Python 窗口,按回车即可运行。


注意,修改代码时请使用英文输入法,否则可能会报错。


修改点1

指定载荷数据 csv 文件绝对路径。Windows 系统默认是左斜杠,因此复 制路径后需使用转义字符 r 进行转义。


初级版:

loadcase_file=pd.read_csv(r'D:\technical document\SimLab\Automation\wechat_article\CH4_fastloadcase\force_moment_data.csv',encoding='gb18030')


高级版:

filepath = r'D:\technical document\SimLab\Automation\wechat_article\CH4_fastloadcase\force_moment_data.csv'



修改点2


指定载荷加载点节点编号,可指定任意多个加载点,若增加加载点,csv 文件中需指定相应的载荷数据列,每个加载点对应 6 列数据。


初级版:

nodeid = ['535410', '535409', '535406', '535405']


高级版:

nodeid = [535410,535409,535406,535405]


修改点3

指定载荷步数量,当前共 37 个工况,若增加工况数量,需增加 csv 文件行数,每个工况一行数据。


初级版:

loadcase_count = 37


高级版:

LoadcaseCount = 37


修改点4

设置预紧力大小,当前预紧力为1000N


初级版:

pretension('1000',32)


高级版:

pretension_force = 1000


初级版和高级版两个版本的代码都不到 300 行,4 个修改点在代码末尾有明确的注释。


注意:Python 中以 # 开头的行为注释行,# 后面的内容都是注释。


 

图5 初级版修改点


 

图6 高级版修改点


4. 代码撰写思路


SimLab 中做二次开发的基本思路为:


1)将需要实现的功能在 SimLab 界面中手动操作一遍,录制为宏代码;


2)修改宏代码,增强代码通用性。相当于 SimLab 提供了砖头,只需用 Python 语言将砖头按一定的结构叠在一起即可。


差速器强度分析需要用到创建 Solution、创建 loadcase、创建集中力和转矩、施加预紧力、关联预紧力工况等操作,撰写代码前需通过 Scripting - Record 工具录制好相应的宏代码。


录制好宏代码后,建议将每个功能对应的宏代码转换为函数,并对可能改变的对象进行替换,以备调用。


写代码时,建议开始位置导入需要使用的库,中间位置定义各种工具函数,末尾定义主函数调用前面定义的工具函数,即函数式编程,这种结构容易保证代码的逻辑清晰,可读性强。


下面是初级版代码中定义力/转矩的函数,调用函数时需指定节点编号数组 nodeid,节点载荷数组 force,以及载荷步编号 forceid 三个变量。


 

图7 载荷创建函数


SimLab 宏代码中所有对象都是字符串,其修改方法为 ’’’+variable+’’’,如载荷创建函数图中指定 Model 名称对应的代码,将模型名称由:

A_transmissional_housing_v31_SM.gda 

修改为

'''+simlab.getModelName("FEM")+'''


simlab.getModelName(“FEM/CAD”) 为 SimLab 中获取模型名称的接口,若括号中为 “FEM” 则表示获取网格模型名称,若括号中为 “CAD” 则表示获取几何模型名称:

<Model>'''+simlab.getModelName("FEM")+'''</Model>


定义集中力对应的代码中,将X方向的载荷大小由具体数值修改为 '''+str(force[6*num+0])+''',读取 force 数组中的对象,并通过 str() 函数将其转换为字符串:


<Force-Fx Value="'''+str(force[6*num+0])+'''"/>


5. SimLab二次开发接口


SimLab 2020.1中提供了五十多个接口,涉及到 Group、Entity、Parameters 以及后处理等方面,打开 SimLab 后按 F1 键可打开帮助文档,其中有详细介绍,每个接口都有示例代码(Sample Script)与使用说明。


 

图8 SimLab接口


本文对应的代码中主要使用了三个接口:


 1、获取模型名称


SimLab 中很多操作都和模型名称相关,可用该接口自动获取模型名称,从而提高模型通用性。

simlab.getModelName("FEM")


▇ 2、根据前后缀识别Body


该接口可用于识别螺栓体,SimLab 自动创建的螺栓名称都以 “Body” 开头,通过下面的代码可将所有螺栓 Body 名称保存到变量 BodyNameList 中。

modelname = simlab.getModelName("FEM")

substringlist = ['Bolt*']

BodyNameList = simlab.getBodiesWithSubString(modelname, substringlist)


 3、得到整个模型最大节点编号之后的下一个节点编号


比如整个模型最大节点编号为 999,则下面代码得到的编号为 1000。该接口是 SimLab 2020.1 新功能,之前的版本中不支持该接口,在需要创建节点时使用该接口,可确保赋予的节点编号没有被占用。


simlab.getNextNodeID(modelname)


6.SimLab Python库支持


Python 有大量的标准库,另外还有丰富的第三方库。SimLab 已经支持了 Python 中大部分常用库,如本文代码中涉及到的 os、sys、numpy 以及 pandas 库。撰写代码之前如何确认想用的 Python 库是否已经被 SimLab 支持了呢?


有两种办法可以进行确认:


▇ 方法一:使用 import 方法直接导入库,若导入后不报错,即表示已经支持。

 


▇ 方法二:使用 help(“modules”) 查询,可输出 SimLab 支持的所有库,目前支持约 200 个库。

 



来源:Altair澳汰尔
SimLab二次开发通用pythonUM多体动力学FAST螺栓Altair
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-03-24
最近编辑:8月前
Altair澳汰尔
澳汰尔工程软件(上海)有限公司
获赞 142粉丝 477文章 746课程 4
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈