已加载的程序怎样开始、暂停、恢复和停止

阅读目录 · English

上一课从文件管理中选取了NC文件,并把程序文字和加工列表准备好。本课接着讲:按下按钮以后,哪些脚本先运行,哪些NC文件随后执行,界面又怎样反映当前状态。后面的教导篇也会把生成的NC代码交给同一个加工框架。

先沿标准界面走一遍,再读其中的短脚本。你会看到,熟悉的变量、判断和子程序,既能安排加工前后的动作,也能决定按钮文字和操作条件。

1.先找到原有按钮

进入“程序 → 刀路预览”。下图加载了一份圆形铣底程序,文件名为 circular-pocket.nc。练习使用未连接控制器的软件副本,通过“仿真”观察流程;程序中的运动、主轴指令不用于实际机床操作。

图1:原程序页面,左侧为刀路,右侧为代码,下方为加工列表和功能键

点击截图可查看原图。

本页使用以下功能键。位置来自当前标准功能键配置;面板重新配置后,应按实际功能名称查找。

本页位置 按钮名称 对应操作
F3 仿真 选择仿真方式,再进入启动脚本
F9 开始 选择实际加工方式,再进入同一个启动脚本
F10 暂停/恢复 运行中请求暂停;暂停完成后从原处恢复
F11 停止 请求停止;已经处于复位状态时撤销复位

图2:开始前的三个操作按钮,“暂停”尚不可用

点击截图可查看原图。

图3:本课通过原“仿真”按钮观察运行过程

点击截图可查看原图。

“加载文件”“加载代码”解决的是准备哪个程序;“仿真”“开始”解决的是以什么方式运行已选程序。看到代码或刀路,并不表示已经启动加工。

2.同一个启动脚本怎样区分仿真和加工

在主界面功能定义中,两个按钮都调用 /env/start[1],但调用前的赋值不同。下面摘出其鼠标事件配置:

