4. 数控机床通信与宏程序基础

Renishaw测量循环在数控机床上的运行,本质上不是“一个独立软件在测头里跑”,而是由NC程序、宏程序、宏变量、G代码、M代码以及机床PLC/梯图共同完成的一次受控动作。理解这条链路,才能解释为什么同一段测量程序在不同机床上会出现“不执行”“结果不写回”“报警中断”等差异。

一、测量循环的三种典型调用方式

在Fanuc、三菱、西门子等常见系统中,Renishaw测量循环通常以三种方式被调用:

  • G代码宏调用:如 G65 P9810 X... Y... Z... F...,由系统把参数写入局部宏变量后跳转到O9810宏程序。这是最标准、最可移植的方式。
  • M代码触发:如 M80 启动测头、M81 停止测头,由PLC控制测头开关与跳步信号,再由NC等待SKIP信号完成触测。
  • 子程序调用:用 M98 P9810 直接调用测量子程序,参数通过#100~#131等宏变量预先赋值。

三种方式并非互斥。实际程序里常见组合是:先用M代码打开测头,再用G65调用具体测量循环,最后用M代码关闭测头。

二、宏变量传递:参数如何进入循环

Renishaw循环的参数传递依赖局部宏变量。以Fanuc为例,G65 P9810 X50. Y30. Z-10. F200. 执行时,系统自动把X、Y、Z、F分别写入该宏程序对应的局部变量地址,宏程序内部再用这些变量计算触测方向、安全距离和写入位置。

常见对应关系如下(不同循环略有差异,以随机手册为准):

调用参数局部变量含义
X / Y / Z#24 / #25 / #26目标位置或名义尺寸
I / J / K#4 / #5 / #6偏置量或公差带
F#9测量进给速度
Q#17安全间隙或超程量
M#13结果写入模式或输出标志

测量结果通常写回公共宏变量,例如#100~#105存放X/Y/Z偏差,#110存放“是否在公差内”的判断标志。NC主程序随后读取这些变量,决定是否执行刀补修正或报警。

局部变量只在宏调用期间有效,公共变量在断电后是否保留取决于系统参数。若需要跨程序、跨班次保留测量结果,应确认公共变量是否被设置为“保持型”。

三、G代码与M代码的协同逻辑

G代码负责运动与逻辑,M代码负责机床状态与外围动作。一次完整的测头测量,典型协同顺序是:

  1. M80:PLC输出测头开启信号,等待测头就绪反馈。
  2. G65 P9810 ...:NC执行测量宏,控制轴以测量进给接近工件。
  3. 触测瞬间,测头发出SKIP信号,NC记录当前坐标并跳转。
  4. 宏程序计算偏差,写入公共宏变量。
  5. M81:关闭测头,恢复主轴/冷却等状态。
  6. 主程序读取宏变量,执行刀补或判断报警。

这里的关键是SKIP信号必须被NC正确识别。如果PLC没有把测头跳步信号接入高速跳步输入,或者跳步输入号与宏程序中的设定不一致,就会出现“轴继续走、测头已触发但不记录”的危险情况。

四、调用链路与信号流

下图把NC程序、宏程序、宏变量、PLC与测头之间的调用与信号关系集中展示,便于对照排查。

Renishaw测量循环调用链路与信号流 NC主程序 M80 开测头 G65 P9810 X.. Y.. Z.. 读取 #100~#105 测量宏程序 O9810 解析 #24/#25/#26/#9 计算安全距离与触测路径 写回 #100~#105 PLC / 梯图 M80/M81 译码 测头开/关输出 SKIP 跳步输入 Renishaw测头 红外/无线电传输 触测 → 跳步信号 宏变量区 #100~#105 偏差值 #110 公差判断标志 结果处理 刀补修正 / 报警 或继续加工 G65调用 M80/M81 开/关信号 SKIP跳步 写回结果 读取 判断与修正 关键检查点: ① G65调用的P号与宏程序O号必须一致;② 局部变量地址与循环手册对应;③ SKIP输入号与PLC配置一致; ④ 公共变量是否保持;⑤ M80/M81是否被梯图正确译码;⑥ 测量进给F与安全间隙Q是否合理。

五、实操中容易出错的几个点

第一,宏程序号与调用号不匹配。例如程序里写G65 P9810,但机床里实际安装的是O9811,系统会直接报警“宏程序未找到”。排查时先确认P后面的数字与宏程序O号完全一致。

第二,局部变量被覆盖。如果宏程序内部又调用了另一个宏,而两者使用了相同的局部变量地址,参数会被覆盖。规范做法是:在宏程序开头先把需要的参数转存到公共变量或更高层局部变量,再执行内部调用。

第三,SKIP信号未接入高速跳步。普通输入点存在扫描周期延迟,测头触发后轴可能多走几微米到几十微米。对于公差要求高的测量,必须使用系统指定的高速跳步输入,并在宏程序中正确指定跳步号。

第四,测量结果未写回或写错位置。常见原因是宏程序中的写回变量与主程序读取变量不一致。建议在调试阶段用#100=手动赋值,再运行主程序读取,确认变量链路通畅。

在首次运行任何测量循环前,应先以低速、小行程、空运行方式验证测头开启、触测跳步、结果写回三个环节,确认无误后再投入实际测量。切勿在未验证SKIP信号的情况下直接让测头快速接近工件。

六、一个可参考的调用片段

O0001 (主程序)
M80                     (开测头)
G65 P9810 X50. Y30. Z-10. F200. Q2.  (调用测量循环)
#500=#100               (X偏差转存)
#501=#101               (Y偏差转存)
IF [#110 EQ 1] GOTO 100 (公差内跳转)
#3000=1 (ALARM)         (超差报警)
N100 M81                (关测头)
M30

这段程序展示了最核心的协同关系:M代码管测头状态,G65管测量动作,宏变量管结果传递,条件判断管后续决策。把这四者对应清楚,Renishaw测量循环的调用就不再是黑箱。