在整体立铣刀的刃磨工艺中,砂轮轮廓的精确描述是仿真与工艺优化的基础。1A1 型砂轮(平形砂轮)的轴向截面轮廓由两段圆弧和一段直线构成,其几何参数直接决定了加工后容屑槽的形状。表1给出的轮廓表达式基于砂轮自身坐标系 ,以轴向坐标 为横轴、径向坐标 为纵轴,完整定义了轮廓上的关键点与分段函数。本文首先剖析该轮廓的数学结构,然后给出一个通用的 Python 实现,该实现能处理任意圆弧半径(包括零半径退化情形),并通过参数调整展示不同轮廓形态。所有代码均独立可运行,仅依赖 NumPy 和 Matplotlib 两个标准库。
轮廓表达式的几何解释
表1中定义了四个关键点:
其中 为砂轮外半径,为砂轮宽度(轴向长度),和分别为左端和右端的倒圆半径。当时,点 1 与点 2 重合,左端为尖角;同理 时点 3 与点 4 重合。
轮廓分段函数以参数 表示沿轴向的连续变化量:
- • 轮廓 1~2(左端圆弧):
当 时,径向坐标 。该式是圆心位于 、半径为 的圆弧方程,其起点为点 1,终点为点 2。 - • 轮廓 2~3(外圆柱面直线):
当 时,,即半径恒定,轴向从 延伸至 。 - • 轮廓 3~4(右端圆弧):
当 时,,圆心位于 ,半径 ,起点为点 3,终点为点 4。
上述表达式隐含了一个重要约束:,否则两段圆弧将重叠,砂轮结构不成立。在后续的代码实现中,我们假设参数满足该条件。
通用轮廓生成算法
为了稳健地处理 或 为零的情况,我们采用分段采样策略:对每段轮廓,根据其半径是否大于零决定是否生成圆弧点;若半径为零,则相应段退化为一个点,但直线段仍能正确衔接。算法核心步骤如下:
- 2. 若 ,在 上均匀采样,按圆弧公式计算 ,并将这些点追加到轮廓列表;若 ,则不增加额外点(因为点 1 即为点 2)。
- 3. 绘制直线段 2~3:从 到 ,若区间长度大于零则均匀采样, 恒为 ;若区间长度为零,则仅添加一个点(此时点 2 与点 3 重合)。
- 4. 若 ,在 上采样圆弧;若 ,则无需额外点,因为直线段已经到达 。
这样生成的轮廓点集完整且无重复,可用于后续绘图或数值计算。
独立可运行的 Python 代码
以下代码块是一个完整的脚本,它定义了生成轮廓的函数 generate_profile 和绘图函数 plot_profile,并在主程序中根据表 1 提供的实例参数(,,,)进行绘制。用户只需复制整个代码块,保存为 .py 文件并运行,即可在屏幕上看到砂轮轴向截面图。若想观察非零圆角的效果,只需修改主程序中的 gr1 和 gr2 变量值,例如 gr1=5; gr2=3,再次运行即可。

