赛科(天津)智能科技有限公司
二次开发手册

首页>支持与服务>二次开发手册

二次开发手册

教导记录怎样编辑、保存和重新打开

发布时间:2026-10-16 点击次数:1007

下载中英双语离线手册(ZIP,8.7 MB,含原始分辨率截图)

阅读目录 · English

上一课已经生成了两条延时记录,并让其中一条引用配方。接下来要解决的是日常使用中的几个问题:怎样在中间加一条记录,怎样复制已有指令,怎样保存下来供以后继续编辑,以及程序和配方应该怎样配套使用。

本课继续使用标准“教导”页面和原有脚本,不增加新的按钮或指令。先完成一遍操作,再对照短脚本看懂它的做法。

1.找到记录编辑和文件操作的位置

进入“教导”,左侧选择“程序”。程序表下方分三排按钮:第一排选择记录和翻页,第二排编辑记录,第三排新建、保存、打开和加载代码。

图1:原教导页面,程序表和记录操作在左侧,延时指令参数在右侧

点击截图可放大查看,原始分辨率图片见离线包。

下面的局部图用于看清按钮文字。后文说的“保存”“打开”,都是这里的按钮。

图2:程序表下方的原有按钮,保存与加载代码是两个不同操作

点击截图可放大查看,原始分辨率图片见离线包。

在练习副本中准备好上一课的两条记录:

