搜索文章与案例

Technical Article

海德汉 FN5 开平方遇到负数:圆上点计算别用ABS掩盖越界

用R50圆与x=30、x=51两组数值解释海德汉TNC 640 FN5的开平方输入边界,拆开中间量,说明为何取绝对值会把越界点变成错误坐标。

用半径50 mm的圆计算轮廓点,横坐标改成51 mm后,FN5开平方就无法继续。先把被开方数算出来:50²−51²=−101。这个负数说明当前横坐标已经越过圆的最右端;给它套ABS取绝对值,会得到一个数,却得不到原来圆上的点。

本文按海德汉TNC 640、NC软件34059x-18、2023年10月版Klartext手册讨论FN5。模型是XY平面内圆心在局部原点、半径R为正的圆,只分析参数运算,不含刀具补偿、圆心平移或轴运动段。若坐标来自工件坐标系,须先减去圆心坐标,再代入这里的x、y。

先拆成三个量,不要一口气算到坐标

圆方程为x²+y²=R²,因而y²=R²−x²。把D=R²−x²单独保留下来,D决定是否有实数解,SQRT只负责后面的开平方。R=50、x=30时,D=1600,平方根为40;圆上对应的是y=+40和y=−40两个位置,所在半圆要由轮廓方向决定,不能只靠平方根自动选边。

R50圆上x30对应正负40,x51的竖线不与圆相交
图1:x=51位于圆的最右端之外,找不到满足原圆方程的y。

把FN5前的输入留下来,定位就清楚了

下面是纯计算片段。Q1600–Q1605在本例中分别存半径、横坐标、半径平方、横坐标平方、差值D和平方根。手册将Q1400–Q1999列为用户参数;集成进已有程序前仍应确认这几个编号没有被当前程序占用。片段只覆盖已知合法的R50、x30,不是包含所有输入检查的加工程序。

FN 0: Q1600 = +50
FN 0: Q1601 = +30
FN 3: Q1602 = +Q1600 * +Q1600
FN 3: Q1603 = +Q1601 * +Q1601
FN 2: Q1604 = +Q1602 - +Q1603
FN 5: Q1605 = SQRT +Q1604

依次得到2500、900、1600、40。若x来自外部变量,输入校验应放在FN5之前:R必须为正,且−R≤x≤R;越界时进入本程序既有的错误处理分支,不执行开平方和后续坐标运动。这样可以区分半径输错、坐标未减圆心、单位混用和真正的几何越界,而不是只看到最后一行失败。

为什么ABS不是修复

x=51时,D=−101。改成sqrt(abs(D))会得到约10.0498756,但回代圆方程,51²+10.0498756²=2702,不是2500。这个点离圆心约51.9808 mm,已经落在另一个半径上。把“可以计算”当作“坐标正确”,会把一个显性的输入错误变成隐性的轮廓错误。

对负101取绝对值再开平方得到约10.0499,却使圆方程左边变为2702
图2:回代原方程能发现被绝对值掩盖的错误,不能只检查FN5是否给出结果。

靠近圆端点时,先区分计算误差与输入越界

x=50时D=0,y=0;x=−50同样如此。若上游运算使D成为很小的负数,不能统一改成0,也不能统一取绝对值。先保留原始R、x和D,核对上游舍入规则、单位与坐标来源,再按该轮廓允许的几何误差制定边界处理。本文的−101来自明确越界,不属于舍入尾数。

需要写允许上下限的判断,可接着看FN11、FN12怎样包含区间端点;由圆上点再算角度时,要另外处理FN13角度象限与符号。输入范围、平方根大小和轮廓所在半圆是三个不同问题,不要让一条算式代替三个判断。

技术依据

HEIDENHAIN TNC 640 Klartext Programming,NC 34059x-18,10/2023:纸页283列出FN0、FN2、FN3、FN5语义及负数不能开平方的限制;参数用途见Q参数章节。上文坐标与误差数字为解析计算,未声称机床试切或实机验证。