import numpy as np
import matplotlib.pyplot as plt
defgenerate_profile(gR, gb, gr1, gr2, n_pts=200):
"""
生成1A1型砂轮轮廓点(砂轮自身坐标系)
参数:
gR : 外径 (mm)
gb : 宽度 (mm)
gr1 : 左端圆弧半径 (mm)
gr2 : 右端圆弧半径 (mm)
n_pts: 每段插值点数
返回:
z, x : 轴向和径向坐标数组
"""
z_vals = []
x_vals = []
# 点1 (同时也是起点)
z_vals.append(0.0)
x_vals.append(gR - gr1)
# 左端圆弧 (1~2)
if gr1 > 0:
z_arc = np.linspace(0, gr1, n_pts)
x_arc = gR - gr1 + np.sqrt(gr1**2 - (gr1 - z_arc)**2)
z_vals.extend(z_arc)
x_vals.extend(x_arc)
# 若gr1==0,圆弧退化为点1,无需额外点
# 直线段 (2~3)
z_start = gr1
z_end = gb - gr2
if z_end > z_start:
z_line = np.linspace(z_start, z_end, n_pts)
x_line = np.full_like(z_line, gR)
z_vals.extend(z_line)
x_vals.extend(x_line)
elif z_end == z_start:
# 直线长度为0,仅添加一个点
z_vals.append(z_end)
x_vals.append(gR)
# 若z_end < z_start则理论上不会发生,但可做保护:忽略
# 右端圆弧 (3~4)
if gr2 > 0:
z_arc2 = np.linspace(gb - gr2, gb, n_pts)
x_arc2 = gR - gr2 + np.sqrt(gr2**2 - (z_arc2 - (gb - gr2))**2)
z_vals.extend(z_arc2)
x_vals.extend(x_arc2)
# 若gr2==0,圆弧退化为点4,但直线已到gb,无需额外点
# 确保最后一点为点4 (gb, gR-gr2)
iflen(z_vals) == 0or z_vals[-1] != gb:
z_vals.append(gb)
x_vals.append(gR - gr2)
return np.array(z_vals), np.array(x_vals)
defplot_profile(gR, gb, gr1, gr2, n_pts=200):
"""绘制轮廓并标注关键点"""
z, x = generate_profile(gR, gb, gr1, gr2, n_pts)
plt.figure(figsize=(8, 6))
plt.plot(z, x, 'b-', linewidth=2, label='砂轮轮廓')
# 关键点(可能重合)
plt.plot(z[0], x[0], 'ro', label='点1 / 点2'if gr1==0else'点1')
plt.plot(z[-1], x[-1], 'go', label='点3 / 点4'if gr2==0else'点4')
plt.xlabel('轴向位置 z (mm)')
plt.ylabel('径向位置 x (mm)')
plt.title(f'1A1型砂轮轮廓 (gR={gR}, gb={gb}, gr1={gr1}, gr2={gr2})')
plt.grid(True)
plt.axis('equal')
plt.legend()
plt.tight_layout()
plt.show()
if __name__ == "__main__":
# 表3-5中的实例参数(仅使用结构参数,位姿参数不影响轮廓形状)
gR = 75.0# mm
gb = 20.0# mm
gr1 = 0.0# mm
gr2 = 0.0# mm
# 绘制当前参数下的轮廓
plot_profile(gR, gb, gr1, gr2)
# 如需观察非零圆角,可取消下面注释并运行:
# plot_profile(75, 20, 5, 3) # gr1=5, gr2=3
该脚本完全自包含,导入标准库后即可运行。主程序中默认使用 ,得到的轮廓是一个矩形(从 到 的竖直线,因为左右端面无倒角)。若想探索圆弧倒角的影响,只需调用 plot_profile 时传入非零半径值,例如 plot_profile(75, 20, 5, 3),此时左端圆弧半径 5 mm,右端圆弧半径 3 mm,轮廓将呈现出光滑的圆角过渡。
轮廓参数对形状的影响
从几何表达式中可以看出, 和 控制着砂轮端部的圆角大小。当两者均为零时,砂轮侧面与端面垂直相交,形成尖角;随着半径增大,端部逐渐变得圆润,同时直线段的长度相应缩短(因为 减小)。这种变化直接影响到磨削时砂轮与刀具的接触区域,进而改变容屑槽的曲率分布。在工艺设计中,常通过调整这两个圆角半径来优化排屑性能或避免应力集中。上述代码允许用户直观地观察这些变化,为参数选择提供视觉参考。

总结
本文基于表 1的数学表达式,实现了 1A1 型砂轮轮廓的通用生成算法,并提供了完整的 Python 可视化代码。该代码克服了圆弧半径为零时的退化问题,能够准确描绘任意有效参数下的轮廓形状。通过修改主程序中的结构参数,用户可以快速评估不同砂轮设计对轮廓的影响,从而辅助刃磨工艺的数值仿真与优化。代码的模块化设计也便于将其集成到更复杂的刀具建模系统中,具有实用价值。