【发那科篇】发那科系统测头与对刀仪编程指南-G31-G37-宏程序体系

基准系统:发那科0i-MODEL F

发那科系统在机内测量领域有两套核心G代码支撑着整个测头/对刀仪的应用体系:G31(跳转功能)G36/G37(刀具自动测定)。前者是工件测头的触发基石,后者是对刀仪的自动测量入口。再往上,雷尼绍的Inspection Plus宏程序包把G31封装成了工程可直接调用的标定与测量循环。

本文把这套体系从头到尾拆一遍。

说明: 本文以发那科0i-MODEL F为基准编写,G31/G36/G37的基本用法同样适用于0i-D、30i/31i-B系列,参数号可能因系统版本略有差异。


G31跳转功能——测头触发的底层逻辑

G31干了什么

G31是发那科系统的跳转功能(Skip Function),属于00组一次性G代码(仅当前程序段有效)。它与G01在运动方式上完全一致——按指定的F速度做直线插补——唯一的区别是:G31在运动过程中持续监测跳转信号(SKIP信号)的输入。一旦SKIP信号从0变为1,系统立即中断当前运动、记录当前位置坐标,并跳转执行下一程序段。

这是测头触发的底层硬件机制。

G31 Z-50. F300        ; Z轴向下移动300mm/min,等待SKIP信号
#100 = #5063          ; 关键:在紧接着的下一行立即读取Z轴触发坐标
G90 G00 Z100.         ; 安全退刀

注意: G31触发后系统会自动将触发时的各轴坐标存入 #5061(X)、#5062(Y)、#5063(Z) 这三个只读宏变量中。必须在G31的下一程序段立即读取并赋值给其他变量。单轴探测时只读取对应轴坐标即可(如上例只读#5063),不要在G31后连续读取多轴——此时X/Y变量可能已被减速停止后的位置坐标刷新,导致微米级精度超差。

SKIP信号的硬件链路

SKIP信号在发那科系统中的硬件路径:

测头触发 → OMI-2/OIM接收器 → PMC输入(X地址) → 系统内部SKIP信号

关键参数:

参数号含义典型设定
#6200#0 (SKIP)跳转信号有效电平1(高电平有效)
#6200#1 (MI)多段跳转信号有效电平0
X地址SKIP信号对应的PMC输入点由梯形图定义,常用X4.7/X6.3

常见误区: 很多人以为测头装上就能用G31。实际上G31只认系统的SKIP信号,而SKIP信号需要两根东西配合:

  1. 接收器(OMI-2等)将测头触发信号转换为电气信号
  2. PMC梯形图将这个电气信号映射到系统SKIP输入端

两者缺一,G31就不会触发,轴会直接走到超程。

G31多段跳转(G31 P)

发那科0i-F及以上系统支持G31多段跳转功能——通过指定P参数,可以在一次G31运动中记录最多3个触发点:

G31 P2 Z-100. F500   ; 记录前2次触发位置

应用场景:刀具半径测量时,铣刀先触碰到对刀仪左壁(第一次触发),继续移动通过刀具中心空隙后触碰右壁(第二次触发)——两次触发位置之差就是刀具直径。

不过雷尼绍Inspection Plus宏程序在内部已经处理了这些逻辑,日常使用中直接调对应的宏程序即可,不需要手写G31多段跳转。


G36/G37刀具自动测定——对刀仪的专用指令

G36与G37的分工

G36和G37是发那科系统的一对刀具自动测定指令,同属00组G代码,功能互为反向:

指令功能测量方向
G36刀具径向自动测定X轴或Y轴方向(测偏置/半径)
G37刀具轴向自动测定Z轴方向(测刀长)

两者的行为与G31类似——在进给运动中监测SKIP信号——但区别在于:

  • G31只记录触发坐标,不做后续处理
  • G36/G37触发后 自动将测量计算结果写入当前刀具的磨损偏置或几何偏置

安全距离保护:参数#5091/#5092

G36和G37本身不提供”安全围栏”功能。防止对刀仪被撞坏的安全距离是通过系统参数设定的:

参数号含义典型设定
#5091刀具自动测定(G36/G37)的最大移动距离(轴向)根据实际刀具范围设定
#5092刀具自动测定时的进给速度300~500 mm/min

如果G36/G37在执行过程中移动距离超过#5091的设定值仍未触发SKIP信号,系统会触发报警并停止运动,从而保护对刀仪不被撞击。

在实际应用中,也有在一些非标准场景下使用G31配合宏程序手写限位保护的做法,但标准的发那科安全方案就是参数#5091控制搜索范围

G37刀具长度测定(轴向/Z向)

G37的工作原理:

  1. 系统读取#5091设定的最大移动距离
  2. G37开始沿Z轴向下移动
  3. 对刀仪被触发 → SKIP信号拉高
  4. 系统记录触发点Z坐标 → 存入只读变量**#5063**(G31触发位置Z)
  5. 系统自动计算 刀长 = 对刀仪参考高度 – Z_trigger
  6. 结果写入当前刀具的H偏置

