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

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

二次开发手册

直线与空间圆弧:坐标怎样采集、记录和恢复

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

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

阅读目录 · English

上一课讲了教导表格怎样创建输入框、下拉框和格内按钮。这一课继续看原有“直线”和“空间圆弧”:按一下按钮怎样读入坐标,三个点怎样放在一张表中,生成的记录又怎样恢复为可修改的参数。

本篇仍使用标准组态已有页面。先看操作结果,再对照 env/teach 中的 UI 属性和脚本;没有增加教导项目。

English edition ·

1.找到本课的两个入口

从顶部“教导”进入,在右侧项目区最下面选择“直线”或“空间圆弧”。“直线”与前一课的“直线运动指令”是两个不同入口,对应不同参数页和脚本。

图1:原教导页面,右侧底部已选中直线;左侧程序表还是空的

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

总览只用于找到位置。后面的表格、输入项和生成结果均采用两倍像素密度的原生局部图;浏览器版还可以点击放大。

页面上的名称 项目号 #1500 本项目工作参数 参数页 生成脚本
直线 15 #1531 env/teach/ui/teach_16.ui env/teach/custom/line
空间圆弧 16 #1533 env/teach/ui/teach_17.ui env/teach/custom/spacearc

这里“工作参数”就是右侧当前正在填写的那组值。标准项目表保存了 #1500.item[15]=1531、#1500.item[16]=1533。选择项目后,codeselect 通过 teachFrame16 或 teachFrame17 装入原页面;页面装入机制见教导上篇。

截图采用标准界面。坐标、文件名和参数数值为讲解示例,请以实际配置为准。

2.先看直线:读到一个点,再生成一条记录

选择“直线”,本例依次完成:

  1. 将“采点模式”选为“工件坐标”。
  2. 勾选“进给速度”,输入 600,按回车。
  3. 以示例坐标 X=10、Y=20、Z=30、A/B/C=0 的坐标后,点击表格第一列的“终点”。
  4. 检查右侧读到的数值,然后点击底部“生成代码行”。

图2:点击终点后,一次读入六轴坐标

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

图3:直线页的原有进给速度与采点模式,本例为600和工件坐标

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

“终点”按钮只读入当前位置。按完它以后,左侧仍没有新记录;直到点击“生成代码行”,左侧才出现下面这一行,并选中下一个空位置。

图4:生成直线记录后,第1项有代码,第2项为空且处于选中状态

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

本例实际生成的完整文字为:

G01X10.000Y20.000Z30.000A0.000B0.000C0.000F600

如果只是想在离线副本中理解参数和生成过程,可以直接在原坐标格内填写这些值并按回车。这样验证的是输入和生成;“终点”按钮读取什么,仍要看下一节的坐标来源。

3.表格里的“终点”,怎样变成采点按钮

打开 teach_16.ui,找到 codeParamTable,查看 accessibleDescription。第一列的完整定义是:

