1. 镁合金材料基础参数查询与选择

镁合金材料基础参数查询与选择 学习卡片

任务说明

本案例面向镁合金轻量化设计中的选材环节,需要完成三项工作:建立常用镁合金牌号的材料参数数据库;实现按牌号查询密度、弹性模量、屈服强度等关键参数的功能;根据轻量化设计需求(比刚度、比强度优先)给出推荐牌号。最终交付一个可直接运行的Python脚本,输入牌号或设计约束,输出对应参数与选材建议。

材料数据库设计

选取变形镁合金AZ31、AZ91(实际多为铸造,但数据表中常并列)以及稀土镁合金WE43作为代表牌号,覆盖常用范围。数据库以字典嵌套结构存储,字段包括密度ρ(g/cm³)、弹性模量E(GPa)、屈服强度σ0.2(MPa)、抗拉强度σb(MPa)、延伸率δ(%)。比刚度与比强度由程序自动计算,不手工录入,避免数据冗余。

镁合金数据库 AZ31 变形镁合金 AZ91 铸造镁合金 WE43 稀土镁合金 每条记录包含 ρ 密度 (g/cm³) E 弹性模量 (GPa) σ₀.₂ 屈服强度 (MPa) σ_b 抗拉强度 (MPa) δ 延伸率 (%) → 自动计算比刚度 E/ρ → 自动计算比强度 σ₀.₂/ρ

代码实现

# magnesium_db.py
# 镁合金材料参数查询与轻量化选材推荐

# 1. 建立材料数据库(密度g/cm³,弹性模量GPa,强度MPa,延伸率%)
MAG_DB = {
    "AZ31": {"rho": 1.77, "E": 45, "sigma_02": 200, "sigma_b": 260, "delta": 15},
    "AZ91": {"rho": 1.81, "E": 45, "sigma_02": 150, "sigma_b": 240, "delta": 3},
    "WE43": {"rho": 1.84, "E": 44, "sigma_02": 250, "sigma_b": 300, "delta": 7},
}

def query_alloy(grade):
    """按牌号查询参数,返回完整字典"""
    if grade not in MAG_DB:
        raise KeyError(f"牌号 {grade} 不在数据库中,可用牌号: {list(MAG_DB.keys())}")
    return MAG_DB[grade].copy()

def calc_specific_props(grade):
    """计算比刚度 E/ρ 和比强度 σ_02/ρ(单位换算为 kN·m/kg)"""
    p = query_alloy(grade)
    # E: GPa → N/mm² = MPa;ρ: g/cm³ → kg/m³需×1000
    # 比刚度 = E(MPa) / ρ(g/cm³) × 1000 → 单位 kN·m/kg
    specific_stiffness = p["E"] * 1000 / p["rho"]   # MPa/(g/cm³) = kN·m/kg
    specific_strength = p["sigma_02"] * 1000 / p["rho"]  # MPa/(g/cm³) = kN·m/kg
    return specific_stiffness, specific_strength

def recommend_grade(priority="stiffness"):
    """根据轻量化设计优先级推荐牌号
    priority='stiffness' 按比刚度优先;'strength' 按比强度优先"""
    best_grade = None
    best_value = -1
    for grade in MAG_DB:
        stiff, strength = calc_specific_props(grade)
        value = stiff if priority == "stiffness" else strength
        if value > best_value:
            best_value = value
            best_grade = grade
    return best_grade, best_value

# 2. 查询示例
if __name__ == "__main__":
    # 查询AZ31参数
    az31 = query_alloy("AZ31")
    print("AZ31 参数:", az31)

    # 计算三个牌号的比刚度与比强度
    print("\n牌号对比(比刚度/比强度,单位 kN·m/kg):")
    for g in MAG_DB:
        s, t = calc_specific_props(g)
        print(f"{g}: 比刚度={s:.1f}, 比强度={t:.1f}")

    # 按比刚度推荐
    rec, val = recommend_grade("stiffness")
    print(f"\n比刚度优先推荐: {rec} (比刚度={val:.1f} kN·m/kg)")

    # 按比强度推荐
    rec2, val2 = recommend_grade("strength")
    print(f"比强度优先推荐: {rec2} (比强度={val2:.1f} kN·m/kg)")

运行与验证

将上述代码保存为magnesium_db.py,在Python 3.6+环境中直接运行:

python magnesium_db.py

程序会依次输出AZ31参数、三种牌号的比刚度/比强度对比,以及两种优先级下的推荐结果。验证要点:

  • 查询正确性:AZ31输出密度1.77、弹性模量45、屈服强度200,与数据库录入值一致;
  • 计算正确性:AZ31比刚度=45×1000/1.77≈25424 kN·m/kg,比强度=200×1000/1.77≈112994 kN·m/kg,可手工复核;
  • 推荐逻辑:比刚度优先时WE43(44×1000/1.84≈23913)低于AZ31(25424),因此AZ31胜出;比强度优先时WE43(250×1000/1.84≈135870)最高,推荐WE43。

若输入不存在的牌号(如query_alloy("ZK60")),程序抛出KeyError并提示可用牌号,说明异常处理生效。

选材结论

在轻量化设计中,若以刚度为约束(如承受弯曲变形的结构件),AZ31因密度低、比刚度最高而成为首选;若以强度为约束(如承受高应力的承力件),WE43凭借更高的屈服强度获得最佳比强度,适合对承载能力要求严苛的场合。AZ91虽然强度尚可,但延伸率仅3%,塑性较差,通常用于非承力铸造件。实际选材时还需结合成本、耐腐蚀性、工艺性等因素综合权衡,本案例提供的是基于材料本征参数的量化筛选依据。