圆瓶轴向轮廓怎样比较:有符号几何间隙与插值区间 壹星YIXING技术笔记东莞市壹星自动化设备有限公司瓶身轴向轮廓不同位置的读数不一致时可以先计算它与一个给定参考轮廓的几何间隙查看差异出现在哪里。本文以圆瓶滚贴区域为背景构造五个离散点的教学示例只分析两条未变形轮廓的相对位置。它不由几何量推算胶辊压力、气泡风险或材料压溃限值也不代表壹星某机型的接触测量结果。定义有符号间隙轴向位置记为 (z)轮廓高度记为 (y(z))单位都是毫米。所有高度必须来自同一基准与方向。给定参考直线 (h(z)abz)其中截距 (a) 的单位为毫米斜率 (b) 无量纲。定义几何间隙 (g(z)h(z)-y(z))。正值表示参考线位于轮廓上方零表示在这个截面模型中相交负值表示两个未变形几何轮廓发生重叠。负值不是实际压陷深度如果真实对象发生接触位置、变形和载荷需要另一个模型求解。不能把负间隙的绝对值乘一个未经验证的刚度就当成测得压力。本例轴向位置依次为零、二十五、五十、七十五和一百轮廓高度依次为零、零点二、零点四、零点二和零。参考线截距为零点一五、斜率为零点零零一。这些数字完全人为构造既不是瓶型规格也不是设备设定值。对采样间区间作明确假设在相邻采样点之间采用线性插值间隙也随位置线性变化。如果一端为正、一端为负零点位置由\[z_*z_0(z_1-z_0)\frac{-g_0}{g_1-g_0}\]求得。两个端点都为负时该段在插值模型中全部为负都为非负时该段没有负间隙。真实轮廓在点间可能有凸起所以“两个端点为正”不能脱离插值假设推广成整段真实轮廓都分离。完整的离线区间计算原始数字用十进制字符串录入再转换为有理数避免零点判断受二进制小数舍入影响。Fraction对字符串的转换规则见 Python fractions文档。显示时才转成小数判断和断言使用精确分数。from fractions import Fraction as F RAW [(0, 0.00), (25, 0.20), (50, 0.40), (75, 0.20), (100, 0.00)] def profile(rows): if len(rows) 2: raise ValueError(TOO_FEW_POINTS) points [(F(z), F(y)) for z, y in rows] if any(points[i][0] points[i 1][0] for i in range(len(points) - 1)): raise ValueError(POSITION_ORDER) return points def gaps(points, intercept, slope): return [(z, intercept slope * z - height) for z, height in points] def negative_bands(samples): known dict(samples) bands [] for (z0, g0), (z1, g1) in zip(samples, samples[1:]): if g0 0 and g1 0: continue if g0 0 and g1 0: left, right z0, z1 else: zero z0 (z1 - z0) * (-g0) / (g1 - g0) left, right (z0, zero) if g0 0 else (zero, z1) if bands and bands[-1][1] left and known.get(left, F(0)) 0: bands[-1] (bands[-1][0], right) else: bands.append((left, right)) return bands points profile(RAW) samples gaps(points, F(0.15), F(0.001)) assert [value for _, value in samples] [F(0.15), F(-0.025), F(-0.2), F(0.025), F(0.25)] for z, value in samples: print(fz{float(z):.0f} gap_mm{float(value):.3f}) bands negative_bands(samples) assert bands [(F(150, 7), F(650, 9))] span sum(right - left for left, right in bands) assert span F(3200, 63) print(fnegative_band_mm({float(bands[0][0]):.3f},{float(bands[0][1]):.3f})) print(fprojected_length_mm{float(span):.3f}) translated [(z, height 2) for z, height in points] assert gaps(translated, F(2.15), F(0.001)) samples shifted negative_bands(gaps(points, F(0.25), F(0.001))) assert shifted [(F(250, 7), F(550, 9))] print(fchanged_reference_band_mm({float(shifted[0][0]):.3f},{float(shifted[0][1]):.3f})) assert negative_bands([(F(0), F(-1)), (F(1), F(0)), (F(2), F(-1))]) [(F(0), F(1)), (F(1), F(2))] try: profile([(0, 0), (0, 1)]) except ValueError as exc: assert str(exc) POSITION_ORDER else: raise AssertionError(duplicate position accepted) print(translation_invariantTrue; zero_boundary_checkedTrue)完整输出为z0 gap_mm0.150 z25 gap_mm-0.025 z50 gap_mm-0.200 z75 gap_mm0.025 z100 gap_mm0.250 negative_band_mm(21.429,72.222) projected_length_mm50.794 changed_reference_band_mm(35.714,61.111) translation_invariantTrue; zero_boundary_checkedTrue保留符号与参考线版本负间隙带的两个端点是零点因此本例用开区间表示。输出的五十点七九四毫米是轴向投影长度不是曲线弧长或接触面积。若两个负区间只在一个零点处相接程序保留两段不把严格小于零的集合误写成包含该零点的单一区间。同时抬高轮廓和参考线两毫米间隙完全不变说明它取决于相对位置。只改变参考线截距后负区间发生变化这项计算是敏感性比较不是建议现场增加或减少某个压入行程。参考线来自何处必须随记录保存否则相同读数可能得到不同解释。单条轴向轮廓也不能代表完整圆柱表面。换一个周向方位读数可能不同轴线倾斜、定位偏心和测量方向也可能改变高度记录。应先明确采样位置和基准再决定是否需要增加方位不能将这五个点的极差直接命名为标准圆柱度。真实接触还涉及材料厚度、刚度、变形耦合和加载方式。本文不设置排气临界值也不据输出标记气泡高发区。可交付的结论是在给定参考线和线性插值假设下哪些轴向区间出现正、零或负的几何间隙后续接触与贴附判断需要独立证据。测得的高度也不一定能直接解释为局部半径。如果工件轴线在坐标系中的位置未知轮廓高度中可能同时包含中心位置和表面形状的变化。应保留原始高度定义只有在轴线与方向已明确时再进行半径换算避免在变量命名时提前加入未经验证的几何假设。如果两条轮廓读数各有已知绝对误差界限间隙的误差界限可以保守取二者之和。只有间隙区间全部位于零的一侧时符号判断才在这些输入界限内稳定区间跨零则保留未确定。本文没有输入测量误差精确分数只保证对给定十进制数字的运算不会让合成数字获得测量准确度。绘图时应同时显示采样点与插值线避免连续曲线让读者误以为整段都被密集测过。增加采样点后零点位置和负区间可能变化应保留数据版本与插值规则不能把原来的边界固定成永久特征。