Technical Article
海德汉算孔位角,Y/X都等于-0.5,为什么方向差180°?
按海德汉TNC 640 NC34059x-17解释FN 13 ANG的操作数顺序,用两个斜率同为-0.5的向量推导153.434949°与333.434949°,说明参考点相减、QL参数和方向角与旋转轴指令的边界。
算孔位方向时,两个位移分别是 X=-20、Y=+10 和 X=+20、Y=-10。把 Y 除以 X,结果都为 -0.5;可一个点在左上,一个在右下,方向明明差了180°。如果宏程序只把这个商交给反正切函数,原来的象限信息已经丢了,事后再调整正负号很容易改错另一组孔。
这里按海德汉 TNC 640、NC 软件 34059x-17 的 Klartext 编程手册分析 FN 13 ANG。算例限定在同一未旋转的 XY 坐标系中,从 +X 向 +Y 逆时针计角,输入是参考点到目标点的两个位移分量,不是机床 A、B、C 轴指令。
先看两个向量,不要先做除法
对于左上方的向量 (-20,+10),锐角参考值为 arctan(10/20),约26.565051°。它位于第二象限,因此从 +X 逆时针量到它,角度是180°减去这个参考值,得到153.434949°。右下方 (+20,-10) 位于第四象限,角度则是360°减去参考值,得到333.434949°。
这两组数不是机床运行记录,而是可重复核算的几何例子。商 -0.5 只能保留斜率,不能独自区分两个相反方向。问题不在小数保留几位,而在相除之前有没有把两个分量的符号留下来。

FN 13 的顺序是对边在前、邻边在后
手册第289页给出的 FN 13 是用两个量计算角度,操作数依次为对边和邻边,或对应的正弦与余弦。在本文的 XY 定义下,应先传 Y 位移,再传 X 位移。不要看到习惯写法“X、Y”,就把 ANG 两边也按这个顺序填写。
下面只演示参数赋值与角度计算,不包含任何轴移动、刀具调用或主轴动作。使用独立的学习程序,并先确认该程序的 QL1、QL2、QL3 未被别的逻辑占用。QL 是程序局部参数,不能据此认为在同一个程序内可以随意覆盖。
FN 0: QL1 = -20 FN 0: QL2 = +10 FN 13: QL3 = +QL2 ANG +QL1
QL1 保存 X 位移,QL2 保存 Y 位移,QL3 接收方向角。这里的 +QL1 是读取 QL1 的当前值,QL1 为 -20 时并不会因此变成正20,也不是取绝对值。本例 QL3 的计算期望值约为153.434949°。
再把前两行分别改为 QL1=+20、QL2=-10,保持 FN 13 的操作数顺序不变,期望值应转到约333.434949°。用这一对相反向量检查逻辑,比只试第一象限的一组正数更容易发现符号丢失。
参考点不在零点时,先相减
假设参考点 P0=(30,20),目标孔 P1=(10,30),单位都是毫米。要算的是 P0 指向 P1 的方向,所以 X 位移为10-30=-20,Y 位移为30-20=+10。直接把孔的绝对坐标 (10,30) 送入计算,得到的将是坐标原点指向该孔的方向,问题已经换了。

图中的参考点和目标点必须处于同一个坐标系。若一组数据来自零件坐标,另一组来自机床坐标或倾斜平面,先统一坐标定义,再做减法。FN 13 不会替你识别这些数据属于哪个坐标系。
把检查停在角度计算层,不直接接旋转轴
检查顺序可以很短:先确认参考点,再核 X、Y 位移正负,最后确认 ANG 前后顺序。两分量同时为0时没有几何方向,应在调用前排除;本文也不以单分量为0的轴线情况推定控制器的边界返回值。手册对 FN 13 写出的范围是 0<角度<360°,这里没有把它擅自改写成某种包含端点的区间。
如果打算把计算值用于极坐标孔位,后续还要检查实际运动指令。若用于四轴或五轴定向,还需要机床运动学、旋转轴正方向和可达解,不能直接把153.434949填进某根旋转轴就当作正确姿态。本文完成的是平面方向角计算,不是机床姿态求解。
参数被子程序改写时,可继续看CALL LBL 与 CALL PGM 的 QL 参数作用域;角度算对但运动路线不对时,再看LP 与 CP 的极坐标路径区别。咨询这类后处理问题时,带上系统软件号、两点坐标定义及相关计算段,比只给一个“角度错了”的结果更方便定位。
核对依据:HEIDENHAIN TNC 640 Klartext Programming,NC 34059x-17,10/2022,第279至282页参数范围与使用注意、第289页 FN 13、第296至298页公式输入。图中坐标、角度推导和示意图为本文原创。