-A: (clickedEvent:/env/start[1](#319item11=1<<#333item13=1<<#319itemversion11=#331item30))

这是“仿真”。先把 #319.item[11] 设为1,把本次次数设为1,再运行 start。其中 << 分隔调用前需要执行的语句。

-A: (MouseButtonRelease:/env/start[1](#319item11=0<<#333item13=1))

这是“开始”。同一项设为0,进入实际加工方式。#319item11 与 #319.item[11] 是这里使用的两种参数写法。

[1] 选择页面脚本的执行通道,不是加工次数,也不是“第1个NC子程序”。页面脚本把运行条件和待执行文件交给NC执行部分;页面脚本返回时,NC加工可以仍在继续。 因此,在调用后紧接着写“加工完成”的处理,时机并不正确。

本课先记住下面几项,后面遇到时再对照:

参数 在这条流程中的作用
#319.item[1] 请求复位/停止
#319.item[2] 请求暂停
#319.item[3] NC解释器处于启动状态
#319.item[4] 加工文件采用宏解析方式;标准启动流程根据文件名选择
#319.item[6] 处于复位状态
#319.item[7] 处于暂停状态
#319.item[9] 按恢复加工方式启动
#319.item[10] 当前使用MDI文件执行方式
#319.item[11] 仿真方式

“请求”和“状态”分开保存。例如,按钮先提出暂停请求,NC执行部分处理后才形成暂停状态。组态按钮应沿用原操作脚本,不能把这张表当作直接改状态的操作步骤。

3.start先检查条件,再准备本次加工列表

打开 env/start,首先看到:

IF#9997!=" " GOTO2;存在告警状态时退出
IF#319.item[6]==1 GOTO2;复位状态下退出
IF#319.item[3]==1 GOTO2;解释器处于启动状态退出

#9997 的无报警标记在这里是一个空格。存在报警、仍处于复位、解释器已经启动,都会走到脚本末尾。按钮看起来可以点,也不代表这些检查已经通过。

后面还有手轮引导处理、机械回零检查和确认提示。启动时的回零检查同时考虑轴是否启用、该轴是否配置回零方式以及系统设置;仿真分支会跳过这项检查。不要为了能启动而删除这些判断。

接下来是本次加工列表的准备。#334 保存界面中的文件及其加工设置,每个文件占20个字段;#335 保存本次选中的文件组号:

#335.itemnum=0;清除当前加工序列
#2500=0;临时变量,计数器
WHILE#2500<#334.groupnum DO1;依次对加工序列元素进行判别
IF#334.item[#2500*20]==0GOTO3;判断加工序列元素是否选中,对于每个加工序列都有20个元素项
#335.item=#2500;如果选中,添加到当前加工序列中
N3
#2500=#2500+1;计数器递增
END1

#335=0;选中当前加工序列第一项

逐行看:先清空本次列表,再从组号0开始检查。每组的第0字段表示是否选中;选中的组号追加到 #335。最后让 #335 指向本次列表的第0项。

这里有一个以后经常会用到的写法:不带下标的 .item,在赋值左侧表示追加,在读取时表示当前项。 例如,本次选中组号0和2,则 #335 内依次存放0、2;当 #335=1 时,读取 #335.item 得到2,表示下一个要处理的是原加工列表第3组。这个例子用于理解下标,不需要手动改参数。

4.为什么先执行safez.nc,再执行加工文件

启动脚本末尾为后续NC执行准备入口:

#404.value="safez.nc"
(#319.item[11]=1;仿真)
#319.item[10]=1;MDI
#319.item[9]=0;取消恢复加工
#319.item[3]=1;解释器启动
#319.itemversion[3]=1;启动标识
#319.itemversion[4]=1;主轴启动标识

括号中的仿真语句是原文件中的注释,不会把实际加工强制改成仿真。这里的MDI方式用于执行准备文件,并不要求操作者打开MDI输入窗口。

文件或参数 负责什么
#404 当前准备运行的MDI文件名,这里是 safez.nc
#405 这些NC文件所在目录
env/safez.nc 检查当前列表项,确定加工文件,执行加工前准备
#403 当前实际加工文件的路径
env/end.nc 单个文件正常结束后的处理,推进列表和次数

对于本课的普通NC文件,正常流程如下:

  1. start 准备列表,安排 safez.nc。
  2. safez.nc 从 #334 取出本项文件,写入 #403,设置加工前条件。
  3. NC执行部分转去运行该加工文件。
  4. 文件正常结束后运行 end.nc,把 #335 移到下一项。
  5. 再运行 safez.nc:有下一项就继续,没有下一项就完成收尾并结束。

不要只按文件名把 safez.nc 理解为“抬刀到安全Z”。它还负责选择文件、判断启动是否有效、调用加工前子程序,以及处理列表结束。

这些阶段之间的切换由软件内置的NC调度完成,safez.nc、end.nc、pause.nc 和 rtnbreak.nc 都是内部识别的文件名。文件中的准备与工艺动作采用组态宏实现,但不能随意改名后期待软件自动找到新的入口。

图4:运行时原进度区显示当前文件及程序进度

点击截图可查看原图。

图5:程序运行中,“开始”不可用,“暂停”可用

点击截图可查看原图。

进度区的各类显示规则见下一课进度、提示与报警。加工文件的行进度和MDI阶段的插补缓冲区占用各有用途,不能把它们都当成整个工件的完成百分比。

4.1 带循环、分支的加工文件,先扫描结构

前面的圆形铣底示例已经是一段段排好的运动代码。如果文件中保留了 WHILE…DO…END、IF…GOTO 等逻辑,执行顺序会随条件改变,同一段代码还可能反复执行。这类加工文件应采用宏解析方式,通常将文件名写成小写 macro 开头,例如标准组态里的 macroMillRect.nc。

safez.nc 用下面这一句判断文件名:

IF[#403/"/"]>"macro" GOTO10

这里的 /"/" 取路径最后一个斜杠之后的文件名;字符串的 >"macro" 表示检查是否包含 macro。满足条件,后续把 #319.item[4] 设为1,否则设为0。约定统一用 macro 前缀,当前标准脚本实际按“包含macro”判断;这里检查的是文件名,不是NC内容的第一行。

宏文件从正常起点启动时,过程为:

  1. 先执行 safez.nc,选定加工文件和宏解析方式。
  2. 扫描整个加工文件的程序结构,记录程序块、N标号以及循环起止位置。
  3. 再开始执行:计算变量、判断分支、重复循环,并生成相应的运动。
  4. 文件正常完成后,仍进入 end.nc 和后续列表处理。

可以把结构扫描理解为“先记下每个跳转目标和循环边界在哪里”。扫描时不会按循环次数把工件先加工一遍;循环是否继续、分支走哪边,在后面的执行阶段按条件判断。

比较项目 普通轨迹文件 macro 加工文件
主要用途 运行已经展开的一段段轨迹,例如CAM输出的顺序代码 在加工文件中保留循环、分支和参数计算
启动前准备 通常直接进入文件执行 先扫描程序结构,再执行宏逻辑
执行顺序 主要按文件中的轨迹顺序运行 可按条件跳转,也可多次执行同一循环体
暂停后恢复 利用保存的文件位置及运行状态恢复 需要重新解释前面的宏逻辑,找到原来的执行位置

普通文件也可以使用系统支持的变量表达式或调用已经装入的NC宏库。因此,不能只凭“代码里出现了 #”判断是否需要改成宏文件。这里重点区分的是加工文件自身的控制结构、启动前扫描以及恢复方法。

还有两个现有入口需要分清:MDI文件本来就按宏方式扫描和执行,所以 safez.nc、pause.nc 无需加 macro 前缀;普通加工分支另保留了路径含 program 时进行结构扫描的处理,标准教导输出的 program.nc 会遇到这个规则。但该规则并不把加工文件切换为 #319.item[4]=1,不能把“进行了扫描”与“采用宏文件恢复方式”画等号。

5.按暂停时,先提出请求

“暂停”和后面显示的“恢复”使用同一份 env/pause。文件开头只有三句就完成了运行中点击的处理:

IF#319.item[3]==0GOTO1
#319.item[2]=1
GOTO2

解释器正在运行,就把暂停请求设为1,随后退出页面脚本。它没有在这里直接清除启动状态,也没有在这里把当前位置当作最终停下的位置。

NC执行部分接受请求,保存继续加工所需的程序位置和运行资料,并安排 env/pause.nc。暂停文件再按当前机型和参数处理退刀、主轴、冷却等事项。因此,点击暂停以后可能还有受控的退刀过程,应等待暂停处理完成。

对于本课使用的普通三轴分支,退刀方向由刀轴及方向参数决定,距离取 #330.item[49];RTCP和其他机型有另外的分支。不能直接把三轴的 G91G0Z... 复制到所有机型。

6.暂停完成后,怎样看出可以恢复

暂停处理完成后,原F10按钮由“暂停”变成“恢复”:

图6:暂停完成,原位置显示“恢复”

点击截图可查看原图。

此时启动状态为0,暂停状态为1。主界面顶部却可能显示“空闲”:

图7:暂停完成时顶部仍显示“空闲”,应结合“恢复”按钮判断

点击截图可查看原图。

这是两个控件观察的条件不同。顶部“空闲”条件只检查启动状态为0且不处于复位;F10文字还检查暂停状态。可按下表区别:

稳定后的状态 启动 item[3] 复位 item[6] 暂停 item[7] 本页表现
尚未运行或正常结束 0 0 0 顶部“空闲”,“暂停”不可用
加工文件运行中 1 0 0 “开始”不可用,“暂停”可用
暂停处理完成 0 0 1 顶部可为“空闲”,F10显示“恢复”
停止后处于复位 0 1 0 顶部“复位”,“暂停”不可用

这个表描述稳定后的常见状态。进入准备、暂停处理和恢复准备时还有过渡过程,不要用某一瞬间的一个字段代替完整判断。

7.恢复为什么需要rtnbreak.nc

再次按F10,此时显示“恢复”,仍然进入 env/pause,但会跳到 N1。脚本先检查报警、暂停和复位条件,再检查恢复所需的回零条件。仿真允许进入恢复分支;实际加工时,原脚本还检查X、Y、Z、A的回零标记或 #355.item[0] 的允许条件。这与 start 中逐轴检查的写法不同,阅读时要分别对照。

对于本课的普通NC文件,脚本安排 rtnbreak.nc,然后设置恢复加工状态。该NC文件的完整内容只有:

M98P8000

O8000 位于 env/slib.nc,负责结合暂停时保存的资料恢复刀具、相关输出及位置。具体走哪个运动分支,取决于机型、RTCP、刀轴方向和相关设置。执行完后,NC执行部分恢复原加工的程序位置和运行资料,继续解释加工文件。

因此,恢复过程可按下面的顺序理解:检查能否恢复 → 执行恢复准备 → 回到暂停时的加工位置和状态 → 继续原程序。 如果暂停过程已经退刀,恢复准备就不能省掉。

图8:恢复原程序后,F10重新显示“暂停”

点击截图可查看原图。

macro文件恢复:先找回循环中的执行位置

同一个文件行号可能在循环中执行多次。例如,循环内同一条X往返语句第一次和第五次执行时,虽然文字位置相同,剩余次数、方向和所在层却可能不同。恢复时需要知道暂停发生在哪一次执行中。

env/pause 在恢复分支中检查 #319.item[4]。普通文件直接安排 rtnbreak.nc;宏文件先交回宏解释流程。后者根据保存的执行位置重新扫描结构、从头解释前面的宏逻辑,重建循环和分支走到暂停处时所需的数值与状态。

这里的“从头解释”不等于把已经加工过的轨迹重新运动一遍。寻找恢复位置时,前面的运动段不进入实际运动队列;找到要继续的位置后,再由内部调度安排 rtnbreak.nc 的返回准备,然后继续加工。因此,宏文件恢复也可能经过 rtnbreak.nc,只是先后顺序与普通文件不同。

编写这类文件时,要让前面的参数计算和分支能够重新得到一致的结果。暂停期间不要改动该加工文件及决定循环、分支的输入参数;也不要把会在重新解释时再次赋值的累计计数,误当作只执行一次的完工处理。加工完成后的计数位置应结合下一节的正常结束流程选择。

8.正常结束时,哪些地方适合放加工前后的动作

继续让程序运行到结束。列表处理完毕后,启动状态退出,界面恢复空闲:

图9:正常结束后回到“空闲”

点击截图可查看原图。

标准文件已经留出了四个NC子程序调用位置:

子程序 从哪里调用 适合怎样理解其时机
O6100 safez.nc 有效列表项进入准备且 #319.itemversion[4]=1 时,例如新启动或下一轮
O6101 safez.nc 当前有效列表项的加工前
O6102 end.nc 当前文件正常结束后
O6103 end.nc 本轮所选文件列表完成后

对应文件为 env/slib-6100.nc 至 env/slib-6103.nc。例如,原 slib-6102.nc 完整内容为:

O6102
M99

虽然暂时只有返回语句,但调用位置已经安排好。理解这些位置,就能区分“每个文件结束一次”和“整轮列表结束一次”。以后增加加工计数或工序处理时,先选择正确位置,再写需要执行的宏语句;不要把所有处理都塞进“开始”按钮。

恢复脚本也会重新设置 #319.itemversion[4]。因此,O6100 是否执行要看有效列表项进入 safez.nc 时的标记,不能简单按“整个操作只执行一次”来使用。

end.nc 还负责增加已完成轮数,并在循环条件满足时把 #335 重新指向0。一次列表可能包含多个文件,一次操作也可能运行多轮;文件数、轮数和合格工件数需要按实际工艺分别定义。

9.停止为什么不同于正常结束

重新启动一次仿真,在程序运行中按“停止”。停止请求会使当前加工退出;下面展示停止后处于复位的状态:

图10:停止后处于复位,顶部显示“复位”

点击截图可查看原图。

图11:停止按钮采用复位状态颜色,“暂停”不可用

点击截图可查看原图。

env/stop 的完整代码如下:

IF#319.item[6]==0GOTO1
#319.item[1]=0
#319.item[6]=0
GOTO2
N1
#319.item[1]=1
#319.item[7]=0
#319.itemversion[1]=1
N2

未处于复位时,跳到 N1:提出停止请求,取消暂停,设置软停止标记。已经处于复位时,则走前半段撤销请求和复位状态。标准定时脚本还会在满足设备状态和缓冲区条件时自动撤销软停止,所以实际界面不一定长期停留在图10。

按停止打断当前文件,不等于让该文件正常走到结尾;不要把 end.nc、O6102 或 O6103 当作所有停止、报警都必定经过的处理位置。停止后也不能用本课的“恢复”按钮继续;保留暂停位置继续加工,应走前面的暂停流程。

10.reset脚本与reset.nc分别做什么

env/reset 也是页面脚本,其完整内容为:

IF#319.item[6]==0GOTO1
#319.item[1]=0
#319.item[6]=0
#319.item[7]=0
GOTO2
N1
#319.item[1]=1
#319.item[7]=0
N2

与 stop 对照,它没有在提出请求时设置 #319.itemversion[1]=1;撤销复位的分支还清除了暂停状态。因此,两份脚本不能只凭名称相近就互换。reset 也不是“无论什么时候调用,都强制进入复位”的单向动作;它同样检查当前复位状态。

env/reset.nc 则是NC文件。标准 env/timer 观察复位状态从1变为0,即复位解除,再请求执行这个文件。它并非按下“停止”后立即顺序调用的下一行,也不是按名字在进入复位时自动执行。

图12:撤销复位后,顶部回到“空闲”

点击截图可查看原图。

这里讲的是软件的停止与复位流程。现场急停及设备输出处理还受控制器和机床配置约束,不能用一个页面按钮代替机床的急停设计。

11.同一个按钮怎样改变文字和是否可按

回看F10的功能定义,关键几行如下:

-C1,1(#319.item3==0&&#319item7==1)
-C0,0(1)

第一条条件表示解释器已停下且处于暂停,选择恢复用的样式和文字;其他情况使用普通暂停样式和文字。紧随其后的两个 -T 分别取 #1101.itemtitle[2] 的“暂停”和 #1101.itemtitle[3] 的“恢复”,前面再拼上当前按键名称,并用换行把按键名和功能名分开显示。

后面的条件和 -E2 决定是否可操作,例如空闲且未暂停时禁用,普通运行和暂停完成时分别提供对应操作。文字变化、颜色变化、禁用条件和执行脚本,是同一功能定义中的不同部分。

F10放到面板哪个位置,由 #913、#914 的功能配置和 mainInit 装配决定,见功能键章节。理解这两层以后就容易定位:想改位置,查看面板配置;想改文字,查看语言参数;想理解暂停动作,查看 env/pause 和 env/pause.nc。

12.把整条链用于后续组态设计

阅读现有功能时,按下面的顺序查找即可:

想弄清的问题 先看哪里
点了哪个按钮、调用前改了什么 主界面功能定义、功能键配置
为什么不允许开始或恢复 env/start、env/pause 的条件判断
本次运行哪些文件 #334 原列表、#335 本次列表
加工前后要安排什么 safez.nc、end.nc 及 O6100~O6103
暂停后怎样退刀、怎样回来 pause.nc、rtnbreak.nc 和 O8000
停止和复位解除怎样处理 stop、reset、timer 和 reset.nc
界面为什么显示这段文字 控件条件、语言参数和当前状态

几个常见问题也可以沿这条线判断:

本课不需要改写这些运行文件。先掌握“按钮提出操作 → 页面脚本检查和准备 → NC文件按顺序执行 → 状态回到界面”的完整过程,再选择合适的位置增加自己的工艺处理。

上一课:文件加载 · 下一课:进度、提示与报警 · 阅读目录