G04P1250
G04PINT[#1550.item[0]*1000]

配方第1项为“延时时间”,值2.5;第2项为“备用延时”,值0.75。第一条代码固定等待1.25秒,第二条在NC解释时读取配方第1项。生成方法见教导配方引用。

开始前保存要保留的教导程序和配方。本课会插入、删除记录,还会用“新建”清空练习程序;这些操作不应直接用于尚未保存的生产资料。

2.一条记录为什么不只是屏幕上的一行字

程序表的一条记录保存在 #1551 的同一下标中,同时带有四份内容:

字段 用途 本例第1条记录
#1551.item[0] 输出到NC文件的代码 G04P1250
#1551.itemdesc[0] 程序表显示的文字 G04P1250
#1551.itemversion[0] 指令类别,供选回时判断 7,延时指令
#1551.itemtitle[0] 恢复右侧输入项所需的编辑资料 A0B0C1.250DfalseE1

这里的 .itemtitle[...] 用来保存编辑资料,不是给操作者看的标题。标记A~E的含义已在上一课解释。

还有三个与位置有关的量:

参数 含义
#1551 当前记录下标,从0开始
#1551.itemnum 已分配的记录数量,包括插入但尚未填入代码的记录
#1551.channel 程序表当前页,从0开始,每页显示10项

因此,画面的第2项对应下标1。表中的“序号”用于选择教导记录,不是NC程序中的N行号。一条空间圆弧记录还可能包含两行代码,不能把“删除一条记录”理解成必定只删除一行NC文字。

3.插入:先腾出一个位置

本例要在两条延时之间复制一条固定延时:

  1. 在程序表中单击第2项,即配方延时。
  2. 按“插入”。
  3. 第2项变为空记录,原来的配方延时移到第3项。当前仍停留在第2项。

图3:在第2项前插入空记录,原配方延时向后移动一项

点击截图可放大查看,原始分辨率图片见离线包。

“插入”运行 env/teach/insnodeonly,完整内容如下:

IF#1551>=#1551.itemnumGOTO1
#1500.channel=0
widgetFunc["insertSystemParamItem",1551,#1551,1]
N1

第一句判断当前位置是否已经超出已有记录。最后一条之后的空位置没有可向后移动的记录,这个按钮便不作插入。insertSystemParamItem 的三个数字依次表示:参数1551、插入位置、插入数量1。

插入会把原记录的代码、显示文字、类别和编辑资料一起向后移动,并在当前位置留出空记录。它没有把右侧输入内容生成到这里。空位置准备好以后,还要生成代码或粘贴一条完整记录。

在末尾追加时,直接选择最后一条之后的空位置,再生成或粘贴即可,不需要先按“插入”。

4.复制和粘贴:带走代码,也带走编辑资料

接着完成刚才的插入:

  1. 单击第1项固定延时,按“复制”。
  2. 单击第2项空记录,按“粘贴”。
  3. 第2项出现 G04P1250,第3项仍是配方延时。右侧也恢复为固定数值1.25秒。

图4:粘贴后第2项成为完整的固定延时记录,原配方延时仍在第3项

点击截图可放大查看,原始分辨率图片见离线包。

env/teach/copy 只有一句:

#1551.version=#1551

它记住的是来源记录的下标。例如复制第1项,便将0保存到 #1551.version。它没有把内容放到Windows剪贴板,也没有在此时另外保存一份记录。

env/teach/paste 的完整内容是:

IF#1551.version>=#1551.itemnumGOTO1
IF#1551==-1THEN#1551.itemnum=1
IF#1551==-1THEN#1551=0
IF#1551>=#1551.itemnumTHEN#1551.itemnum=#1551+1
#1551.item[#1551]=#1551.item[#1551.version]
#1551.itemtitle[#1551]=#1551.itemtitle[#1551.version]
#1551.itemdesc[#1551]=#1551.itemdesc[#1551.version]
#1551.itemversion[#1551]=#1551.itemversion[#1551.version]
widgetFunc["SysFunc","0","parser","/env/teach/parsenode"]
N1

先检查来源位置,再按需要增加目标记录数量,随后复制四份内容,最后调用 parsenode 恢复右侧参数。粘贴后仍停在目标位置,不会像生成延时代码那样自动移到下一项。

要掌握下面三个使用规则:

操作情况 实际结果
粘贴到已有记录 覆盖该位置的记录,不自动插入
粘贴到末尾第一个空位置 扩充记录数量,追加一条
复制后修改并重新生成来源记录,再粘贴 取得来源位置此时的新内容

例如,复制1.25秒的记录后,又把来源记录改为3秒并重新生成,再去粘贴,得到的是 G04P3000,不是复制瞬间的 G04P1250。

插入或删除还会改变记录位置。因此,需要中间增加一条时,先插入,再重新选择来源、复制、选择目标、粘贴。不要复制后再在来源之前插入一项,并假定原下标会跟着记录移动。新建或打开另一份程序后,也应重新选择有效来源并按“复制”。

5.删除:整条记录一起移走

现在删除刚复制出来的第2项:保持它被选中,按“删除”,确认后,原第3项向前移到第2项。

图5:删除重复记录后,重新剩下固定延时和配方延时两项

点击截图可放大查看,原始分辨率图片见离线包。

env/teach/delnode 的完整内容是:

IF#1551>=#1551.itemnumGOTO1
IFwidgetFunc["messageBox1",#1107.itemtitle[40],#1107.itemtitle[23],"null.nc"]==0GOTO1
#1500.channel=0
widgetFunc["removeSystemParamItem",1551,#1551,1]
widgetFunc["SysFunc","0","parser","/env/teach/parsenode"]
N1

没有选中有效记录时直接结束;确认框返回0时也直接结束。确认删除后,代码及配套资料一起移除,后面的记录向前补位,再按当前位置恢复参数。

这里的 messageBox1 返回确认结果,脚本据此决定是否继续。不要与其他同名相近的提示函数混用。

删除最后一项时,当前位置会成为末尾空位置。脚本没有自动退回上一项;如果要继续编辑前一条,应重新选择它。插入、删除、复制和粘贴都只改变当前教导资料,不会自动把更改保存到文件。

6.保存程序和保存配方,要分别进行

当前又是两条原记录,可以保存供以后继续编辑。

  1. 保持第2项配方延时被选中,按程序区的“保存”。
  2. 选择练习目录,输入完整文件名 delay.program,完成保存。
  3. 切换到“配方参数表”,确认两个值分别为2.5和0.75。
  4. 按“保存配方”,在同一目录保存为 delay.formula。

图6:保存配方前,确认名称、位置和数值,不能只核对文件名

点击截图可放大查看,原始分辨率图片见离线包。

配方区有自己的文件按钮和复制、粘贴按钮:

图7:配方区的载入配方和保存配方,只处理配方资料

点击截图可放大查看,原始分辨率图片见离线包。

建议用相同的基本文件名配对保存,例如 delay.program 与 delay.formula;这是便于管理的命名方法,软件不会仅凭同名就自动把两份文件一起打开。

文件 由哪个按钮生成 包含什么 用哪个按钮读取
.program 程序区“保存” 参数1551,包括代码、显示文字、类别、编辑资料和记录位置等 程序区“打开”
.formula 配方区“保存配方” 参数1550,包括配方名称、数值等 “载入配方”
program.nc 程序区“加载代码” 已记录的NC代码文字 随该操作显示在程序页面

.program 与 .formula 是软件自己的参数文件,不是可以直接编辑的G代码文本。不要用文本编辑器修改,也不要通过改扩展名将它们互相替代。保存时不只写出几行文字,而是写出对应参数的整份资料。

原“保存”每次都会弹出文件选择窗口;有过保存记录,也不能省略本次路径和文件名确认。另存到新名称可保留上一版资料。

7.重新打开:程序回来了,配方不一定跟着回来

下面故意改变配方,再重新打开两份文件,以看清它们的关系。

先在配方表把第1项改成9,按回车,不保存配方。回到“程序”,按“新建”,确认清空记录。

图8:新建后程序表为空;清空的是教导记录,不是全部配方和右侧工作参数

点击截图可放大查看,原始分辨率图片见离线包。

“新建”的原脚本 env/teach/newfile 为:

IFwidgetFunc["messageBox1",#1107.itemtitle[41],#1107.itemtitle[23],"null.nc"]==0GOTO1
#1551.itemnum=0
#1551=0
#1551.channel=0
N1

它清空记录,并把当前下标、页号设为0;不会删除已保存的文件,也不清空 #1550 的配方。右侧指令工作参数也不由这三句清空,所以不能只凭右侧还显示某个数值就认为记录仍在。

按“打开”,选刚才保存的 delay.program:

图9:打开program文件后,两条记录恢复,选中位置也回到保存时的第2项

点击截图可放大查看,原始分辨率图片见离线包。

右侧恢复“配方参数索引”和“延时时间”,因为第2条记录保存了数据源和配方下标:

图10:恢复的是该条指令的输入方式和配方选择

点击截图可放大查看,原始分辨率图片见离线包。

切到“配方参数表”,第1项仍是9:

图11:打开程序并没有把配方9恢复成原来的2.5

点击截图可放大查看,原始分辨率图片见离线包。

再按“载入配方”,选择 delay.formula,第1项才恢复为2.5,第2项仍为0.75:

图12:载入匹配的formula文件后,配方名称和值恢复

点击截图可放大查看,原始分辨率图片见离线包。

由此可见,配套使用时应分别打开程序、载入配方,再检查被引用项的位置、用途、单位和值。即使名称相同,只要位置或用途改变,#1550.item[0] 就可能读到不合适的数据。

8.四个文件脚本怎样配合

“保存”运行 env/teach/savefile:

widgetFunc["saveFileName","*.program","",100]
IF#100==""GOTO1
#1551.description=#100
N2
widgetFunc["SysFunc",#1551.description,"saveParamItemAs1",1551]
widgetFunc["messageBox",#1107.itemtitle[42],"",""]
N1

saveFileName 弹出保存窗口,*.program 是文件筛选条件,100指定临时路径参数 #100。选择路径后,将其放到 #1551.description,再由 saveParamItemAs1 把参数1551整份写入文件。这里的N2没有被其他语句跳转,不代表自动运行第二个保存过程。

“打开”运行 env/teach/openfile:

widgetFunc["openFileName","*.program","",100]
IF#100==""GOTO1
#1551.description=#100
widgetFunc["SysFunc",#1551.description,"readParamItemFrom1",1551]
N1
widgetFunc["SysFunc","0","parser","/env/teach/parsenode"]

readParamItemFrom1 用文件资料替换参数1551,不是把新记录追加到末尾。随后 parsenode 按恢复的当前记录重新填写右侧参数。保存前只修改右侧输入、没有按“生成代码行”的内容,不属于该条已保存记录。

配方使用同一组文件命令,只把目标换成1550。env/teach/saveformula 的关键写入句为:

widgetFunc["SysFunc",#1550.description,"saveParamItemAs1",1550]

env/teach/openformula 的完整内容是:

widgetFunc["openFileName","*.formula","",100]
IF#100==""GOTO1
#1550.description=#100
widgetFunc["SysFunc",#1550.description,"readParamItemFrom1",1550]
#1550.version=#1550.itemnum
N1

最后一条赋值让“配方表参数数量”显示读入后的实际项数。它不调用 parsenode,也不改写 #1551 的教导记录。

这些脚本没有在打开前另外询问是否保存当前修改。因此,想保留当前内容,应先保存,再打开另一份文件。目标参数号由调用脚本决定,不能依靠换扩展名把一种参数文件变成另一种。

9.文件窗口中的“取消”,要注意当前实现

当前标准脚本把 #100 当作文件选择结果,但两个选择函数对取消的处理不同:

操作 取消后对 #100 的处理 对原脚本的影响
saveFileName 写入空字符串 保存脚本跳过写文件
openFileName 保留原值;本次函数返回空字符串 若 #100 仍是旧路径,打开脚本可能继续读取该路径

例如,先打开 delay.program,再把第1条改成4秒并生成,然后再次按“打开”却在窗口中取消:由于 #100 仍为 delay.program 的路径,原脚本会重新读取它,第1条恢复为文件中保存的 G04P1250。载入配方使用相同的选择函数和判断方式,也存在这个问题。

所以,不要把打开窗口里的“取消”当作保护未保存修改的方法;需要保留的资料,应在打开或载入前保存。如果取消后发现内容回到原值,应先核对是否重新读入了先前的文件。

此外,openfile 的N1之后仍有 parsenode。即使没有读文件,也可能按当前记录重新填写右侧参数;尚未生成的输入不能仅靠取消打开窗口来保留。

阅读或定制类似脚本时,要分清“本次函数返回值”和“上次留下的路径参数”。判断是否取消,应依据本次选择结果,不能只看某个路径参数是否非空。

10.最后再加载代码

两份资料恢复后,切回“程序”,按“加载代码”。程序页面显示:

图13:加载代码输出两条已记录指令,第二条仍保留配方引用

点击截图可放大查看,原始分辨率图片见离线包。

env/teach/codeGenerate 中负责输出的是:

widgetFunc["systemParamToFile",1551,0,"/env/teach/doc/program.nc"]

它顺序写出 #1551.item[...] 中非空的代码文字。它不重新运行每条教导生成脚本,不包含 .itemtitle[...] 的编辑资料,也不会把当前配方值改写成固定数字。

因此,日常完整操作顺序应是:

  1. 编辑指令,按“生成代码行”写入或更新当前记录。
  2. 检查程序表,必要时插入、复制、粘贴或删除。
  3. 保存 .program;配方有改动时另行保存 .formula。
  4. 确认当前程序与配方匹配,再按“加载代码”。

如果加载以后又修改记录,应重新加载代码;保存 .program 不会自动更新已经显示的 program.nc。若只改变被引用的配方值而没有改变代码,引用行的文字可以保持不变,但仍要在加工前确认当前配方。

“加载代码”负责输出和显示文件,不等于启动加工。也不要指望从普通 .nc 文件自动恢复这里的全部教导编辑资料;要继续通过原教导页面编辑,应保留 .program,使用配方时同时保留相应 .formula。

11.配方表里的复制、粘贴有什么不同

配方表的两个按钮运行 env/teach/formulacopy 和 env/teach/formulapaste。

复制脚本为:

#1550.permission=#1550

这里用 .permission 暂存来源下标,是这个功能对字段的具体用法;不能仅看字段名称就把它解释成一次用户权限修改。

粘贴脚本为:

IF#1550.permission>=#1550.itemnumGOTO1
IF#1550>=#1550.itemnumGOTO1
#1550.item[#1550]=#1550.item[#1550.permission]
#1550.itemtitle[#1550]=#1550.itemtitle[#1550.permission]
N1

它只复制配方值和名称,不复制教导指令,也不会自动扩大配方数量。需要更多位置时,先通过数量输入准备好对应项。

例如,把第1项复制到第2项,会把第2项的名称和值一起改成“延时时间”和2.5,原“备用延时”和0.75被覆盖。程序中已有的 [1] 引用仍指向第2项,但读到的内容变了。因此不能把配方粘贴当作只复制名称的操作。

配方复制同样保存来源位置。来源修改后再粘贴,得到的是修改后的值;载入另一份配方后,应重新选择来源并复制。

12.从这个功能学会怎样组织可编辑资料

教导功能让操作者先输入、再生成记录,最后决定保存资料还是输出NC。读懂这一层,就能理解为什么“右侧已经改了”“表里已经有了”“文件已经保存了”和“加工文件已经更新了”是不同的状态。

遇到的现象 应检查什么
插入后是空行 插入只腾出位置,还要生成或粘贴
粘贴覆盖了原指令 目标已有记录;需要保留原记录时应先插入
粘贴得到的不是刚才复制时的值 复制保存的是来源下标,来源内容或位置可能已改变
保存再打开,右侧修改没有回来 修改后是否先按“生成代码行”
新建后配方仍然存在 新建只清空教导记录,配方单独管理
打开程序后延时数值不符合预期 是否另行载入了匹配配方,引用下标是否对应
取消打开后修改消失 检查旧路径被重新读取,或当前记录被重新回读的情况
保存了程序,程序页面仍显示旧代码 保存资料之后是否重新“加载代码”
只有NC,无法恢复原来的参数选择 NC只保留代码,应使用保存的program资料继续教导编辑

在自己的组态中组织类似功能时,可以沿用这几个思路:把正在输入的参数与已确认记录分开;为每条记录同时保留代码和回读资料;移动、删除和复制时让相关资料保持对应;把可编辑文件与供加工使用的代码文件分开管理。

对照文件集中在 env/teach/teach.ui、insnodeonly、copy、paste、delnode、newfile、savefile、openfile、saveformula、openformula、formulacopy、formulapaste、parsenode 和 codeGenerate。本章的原脚本用于解释现有功能,不需要另外建立同名文件。

到这里,教导的参数输入、记录、配方、文件保存与NC输出已经连在一起。输出后的执行过程可回看加工运行篇。后续进入现有加工向导,学习怎样根据尺寸参数生成完整刀路。

上一课:配方引用 · 阅读目录

上一篇:教导中的配方参数怎样被程序引用

下一篇:没有了!

Copyright © 2018-2024 赛科(天津)智能科技有限公司 All Rights Reserved.

在线咨询