-column:
     -T10(#1531itemdesc0)
     -D
     -A: (clickedEvent:/env/teach/custom/recordLinePoint[0])

-T10 把整个格子创建为按钮,文字读取 #1531.itemdesc[0],中文显示“终点”。这与上一课“输入框里面附带一个小位置按钮”的写法不同。clickedEvent 指定按钮动作,进入原脚本 custom/recordLinePoint。

该脚本完整内容如下:

IF#1531.item[7]==0GOTO1
GOTO2
N1
#1531.item[0]=#300.item[36]
#1531.item[1]=#300.item[37]
#1531.item[2]=#300.item[38]
#1531.item[3]=#300.item[39]
#1531.item[4]=#300.item[40]
#1531.item[5]=#300.item[41]
GOTO3
N2
#1531.item[0]=#300.item[42]
#1531.item[1]=#300.item[43]
#1531.item[2]=#300.item[44]
#1531.item[3]=#300.item[45]
#1531.item[4]=#300.item[46]
#1531.item[5]=#300.item[47]
N3

按宏程序的顺序读即可:先看模式,再跳到对应分支,把六个坐标依次赋给六个工作项。脚本中没有写入 #1551 教导记录,也没有发出定位或加工指令。

坐标格绑定这些工作项并带有 -D,所以脚本赋值后,原输入格会更新。例如 X 格使用 -T(#1531item%0);本行基准编号是 0,因此它显示和编辑 #1531.item[0]。后面会用三行圆弧表进一步说明 %0。

4.采点模式和进给速度,各自控制什么

项目 直线页 空间圆弧页 本例含义
采点模式 #1531.item[7] #1533.item[19] 0 为“工件坐标”,1 为“RTCP坐标”
进给速度数值 #1531.item[6] #1533.item[18] 本例分别输入 600、500
是否输出速度 #1531.itemversion[6] #1533.itemversion[18] 勾选为 1;生成脚本据此决定是否加 F 字

直线页三个原绑定分别为:

-T(#1531item7)
-T(#1531item6)
-T(#1531itemversion6<<#1531itemtitle6)

最后一条用于原 QCheckBox:“是否勾选”写入 .itemversion[6],旁边的名称来自 .itemtitle[6];数值 600 则在 .item[6] 中。同一项的不同字段承担不同工作。

两种采点模式读取的坐标分别是:

模式 读取范围 本地核对时设置的六轴值
工件坐标 #300.item[36]~[41] 10,20,30,0,0,0
RTCP坐标 #300.item[42]~[47] 110,120,130,1,2,3

同一个“终点”按钮在切换模式后再次点击,确实读入第二组数值。随后选回已保存的直线记录,原来的 10,20,30,0,0,0、速度 600 和模式 0 会恢复。

页面本来就写着:“提示:切换采点模式后,请重新进行点位教导”。原因很直接:切换下拉框只改变下一次采点从哪里读取,没有把已经采下的坐标换算一遍。 这些采点脚本也不负责开启或关闭 RTCP。

这两组坐标是上位机的坐标显示数据。实际机床使用还依赖相应坐标与 RTCP 设置;本文确认读取分支,不把离线读值当作真实五轴位置验证。

5.“生成代码行”怎样保存这一个点

底部按钮进入 env/teach/addcode。脚本先确定当前项目对应的参数组:

#11=#1500.item[#1500]
#12=#1500.item[#1500]+1

选择“直线”时,#11=1531。后续 custom/line 中的 ^11.item[0] 就访问这组参数的第 0 项,而不是普通参数 #11 的第 0 项。

custom/line 做了三件事:把本记录类型记为 16;保存坐标、速度勾选、速度和采点模式;按当前轴条件组装代码。以 X 和 F 为例,原判断是:

IF#912.itemmax[0]==1THEN#1567.item[0]=#1567.itemtitle[0]+^11.item[0]
IF^11.itemversion[6]==1THEN#1567.item[6]=#1567.itemtitle[6]+INT[^11.item[6]]

当前标准配置中,对应前缀是 X 和 F。本例六轴条件均为 1,速度已勾选,所以得到图4的完整代码。未勾选时,脚本不在这条记录里添加 F 字;不能把“不输出 F”理解为“把进给速度设为零”。本例中已勾选速度。

#1551 当前记录的字段 直线记录实际保存的内容
.itemversion[下标] 类型号 16,供选回时判断
.item[下标] 完整 G01...F600 代码文字
.itemdesc[下标] 左侧程序表显示的文字;直线记录与代码文字相同
.itemtitle[下标] 用 @ 隔开的编辑资料,供重新装回参数页

直线编辑资料一共九段,顺序为“X、Y、Z、A、B、C、速度是否勾选、速度数值、采点模式”。本次实际字符串是:

10.0000@20.000@30.000@0.000@0.000@0.000@1@600@0

第一段的位数与后面不同,是本次原脚本拼接的结果;不要为了“统一格式”另改记录。阅读时重点对应九段的顺序。完整生成脚本可对照原直线生成脚本。

6.空间圆弧:三个按钮分别读取三组点

继续使用下一个空程序位置,选择“空间圆弧”,将“采点模式”设为“工件坐标”,勾选“进给速度”并输入 500。本次分别提供三组离线坐标,再依次点击“起点”“中间点”“终点”:

图5:三个原采点按钮分别读取起点、中间点和终点

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

原按钮 调用的脚本,均位于 env/teach/custom/ 写入 #1533.item[...] 本例读到的值
起点 recordArcSPoint [0]~[5] 10,20,30,0,0,0
中间点 recordArcCPoint [6]~[11] 20,30,30,1,2,3
终点 recordArcEPoint [12]~[17] 30,20,30,0,0,0

三个脚本都先检查 #1533.item[19],再选择 #300.item[36]~[41] 或 [42]~[47]。它们的区别主要是写到哪六项。点击其中一个按钮,会重读这一整组,不只是当前选中的单个轴。

“中间点”一行的 A/B/C 没有输入框,但脚本确实把本次的 1,2,3 存入 [9]~[11],生成记录时也保存这三个值。后面的圆弧代码组装只使用中间点 X/Y/Z。不显示、未保存、未输出是三种不同情况。

这三个页面按钮不会自动切换 #1500.channel,也不会自动生成记录。本例三个点都采完后,左侧仍只有此前的直线;还需按“生成代码行”。不要依据按钮颜色判断已经采齐,应该检查各行数值。

7.一张表怎样放进三组坐标

teach_17.ui 中仍然只有一张 codeParamTable。它的属性先写一个表头段,再写三个行段,每个行段只创建一行。

行段 -rows -serial -interval 第一个坐标 #1533item%0 实际访问
起点 1 0 6 #1533.item[0]
中间点 1 6 6 #1533.item[6]
终点 1 12 6 #1533.item[12]

下面是原“中间点”行段,完整保留了按钮、三个坐标输入和三个空格:

{
-filter:
-rows:1
-serial:6
-interval:6
-column:
     -T10(#1533itemtitle%0)
     -C1(#1500channel==1)
     -C0(1)
     -A: (clickedEvent:/env/teach/custom/recordArcCPoint[0])
-column:
     -T(#1533item%0)
     -D
     -C(#319.item3==1)
     -R0
-column:
     -T(#1533item%1)
     -D
     -C(#319.item3==1)
     -R0
-column:
     -T(#1533item%2)
     -D
     -C(#319.item3==1)
     -R0
-column:
     -T("")
-column:
     -T("")
-column:
     -T("")
}

按以下次序读:-rows:1 表示本段一行;-serial:6 使本行基准编号为 6;%0、%1、%2 分别表示“基准加0、加1、加2”,因此访问 [6]、[7]、[8]。按钮标题 #1533itemtitle%0 也使用这个基准,所以显示 [6] 的标题“中间点”。末尾三个 -T("") 创建空白文字格,保留与 A/B/C 表头对齐的位置。

不要把 %0 看成永远访问第 0 项,也不要把它与 %% 混淆。对某个行段从零计数的第 j 次重复:

写法 代入规则
%% 本段 serial+j
%0 本段 serial+j×interval+0
%1 本段 serial+j×interval+1

本页每段只有一行,所以 j=0;三个不同的起始编号来自 -serial:0/6/12,不是单靠 -interval:6 自动生成三组。完整属性见原空间圆弧表。

坐标输入仍使用上一课讲过的 -C(#319.item3==1) 与 -R0:当该启动标志为1时,按源码设为只读。这不是对第一列按钮的统一禁用,本例没有运行这个加工状态分支。

8.轴选择怎样影响表格列和生成代码

前面的轴配置篇已经讲过:主界面轴菜单改变 #912.itemmax[0..5]。这里继续看空间圆弧怎样使用同一组标记。在练习副本中对照下面的设置,实际机床的轴选择应与机台配置保持一致。

8.1 表头读取同一个轴标记

先看全部轴选用时的原“空间圆弧”表格,C列正常显示:

图6:空间圆弧显示C列;本组对比采用起点C为10、终点C为40

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

在主界面的轴菜单中取消C轴,再回到同一张表:

图7:取消C轴后,表格隐藏C列;已有XYZAB点值保留

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

env/teach/ui/teach_17.ui 中,codeParamTable 的C列表头使用:

-header:(#1015_description),,,#912itemmax5

标题读取C轴名称,宽度和调整方式留空,最后的条件读取C轴标记。X~C六列依次检查 #912.itemmax[0]~[5],表头段的 -attr:-D 让表格参加动态更新。上一课的 -filter: 用于隐藏行,这里则由表头条件隐藏整列。

菜单修改一个共用设置,表格直接读取它,不必另外定义一份轴选择参数。隐藏C列不会重新编号参数下标,也不会删除 #1533 中的点值;中间点A/B/C仍按前面讲过的三行分组规则处理。

8.2 隐藏以后,新代码和旧记录有什么区别

env/teach/custom/spacearc 生成轴字时也读同一个标记,例如起点和终点C:

IF#912.itemmax[5]==1THEN#1568.item[5]=#1568.itemtitle[5]+^11.item[5]
IF#912.itemmax[5]==1THEN#1568.item[14]=#1568.itemtitle[14]+^11.item[17]

脚本先清空用于拼接的文字,再按已选用的轴加入各段内容。用图6的点值和进给速度1000,先在全部轴选用时生成一条记录,再取消C轴,用相同点值生成下一条,就能看出区别。

全部轴选用时,第一条记录为:

G01X10.000Y20.000Z30.000A0.000B0.000C10.000F1000
G2.9X30.000Y20.000Z30.000A0.000B0.000C40.000I20.000J30.000K30.000

取消C后新生成的记录为:

G01X10.000Y20.000Z30.000A0.000B0.000F1000
G2.9X30.000Y20.000Z30.000A0.000B0.000I20.000J30.000K30.000

区别在于第二条没有C字。第一条已经写进 #1551 的代码仍包含C字,取消勾选并没有修改它。 原生成脚本末尾会把记录位置向后移一项,可以直接在新的位置生成第二条,无需再按“下一行”。

同样,再次勾选C会恢复行和列,但不会自动给第二条旧记录补上C字。要更新某条记录,应选回它、核查参数,再执行原“生成代码行”。不要以为只隐藏列就能让先前的程序失去该轴运动。

对照完成后,在同一个轴菜单中重新勾选C,坐标行和教导列都会恢复。以上代码用于说明轴字的选择,未包含完整机型设置和编程模式。

9.一条空间圆弧记录,为什么输出两行代码

用图5的三组点,在六轴条件均为 1 时点击“生成代码行”,左侧得到两条教导记录:

图8:第1条是直线,第2条显示G2.9圆弧;第3个位置仍为空

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

第2条显示 G2.9...,但这只是 .itemdesc[1]。它的 .item[1] 实际包含下面两行:

G01X10.000Y20.000Z30.000A0.000B0.000C0.000F500
G2.9X30.000Y20.000Z30.000A0.000B0.000C0.000I20.000J30.000K30.000

对照原 custom/spacearc 和当前前缀配置:第一行用起点六轴值及速度组装 G01;第二行用终点六轴值组装 X/Y/Z/A/B/C,用中间点 X/Y/Z 组装 I/J/K。本例是把中间点的 20,30,30 直接写成 I20.000J30.000K30.000,没有在这个脚本里计算圆心或减去起点。

这是本系统该教导项目实际生成的 G2.9 写法,不能套用其他系统普通 G02/G03 的 I/J/K 习惯。本篇核对了生成文字,未执行圆弧轨迹。

圆弧记录的类型号为 17,编辑资料仍写在 .itemtitle,但变为21段:

从0计数的保存位置 内容 回读到哪里
0~5 起点六轴值 #1533.item[0]~[5]
6~11 中间点六轴值 #1533.item[6]~[11]
12~17 终点六轴值 #1533.item[12]~[17]
18 是否输出速度 #1533.itemversion[18]
19 速度数值 #1533.item[18]
20 采点模式 #1533.item[19]

注意最后三段的保存位置与工作项下标不是一一相同:一个速度工作项保存了“数值”和“是否勾选”两个字段。扩展这种设计时,生成和回读必须使用同一个顺序。完整脚本见原空间圆弧生成脚本。

10.改了终点,再选回记录,为什么恢复成旧值

生成完圆弧后,当前程序位置已前进到空白的第3项。此时仅把右侧终点 X 改为 99 并按回车,先不按“生成代码行”:

图9:终点X已输入99,但这次没有生成记录

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

接着单击左侧第1条直线,再单击第2条圆弧。右侧恢复为:

图10:选回第2条圆弧后,终点X从99恢复为已记录的30

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

这不是输入失败。回车已经把 #1533.item[12] 改成 99,但圆弧记录的编辑资料仍保存 30。选回记录时,refreshnode1 → parsenode 按 .itemversion=17 进入 N17,把保存的21段重新装回工作参数,并选择“空间圆弧”页面。速度 500、速度勾选和模式 0 也随之恢复。

parsenode 读取最前两段的原写法是:

#11=#1500.item[16]
#12=#1500.item[16]+1
#10.unit=#1551.itemtitle[#1551]

^11.item[0]=#10.unit*"@"
#10.unit=#10.unit-"@"

^11.item[1]=#10.unit*"@"
#10.unit=#10.unit-"@"

这里 *"@" 取第一个分隔符之前的内容,-"@" 去掉已读的一段及分隔符,让下一次读取继续向后。这是本系统的字符串操作;不要当作数值乘法或减法。

如果要修改已有圆弧,应先选回它,修改参数并回车,再按“生成代码行”写回当前记录。不要停在新空位置就以为在修改上一条。反复点击同一选中行还可能进入原菜单分支;本次采用“先选其他行,再选目标行”,清楚观察回读过程。

11.加载代码时,输出的是已经记录的内容

点击原“加载代码”。codeGenerate 的第一句是:

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

它从 #1551 的代码文字输出文件,随后设置文件显示参数,切到程序页。它没有重新读取右侧三个点,也没有重新执行每条记录的生成脚本。

图11:原代码编辑区显示program.nc,两个教导记录在这里显示为三行代码

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

与图8对照:第1条直线输出一行,第2条空间圆弧输出两行,所以编辑区有三行非空代码。终点 X 仍为 30.000,没有未经生成而提交的 99。

需要以后继续修改教导项目时,仍应使用教导“保存”保留 .program 编辑资料;加载出来的 .nc 用于代码输出,不能靠它恢复本例全部21段参数。两种文件的区别见教导上篇。

12.从这个原有功能中,学会怎样安排自己的设计

以后设计类似的采点项目,可以沿用本例的工作顺序逐项核对:

  1. 先列出要保存的值。 每个点占哪几项,速度数值和勾选放在哪里,模式放在哪里,先写清楚。
  2. 把页面绑定到这些值。 用行段安排每组点,用 %0 等相对编号减少重复;需要按钮的格子使用 -T10。
  3. 让采点动作只做明确的读值。 先判断模式,再把指定坐标组写入指定工作项。采点与移动到点应有清楚的入口区别。
  4. 把生成和回读一起设计。 记录类型、代码文字、列表显示、编辑资料各有用途;@ 字段的顺序要成对核查。
  5. 通过“修改后选回”检查是否完整。 除坐标外,还要检查速度勾选、速度数值和模式能否恢复,再核对输出文件。
常见误解 本例实际行为
采点按钮按完就增加一条程序 三个直接采点脚本只改工作参数,仍需“生成代码行”
%0 永远是参数第0项 它加上本行基准;三行分别访问0、6、12
切换采点模式会转换旧坐标 只改读取选择,须重新采点
中间点A/B/C空白表示没存 仍读取并保存;本项目生成代码时不用这三个值
左侧一条记录等于一行NC 圆弧记录在代码文字中包含两行
隐藏轴列会修改以前的记录 显示条件不改旧代码;新生成还要看脚本条件
输入回车后,加载代码自然就是新值 回车改工作参数;先生成记录,加载才输出该记录

本篇三个采点按钮读取位置并写入工作参数;生成记录与读取位置分开进行。env/teach/custom/recordkey 是另一份按阶段处理采点和生成的脚本,不要用它代替这里三个按钮的调用关系。custom/local、custom/run 涉及NC定位或运行,应分别按对应动作的条件使用。

当前生成脚本没有在本例代码前自动添加完整的编程模式、RTCP设置和几何检查。将生成结果用于实际加工时,需要补齐适合机型与工艺的程序准备。下一课回到延时指令,比较固定数值与配方引用,再学习怎样保存程序及配方。

上一课:教导表格 · 下一课:配方引用 · 阅读目录

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

在线咨询