对刀仪参考高度如何设定: 对刀仪顶面在机床坐标系中的Z坐标,是在首次安装时手工设定到参数No.5063(不是宏变量#5063)中的。操作方式是在系统参数画面中找到5063号参数,手动输入对刀仪顶面的机床坐标Z值。不需要也不允许在程序中用#5063 = …赋值——宏变量#5061~#5068是只读的,无法赋值。

G37完整示例(马波斯T25对刀仪)

(=== 首次安装:设定对刀仪偏置 ===)
(基准刀长度 L_ref = 120.000mm)
(1. 手轮移至对刀仪上方,使基准刀端面刚好接触对刀仪上表面)
(2. 记录此时机床Z坐标值,假设为Z_arm_pos)
(3. 计算:对刀仪顶面Z值 = Z_arm_pos - L_ref)
(4. 在系统参数画面中找到"No.5063",手动输入计算结果)
(5. 这个值永久有效,不需要每次都设)
(=== 日常生产:自动对刀 ===)
T02 M06                    (换刀)
G90 G00 X#501 Y#502       (移至对刀仪中心,#501/#502预先存储)
G00 Z150.                  (用机床坐标快速下至安全高度,勿带G43)
G49                        (取消刀长补偿,防止干扰G37计算)
G37 G91 Z-30. F500        (自动测量:向下30mm,500mm/min)
(触发后系统自动计算刀长并更新至H02对应的几何偏置)
G90 G00 Z300.             (退刀)

G36半径/直径测量(径向/X向)

G36用于刀具沿X轴或Y轴的径向触发,系统自动将测量结果写入刀具偏置:

(=== 刀具半径测量 ===)
G90 G00 X#501 Y#502      (移至对刀仪中心)
Z#503+50.                 (到对刀仪顶面上方50mm)
G36 G91 X25. F300         (+X方向,刀具右侧触面对刀仪侧壁)
G90 G00 Z300.

逻辑说明:

  • G36沿X正方向移动,刀具侧壁触碰对刀仪时触发
  • 系统根据触发坐标和已知对刀仪中心X坐标,自动计算刀具半径
  • 结果写入当前刀具对应的D偏置(或半径几何/磨损偏置中,具体由系统参数决定)。

注意: 半径测量依赖的是相对差值,因此对刀仪的安装位置偏差在此过程中会自动抵消。但对刀仪的机械状态(侧壁垂直度、表面清洁度)直接影响测量精度。


Inspection Plus宏程序体系——把G31封装成工程语言

雷尼绍的Inspection Plus是一套预装在发那科系统上的宏程序包。它不是硬件,而是以O9000~O9999系列宏程序的形式存储在CNC内存中。它的核心价值:把G31跳转坐标 → 与已知基准对比计算 → 更新偏置变量 这个流程封装成一条G65调用。

核心宏程序一览

标定类(O9800系列)

宏程序功能说明
P9801标定测头长度用环规或基准面标定测头的Z向长度偏置
P9802标定测头直径用环规内壁四方向测量标定触发半径
P9804标准球标定(长度+直径)合并P9801+P9802,用标准球替代环规

测量类(O9801~O9814系列通用测量循环)

宏程序功能
P9810安全定位移动(遇触发急停)
P9811单点表面Z轴测量
P9812内径/外径测量
P9814标准球验证/角度测量
P9732电池电量检测

P9810安全定位——防撞第一道防线

G65 P9810 Z-5. F3000

P9810做的事情:以3000mm/min的G00速度移动到Z-5.位置,但在移动过程中监测测头触发信号。如果在到达目标位置之前测头触碰到任何障碍物,立即急停并触发报警。

这个设计的精妙之处:如果测头带电开启,P9810移动时如果路上遇到切屑堆积或工件残留,会在触碰瞬间停下报警,而不是像常规G00那样硬推过去把测头撞坏。

P9801测头长度标定

用环规标定测头(OMP40-2为例):

G90 G54 G00 X0 Y0
G43 Z100. H01                (调出测头刀补)
G65 P9810 Z-5. F3000         (安全定位到环规上方)
G65 P9801 Z_ring_top         (标定:测量环规顶面,自动计算测头长度偏置)
M30

内部逻辑(简化版):

  1. 用G31向下进给,触碰环规顶面
  2. 记录触发坐标(存入#5063)
  3. 已知环规顶面在机床坐标系中的Z值(由P9801的Z参数传入)
  4. 计算测球半径补偿量,写入系统测头长度偏置变量

P9802测头直径标定

G65 P9810 X0 Y0 Z-5. F3000   (回到环规中心上方)
G65 P9802 D25.                (标定:环规内径Ø25mm)
M30

内部逻辑(简化版):

  1. 测头在环规内壁触碰+X、-X、+Y、-Y四个方向
  2. 每次触发用G31 P2或循环调用记录位置
  3. 系统根据环规已知内径D反算测头触发半径R_probe
  4. R_probe值写入偏置变量

注意:正负方向不对称(如+方向与-方向测得的半径差>2μm)说明测头预行程变化(PTV)已超出正常范围——常见原因是测针弯曲、测头内部机械磨损或密封老化导致触发力不对称。

P9811工件表面Z轴测量(非标定)

标定完成后,日常生产中用P9811测量工件表面Z坐标:

G65 P9810 Z-5. F3000         (安全定位到测量点上方)
G65 P9811 Z-10.               (测量Z轴表面,结果用于工件找正)

注意: P9811是测量循环,不是标定循环。很多初学者把P9811/P9812当标定用,实际上标定应该走P9801/P9802,测量才走P9811/P9812。

标定验证

G65 P9810 X0 Y0 Z-5. F3000
G65 P9814 D25.                (标准球/环规校验)
#3000=1 (CHECK DIA)           (偏差>0.005mm触发报警)

生产现场最容易被跳过的一步。 标定做完不验证,相当于换完电池不确认设备是否真的通电了。定期做验证记录的车间,测头故障响应速度比不做验证的快50%以上。


现在说说参数设置与宏程序加载

关键系统参数如下:

参数号含义设定值
#8133#5跳转功能(Skip)是否可用1(开启)
#8133#6刀具自动测定(G36/G37)是否可用1(开启)
#6200#0SKIP信号极性1(高电平有效)
#6200#1MI多段跳转信号极性0
#5091G36/G37轴向最大移动距离(安全范围)根据实际刀具设定
#5092G36/G37进给速度300~500
No.5063系统参数(注意:不是宏变量#5063)— 对刀仪参考位置Z值手动输入参数画面
#6000~#6500用户宏变量区测头宏程序使用

宏程序加载

Inspection Plus宏程序必须通过以下方式加载到CNC:

  1. RS-232串口传输(传统方式)
  2. CF卡/U盘(用I/O操作从外部存储复制到CNC内存)
  3. 以太网DNC传输(新型号支持)

加载后检查O9000~O9999程序是否存在:

// 在MDI模式下输入
O9001
// 如果能浏览到程序内容,说明已加载

开放宏程序权限

雷尼绍宏程序通常是O9000系列,发那科系统默认受保护。需要开放参数:

#3202#4 (NE8) = 0      允许编辑O9000~O9999
#3202#0 (NEP) = 0      允许删除O9000~O9999

⚠️ 安全提示: 宏程序导入完成后,必须将#3202#4(NE8)和#3202#0(NEP)重新恢复为1。O9000系列宏程序是机床厂和雷尼绍的底层核心程序,如果不重新锁上,操作工在加工时误删或误改了P9810等安全移动程序,会导致严重的撞机事故。这一点是很多现场忽略的。


这里还有几个常见问题排查

比如,G31不触发

现象原因排查
G31走到终点不触发测头未激活检查测头是否已光学开启;OMI-2绿灯是否常亮
G31触发但坐标不准SKIP信号毛刺检查电缆屏蔽是否断裂,OMI-2安装角度是否偏移
G31时有时无电池电量低OMP40-2用P9732检测,或直接换电池
程序跑完测头没亮宏程序未加载检查O9810等是否存在

或者,G36/G37不触发

现象原因排查
G37无反应直接过冲#6200#0未设MDI输入参数,设为1
G37走到终点不停参数#5091设定过小,刀具超出搜索范围检查#5091值是否满足刀具最大长度
每次重复性>5μm对刀仪表面脏清洁对刀仪表面,确认吹气正常
刀长写不进去偏置写入方式参数错误检查#6201相关设定
G36无法触发使用G37指令测量径向确认:半径测量用G36,长度测量用G37

以及 Inspection Plus宏程序报警

报警码含义处理
报警92 P/S宏程序调用失败检查对应O程序是否在CNC内存中
测头不触发报警接收器未就绪检查OMI-2状态灯
超程报警P9810移动路径受阻确认Z轴安全高度足够

从G31到G36/G37到宏程序——一条完整链路

把这三层串起来看,发那科系统的测头/对刀仪编程体系其实非常简洁:

物理层:  测头触发 → 接收器 → SKIP信号(X地址)

指令层:  G31(记录触发坐标 → 宏程序读取#5061~#5063计算偏置)
          G36(径向测量:X/Y轴自动测偏置 → 写入D偏置/半径偏置)
          G37(轴向测量:Z轴自动测刀长 → 写入H偏置)

应用层:  Inspection Plus(O9800系列标定 + O9810~O9820系列测量)→ 工程API

G31是底层指令,什么品牌的测头都能用,触发后坐标存入只读变量**#5061(X)/ #5062(Y)/ #5063(Z)**,需在下一程序段立即读取。

G36/G37是发那科给对刀仪准备的专用指令,G36管径向(半径),G37管轴向(刀长),两者不可混用。安全距离由参数#5091控制,不是靠G36保护G37。

Inspection Plus宏程序是雷尼绍在G31之上的封装,标定走O9800系列(如P9801/P9802),测量走O9810~O9820系列(如P9811/P9812),两者功能不同,不可混淆。

三者面向的设备不同、入手的深度不同,但底层共用同一套SKIP信号机制。理解了这条链路,遇到任何品牌的测头/对刀仪在发那科系统上配置,都可以从G31和SKIP信号开始逆向推理。