在航空航天等领域,工程师常常需要使用非标准的 S-N 曲线公式进行疲劳评估。这些公式可能来自企业内部积累的专有方法,也可能来自以不同方式参数化的手册数据。DesignLife 提供了通过 Python 脚本定义自定义 S-N 方法的能力,使用户能够在保留 DesignLife 其他功能的同时,使用自己的材料数据和 S-N 公式。
在本节中,我们将使用 Python 定义一个包含平均应力修正的非标准 S-N 曲线公式,并将其应用于飞机起落架部件的疲劳分析。
文件位于 \demo\designlife\11_CustomSNPython\ 目录下,包括 AeroSN.npd、AeroSN.py、CustomSNMethods.sys、LandingGear.flo、lower.op2 等。
注意
运行本示例需在 DesignLife 所在计算机上安装 Python。不建议从 PDF 文档中复 制粘贴代码,因为 PDF 格式可能改变缩进和换行或引入隐藏的无效字符。
DesignLife 标准安装提供七种定义 S-N 材料数据的方式:Standard(线性段参数)、MultiMeanCurve(不同平均应力下的数字化 S-N 曲线)、MultiRRatioCurve(不同载荷比下的数字化 S-N 曲线)、Haigh(数字化等寿命曲线)、Bastenaire(Bastenaire 公式参数)、MultiTemperatureCurve(不同温度下的数字化 S-N 曲线)和 Custom(用户自定义 S-N 方法)。
此外还有多种平均应力修正方法:None、Goodman、GoodmanTensionOnly、Gerber、GerberTensionOnly、Interpolate 和 FKM。自定义 S-N 方法在底层库级别实现,由于 DesignLife 和 GlyphWorks 共享这些库,新定义的自定义方法在两个产品中均可用。
自定义 S-N 方法的实现分为两大步骤:修改材料数据库(创建 xdef 和 npd 文件、添加数据库条目)和添加新的自定义方法(创建 CustomSNMethods.sys 配置文件和 Python 脚本)。
S-N 曲线方程为:S = S_inf + A * (N + B)^C,其中 S_inf、A、B 和 C 为材料参数。需要创建 xdef 文件定义材料数据格式,放在 mats 文件夹中。文件名需以 mxd_ncode_ 为前缀,第二行的 id 定义方法名称。
<object name="Custom Aero SN data set" id="Aero_SN" version="1">
<property name="UTS" label="Ultimate Tensile Strength" type="1">
<real min="100" max="4000" default_value="500.0" default_unit="MPA"/>
</property>
<property name="A" label="Exponent A" type="1"><real min="0.01" max="1.0"/></property>
<property name="B" label="Coefficient B" type="1"><real min="0" max="1e10"/></property>
<property name="C" label="Coefficient C" type="1"><real min="0.01" max="1e10"/></property>
<property name="S_inf" label="Fatigue limit" type="1">
<real min="10" max="4000" default_unit="MPA"/>
</property>
npd 文件定义绘图属性,名称需与 xdef 中的 id 匹配。省略此步骤仍可进行计算,但无法在 MaterialsManager 中查看 S-N 曲线图。
步骤1 启动 MaterialsManager,创建新的 MXD 数据库 Aero_Example。新材料定义将自动包含在数据库中。
步骤2 右键点击数据库选择 Add Data,将 Dataset Type 设为新创建的数据类型,创建名为 High_Strength_Steel 的材料。
步骤3 输入材料属性,点击 OK。在 Graph 选项卡中查看 S-N 曲线。
此 XML 格式文件定义方法的属性和指向 Python 代码的引用。每个 Method name 必须与 xdef 文件中的材料数据类型 id 对应。本例定义了四个属性:LifeFactor(寿命因子)、ReserveFactor(疲劳储备因子)、AeroMeanStressMethod(平均应力修正方法枚举:GoodmanTensionOnly/GerberTensionOnly/Intermediate/None)和 MSExponent(中间方法指数)。
Python 脚本文件(.py)可放在本地工作文件夹或 scripts 子文件夹中。代码中需要实现三个关键函数:Initialise(object) — 处理新数据时调用;Reset(object) — 处理新数据前调用但不重置材料或方法属性;CalcCycleDamage(object) — 每个循环调用一次。SNMethodState 对象是核心,存储所有计算所需的信息和结果。
步骤1 打开 LandingGear.flo,将 FE 模型 lower.op2 拖到 FE Input glyph 上,运行流程。最短寿命为 4979 repeats(节点 101837)。
步骤2 在 SN Analysis glyph 上选择 Advanced Edit,展开 Analysis Runs 树,可以看到 SNEngine 属性中 SNMethod = Custom,CustomSNMethod = Aero_SN。底部 Additional 类别下有四个 Python 定义的属性。
本分析使用"aero spectrum"加载定义,这是航空航天中常用的特殊 duty cycle 类型。Load Case 文件(loadcases.lcs)定义了编号加载状态,每个工况使用比例因子组合 FE 模型中的应力。Spectrum 文件(spectrum.spe)定义这些载荷如何排序形成"航班"。
步骤3 (GlyphWorks 用户可选)在新流程中拖放 stress_history.s3t 创建 Time Series Input glyph,连接 Stress Life glyph。设置 CalculationMethod = Custom,CustomSNMethod = Aero_SN,MaterialDatabaseName = Aero_Example.mxd,MaterialName = High_Strength_Steel,ReserveFactor = 1,LifeFactor = 1。运行后 Metadata Display 显示 Life = 4979 Repeats,与 DesignLife 结果一致。
✅ 掌握了通过 Python 定义自定义 S-N 方法的完整流程
✅ 学会了创建 xdef/npd 材料格式文件和 CustomSNMethods.sys 配置文件
✅ 了解了 Python 脚本与 DesignLife 的交互机制