上一课讲了教导表格怎样创建输入框、下拉框和格内按钮。这一课继续看原有“直线”和“空间圆弧”:按一下按钮怎样读入坐标,三个点怎样放在一张表中,生成的记录又怎样恢复为可修改的参数。
本篇仍使用标准组态已有页面。先看操作结果,再对照 env/teach 中的 UI 属性和脚本;没有增加教导项目。
从顶部“教导”进入,在右侧项目区最下面选择“直线”或“空间圆弧”。“直线”与前一课的“直线运动指令”是两个不同入口,对应不同参数页和脚本。
点击截图可查看原图。
总览只用于找到位置。后面的表格、输入项和生成结果均采用两倍像素密度的原生局部图;浏览器版还可以点击放大。
| 页面上的名称 | 项目号 #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 装入原页面;页面装入机制见教导上篇。
截图采用标准界面。坐标、文件名和参数数值为讲解示例,请以实际配置为准。
选择“直线”,本例依次完成:
600,按回车。10、Y=20、Z=30、A/B/C=0 的坐标后,点击表格第一列的“终点”。点击截图可查看原图。
点击截图可查看原图。
“终点”按钮只读入当前位置。按完它以后,左侧仍没有新记录;直到点击“生成代码行”,左侧才出现下面这一行,并选中下一个空位置。
点击截图可查看原图。
本例实际生成的完整文字为:
G01X10.000Y20.000Z30.000A0.000B0.000C0.000F600
如果只是想在离线副本中理解参数和生成过程,可以直接在原坐标格内填写这些值并按回车。这样验证的是输入和生成;“终点”按钮读取什么,仍要看下一节的坐标来源。
打开 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。
| 项目 | 直线页 | 空间圆弧页 | 本例含义 |
|---|---|---|---|
| 采点模式 | #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 设置;本文确认读取分支,不把离线读值当作真实五轴位置验证。
底部按钮进入 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
第一段的位数与后面不同,是本次原脚本拼接的结果;不要为了“统一格式”另改记录。阅读时重点对应九段的顺序。完整生成脚本可对照原直线生成脚本。
继续使用下一个空程序位置,选择“空间圆弧”,将“采点模式”设为“工件坐标”,勾选“进给速度”并输入 500。本次分别提供三组离线坐标,再依次点击“起点”“中间点”“终点”:
点击截图可查看原图。
| 原按钮 | 调用的脚本,均位于 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,也不会自动生成记录。本例三个点都采完后,左侧仍只有此前的直线;还需按“生成代码行”。不要依据按钮颜色判断已经采齐,应该检查各行数值。
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时,按源码设为只读。这不是对第一列按钮的统一禁用,本例没有运行这个加工状态分支。
前面的轴配置篇已经讲过:主界面轴菜单改变 #912.itemmax[0..5]。这里继续看空间圆弧怎样使用同一组标记。在练习副本中对照下面的设置,实际机床的轴选择应与机台配置保持一致。
先看全部轴选用时的原“空间圆弧”表格,C列正常显示:
点击截图可查看原图。
在主界面的轴菜单中取消C轴,再回到同一张表:
点击截图可查看原图。
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仍按前面讲过的三行分组规则处理。
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,坐标行和教导列都会恢复。以上代码用于说明轴字的选择,未包含完整机型设置和编程模式。
用图5的三组点,在六轴条件均为 1 时点击“生成代码行”,左侧得到两条教导记录:
点击截图可查看原图。
第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] |
注意最后三段的保存位置与工作项下标不是一一相同:一个速度工作项保存了“数值”和“是否勾选”两个字段。扩展这种设计时,生成和回读必须使用同一个顺序。完整脚本见原空间圆弧生成脚本。
生成完圆弧后,当前程序位置已前进到空白的第3项。此时仅把右侧终点 X 改为 99 并按回车,先不按“生成代码行”:
点击截图可查看原图。
接着单击左侧第1条直线,再单击第2条圆弧。右侧恢复为:
点击截图可查看原图。
这不是输入失败。回车已经把 #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-"@"
这里 *"@" 取第一个分隔符之前的内容,-"@" 去掉已读的一段及分隔符,让下一次读取继续向后。这是本系统的字符串操作;不要当作数值乘法或减法。
如果要修改已有圆弧,应先选回它,修改参数并回车,再按“生成代码行”写回当前记录。不要停在新空位置就以为在修改上一条。反复点击同一选中行还可能进入原菜单分支;本次采用“先选其他行,再选目标行”,清楚观察回读过程。
点击原“加载代码”。codeGenerate 的第一句是:
widgetFunc["systemParamToFile",1551,0,"/env/teach/doc/program.nc"]
它从 #1551 的代码文字输出文件,随后设置文件显示参数,切到程序页。它没有重新读取右侧三个点,也没有重新执行每条记录的生成脚本。
点击截图可查看原图。
与图8对照:第1条直线输出一行,第2条空间圆弧输出两行,所以编辑区有三行非空代码。终点 X 仍为 30.000,没有未经生成而提交的 99。
需要以后继续修改教导项目时,仍应使用教导“保存”保留 .program 编辑资料;加载出来的 .nc 用于代码输出,不能靠它恢复本例全部21段参数。两种文件的区别见教导上篇。
以后设计类似的采点项目,可以沿用本例的工作顺序逐项核对:
%0 等相对编号减少重复;需要按钮的格子使用 -T10。@ 字段的顺序要成对核查。| 常见误解 | 本例实际行为 |
|---|---|
| 采点按钮按完就增加一条程序 | 三个直接采点脚本只改工作参数,仍需“生成代码行” |
%0 永远是参数第0项 |
它加上本行基准;三行分别访问0、6、12 |
| 切换采点模式会转换旧坐标 | 只改读取选择,须重新采点 |
| 中间点A/B/C空白表示没存 | 仍读取并保存;本项目生成代码时不用这三个值 |
| 左侧一条记录等于一行NC | 圆弧记录在代码文字中包含两行 |
| 隐藏轴列会修改以前的记录 | 显示条件不改旧代码;新生成还要看脚本条件 |
| 输入回车后,加载代码自然就是新值 | 回车改工作参数;先生成记录,加载才输出该记录 |
本篇三个采点按钮读取位置并写入工作参数;生成记录与读取位置分开进行。env/teach/custom/recordkey 是另一份按阶段处理采点和生成的脚本,不要用它代替这里三个按钮的调用关系。custom/local、custom/run 涉及NC定位或运行,应分别按对应动作的条件使用。
当前生成脚本没有在本例代码前自动添加完整的编程模式、RTCP设置和几何检查。将生成结果用于实际加工时,需要补齐适合机型与工艺的程序准备。下一课回到延时指令,比较固定数值与配方引用,再学习怎样保存程序及配方。