Technical Article
海德汉 TNC 640 判断尺寸区间:上下限都要放行,FN11、FN12 怎么写?
针对海德汉TNC 640 NC34059x-17,用FN11与FN12判断包含上下限的尺寸区间,解释Q参数初始化、边界值与接受分支被拒绝段覆盖的问题。示例不含机床运动。
输入值正好是 19.98 或 20.02,程序却走进“不接受”分支,先别急着改测头补偿。要检查的是判断规则:你想接受的是一个区间,还是只接受某一个精确比较值?本文把要求定成 19.98 ≤ Q1 ≤ 20.02,先用两次比较排除区间外的值,剩下的才放行。
以下对应 HEIDENHAIN TNC 640、NC 软件 34059x-17,依据 2022 年 10 月版 Klartext 编程手册。示例使用毫米单位,Q1 是已准备好的数值,不包含探测循环或测量结果读取;Q2、Q3 是同单位下限和上限。移入现有程序前,须确认 Q1~Q4 与 LBL 90、LBL 99 没有被其他逻辑占用。
先把“合格”翻成两个超限条件
FN 12 的 LT 是“小于”;FN 11 的 GT 是“大于”。因此,Q1 小于下限时拒绝,Q1 大于上限时也拒绝。恰好等于任一端点时,这两个超限条件都不成立,控制器继续执行下一程序段,进入接受分支。
这里不需要先减出偏差再判断正负。直接比较同单位的上下限,读代码的人更容易核对要求。FN 9 的 EQU 是相等比较,不会替你表达“允许落在一个区间内”;本文也不假定控制器的相等比较存在某个未经证实的内部公差。

一段只输出判定标志的完整示例
这段程序没有轴移动、主轴或探测动作,只把结果写入 Q4:1 表示进入接受分支,0 表示输入超限或上下限顺序错误。Q4 不是报警、停机命令,也不是机床安全互锁。示例从第 1 段初始化 Q1~Q3;如果改成由其他程序提供输入,必须先保证这三个参数已经定义且有效,不能直接删掉初始化就认为数据已经准备好。
0 BEGIN PGM RANGECHK MM
1 Q1 = 20
2 Q2 = 19.98
3 Q3 = 20.02
4 FN 11: IF +Q2 GT +Q3 GOTO LBL 90
5 FN 12: IF +Q1 LT +Q2 GOTO LBL 90
6 FN 11: IF +Q1 GT +Q3 GOTO LBL 90
7 Q4 = 1
8 FN 9: IF +1 EQU +1 GOTO LBL 99
9 LBL 90
10 Q4 = 0
11 LBL 99
12 END PGM RANGECHK MM
第 4 段先防止下限比上限还大。第 5、6 段只处理两侧超限。两次判断均不成立时,第 7 段写入 Q4=1;第 8 段用恒真条件跳到 LBL 99,绕开 LBL 90 的拒绝赋值。
最容易漏掉的就是第 8 段。如果只写 Q4=1,后面紧接 LBL 90 和 Q4=0,正常执行仍会顺序落入拒绝段,最后看到的总是 0。标签本身不会挡住顺序执行;GOTO 也不是 CALL LBL,不要给这个分支结构附加“遇到 LBL 0 自动返回”的想象。

用五个值查清边界,而不是只看 20.00
保留 Q2=19.98、Q3=20.02,按程序关系逐一推演:19.97 在第 5 段跳转,Q4=0;19.98、20.00、20.02 都不满足两侧超限条件,Q4=1;20.03 在第 6 段跳转,Q4=0。再交换上下限,让 Q2=20.02、Q3=19.98,第 4 段应直接进入拒绝分支。这里是逻辑推演,不是已完成机床试运行的记录。
如果工艺要求不接受端点,不能继续沿用这段闭区间逻辑。若输入来自计算或探测,则还要分别核对数值来源、单位、测量不确定度与显示舍入:屏幕显示 20.02,并不能单凭显示位数证明用于比较的内部数值恰好等于上限。不要为了让结果“好看”而临时扩大窗口;边界应由明确的工艺判定规则决定。
把它接入加工程序时,先确定谁消费 Q4
后续程序要读取 Q4 再决定下一步动作。单独算出 0 不会自动阻止加工继续执行。应先在相应版本控制器的测试环境中检查各分支,再核对调用方是否真的根据结果改变流程;尤其要避免后续循环或子程序覆盖了 Q1~Q4,导致你看到的结果与本次输入无关。
若问题是角度值的象限而不是尺寸范围,可参看TNC 640 的 FN 13 角度与象限。两者都使用 Q 参数,但区间判断不能修正输入数据本身的方向或符号错误。
依据
HEIDENHAIN《TNC 640 Klartext Programming User's Manual》,NC 34059x-17,10/2022,第 291~293 页:条件成立跳转、不成立顺序继续;FN9/EQU、FN11/GT、FN12/LT;恒真条件实现无条件跳转。官方手册 PDF。本文示例及示意图为 CNCX 原创整理。