KUI控件动作

简介

控件动作属于控件的action属性,响应按键或控件时执行的动作,其中:输入框textbox、列表选择框combobox、示教teach、开关switch、软按键menu等控件支持部分动作。

动作分类:

1.仅menu支持示教相关菜单
2.触发动作时支持同时触发多个动作,其顺序按动作的优先级顺序执行。

示教相关菜单应与teach控件联合使用。

teach控件需在页面中定义,并将示教菜单menu写在与teach控件的同一页面下。在系统上将光标移到teach控件上时,菜单显示深色(可以响应按键),按下菜单时执行menu控件绑定的示教动作。

当菜单里没有设置组时,示教当前光标所在控件的组 (v3.2新增) 示教菜单或示教按钮里设置single可以只示教当前光标所在单个控件 (v3.7新增) 支持自定义弹窗字符串内容 (v5.3新增)

示教绝对

该功能将指定轴的绝对坐标示教到指定变量中,结合teachmenu控件一起使用。teach控件第一个参数为指定的变量地址,teach控件第二个参数为指定的轴名称或轴号coor1(第1轴,默认通道1)。teach控件绑定示教绝对动作。

单轴示教时在参数位置直接写入示教绝对,当光标停留在示教坐标数据的teach控件上时,菜单显示深色(可以响应按键),按下菜单时执行示教绝对坐标的动作。 示教轴组时写入示教绝对(group=x),x为相应的轴组号。

teach("#530", "x", (1, 1, 30, 100), group=2)
teach("#531", "y", (40, 1, 30, 100), group=2)
teach("#532", "z", (80, 1, 30, 100), group=2)
teach("#503", "X", (120, 1, 30, 100), group=1)
teach("#504", "Y", (160, 1, 30, 100), group=1)
teach("#533", "Z", (200, 1, 30, 100))
teach("#534", "coor1", (240, 1, 30, 100))   # 其中coor1为通道1内的第1轴,coor1$2为通道2内的第1轴

menu("单轴示教", 示教绝对(single=True)) #仅示教光标所在的单个控件,无论控件是否在组中
menu("示教组2", 示教绝对(group=2)) #光标停留在4行的任意1~3列对应的控件上时,此菜单可以响应按键。键按下时同时将#530~#532赋值为X/Y/Z轴的绝对坐标值
menu("示教组1", 示教绝对(group=1))  # 示教组1内的所有控件
menu("示教", 示教绝对)  #光标停留在以上任意一个控件上时,此菜单可以响应按键。键按下时执行相应控件的示教绝对坐标动作
menu("示教绝对", 示教绝对) #当光标在#530位置时示教组2的所有控件,当光标在#503位置时视教组1的所有控件
menu("示教绝对", 示教绝对(tip_str="这是示教绝对")) #示教时弹窗内容显示“这是示教绝对”

示教机床

单轴示教时在参数位置直接写入示教机床,当光标停留在示教坐标数据的teach控件上时,菜单显示深色(可以响应按键),按下菜单时执行示教机床坐标的动作。示教轴组时写入示教机床(group=x),x为相应的轴组号。

teach("#530", "X", (1, 1, 30, 100), group=2)
teach("#531", "Y", (40, 1, 30, 100))
teach("#533", "Z", (80, 1, 30, 100), group=2) 
teach("#534", "coor1", (120, 1, 30, 100)) 

menu("示教组2", 示教机床(group=2)) #光标停留在1/3行对应的控件上时,此菜单可以响应按键。键按下时同时将#530和#533赋值为X/Z轴的机床坐标值
menu("示教", 示教机床)  #光标停留在以上任意一个控件上时,此菜单可以响应按键。键按下时执行相应控件的示教机床坐标动作
menu("示教机床", 示教机床(tip_str="这是示教机床")) #示教时弹窗内容显示“这是示教机床”

示教表达式

示教单个表达式时直接写入示教表达式,当光标停留在示教表达式的teach控件上时,菜单显示深色(可以响应按键),按下菜单时执行示教表达式的动作。示教表达式组时写入示教表达式(group=x),x为相应的表达式组号。

teach("#530", "F156[s16]/100", (1, 1, 30, 100), group=2)
teach("#531", "F1805[u32]/1000", (40, 1, 30, 100))
teach("#533", "P414", (80, 1, 30, 100), group=2) 

menu("示教组2", 示教表达式(group=2)) #光标停留在1/3行对应的控件上时,此菜单可以响应按键。键按下时同时将#530和#533赋值为对应表达式的计算结果
menu("示教", 示教表达式)  #光标停留在以上任意一个控件上时,此菜单可以响应按键。键按下时计算表达式的值赋给宏变量
menu("示教表达式", 示教表达式(tip_str="这是示教表达式")) #示教时弹窗内容显示“这是示教表达式”

测量、加输入、部分表达式

在以下3个菜单中定义2个变量$m和$v。$m为当前捕获光标的示教控件的编辑值,$m与$v的关系由菜单的类型决定。$m要用在teach控件的第二个参数中组成表达式,以实现通过编辑值改变控件值的目的。由于需要使用编辑值所以菜单要在控件有编辑值时才能响应按键。下图中的左侧图片显示data控件捕获光标,teach控件未捕获光标时的状态,此时底部的"测量"菜单不可用;右侧图片显示teach控件捕获光标并手动输入编辑值10的状态,此时$m的值为编辑值10,底部的"测量"菜单可以响应按键操作。 3种菜单的动作需和teach("#530", “#530 + $m”, (1, 1, 30, 100))的teach控件一起使用,第二个参数的形式不仅限于此,下面以这种形式为例讲解菜单的用法。

光标在非示教位置 光标在示教位置
menuTeach控件使用1 menuTeach控件使用2
- 测量

在测量菜单中$m= -$v,按下菜单键时将当前控件值减去控件的编辑值作为控件的新值,类似测量功能。该参数非字符串类型,直接写作测量

$m可以理解为当前控件的编辑值,如示例:即时

teach("#530", "#530 + $m", (1, 1, 30, 100))

menu("测量", 测量) # 菜单名称为"测量",当光标停留在上面的teach控件上,并输入了编辑值10时此菜单可以响应按键。键按下时相当于执行#530=#530-10
menu("测量", 测量(tip_str="这是测量")) #示教时弹窗内容显示“这是测量”

测量中的$m为编辑值的负值。例如上方示例:当teach控件的编辑值为10时,按下测量菜单时相当于执行#530=#530-10

- 加输入

在加输入菜单中$m= $v,对于上面的形式按下菜单键时将当前控件值加上控件的编辑值作为控件的新值,类似 “+输入” 功能。该参数非字符串类型,直接写作加输入

teach("#530", "#530 + $m", (1, 1, 30, 100))

menu("+输入", 加输入) #菜单名称为"+输入",当光标停留在上面的teach控件上,并输入了编辑值10时此菜单可以响应按键。键按下时相当于执行#530=#530+10
menu("加输入", 加输入(tip_str="这是加输入")) #示教时弹窗内容显示“这是加输入”

加输入中的$m为编辑值的正值。例如上方示例:当teach控件的编辑值为10时,按下测量菜单时相当于执行#530=#530+10

- 部分表达式

在部分表达式中$m和$v的关系由表达式决定,$m=“表达式”,对于上面的形式按下菜单键时将当前控件值加上表达式计算结果值作为控件的新值。该参数非字符串类型,写作部分表达式("xxx"),括号内的表达式为字符串类型。

teach("#530", "#530 + $m", (1, 1, 30, 100))

menu("测试", 部分表达式("$v - 3")) #菜单名称为"测试",当光标停留在上面的teach控件上,并输入了编辑值10时此菜单可以响应按键。键按下时相当于执行#530=#530+10-3
menu("部分表达式", 部分表达式(tip_str="这是部分表达式")) #示教时弹窗内容显示“这是部分表达式”

部分表达式中的$m为编辑值的正值,$v为teach控件中第2位表达式整体。例如上方示例:当teach控件的编辑值为10时,按下测量菜单时相当于执行#530=#530+10-3,其中$m为编辑值10,$v为#530+$m,所以结果为#530=#530+10-3

表达式

参数形式为:表达式("xxx"),“xxx"是一个赋值表达式,如”#500=#501+1"。

menu("表达式", 表达式("#500=#501+1"))  #菜单名称为"表达式",键按下时执行赋值动作

2. 页面相关菜单

页面跳转

直接写入要跳转到的页面id,按菜单时会跳转到相应页面。此参数可以为字符串类型或数字,写作 "page1"1

with page(456, 800, id="page1"):
    # ······
	
with page(456, 800, id="page2"):
	# ······
    menu("切换page1", "page1") #菜单名称为"切换page1",键按下时切换到id="page1"的页面

页面选择

可以根据某一PLC参数的值跳转到相应页面。语法举例:页面选择("K100",{2: "page1", 4: "page2", 5: 3})。“页面选择"函数中第一个参数类型为字符串,第二个参数类型为字典,字典中以逗号分隔的被称为"键”-“值"对,冒号前面的为"键”,后面的为"值"。按此菜单时,将根据PLC参数的值跳转到以与之相等的"键"对应的值为id的页面。当K100(此处仅支持PLC参数)的值为2/4/5时分别跳转到id为 “page1”/“page2”/3 的页面。此时PLC参数类型为U8,页面最多不要超过256个。当PLC参数的值不对应任何id时将跳转到第一个id对应的页面。

with page(456, 800, id="page1"):
	# ······
	
with page(456, 800, id=2):
	# ······

with page(456, 800, id="page3"):
	# ······
	menu("页面选择", 页面选择("K100",{2: "page1", 4: 2})  #菜单名称为"页面选择",当K100(此处仅支持PLC参数)的值为2/4时分别跳转到id为 "page1"/2的页面

面板窗口

面板相关菜单需配合panel控件共同使用,示例详见panel章节。

语法格式:menu("打开面板", 显示面板("xxxx")),当使用者按下该按键时,将打开对应ID号的窗口,需配合panel控件使用。(V3.0新增)
例如:显示面板(“面板ID”),将以局部窗口形式打开ID为"面板ID1"的自定义面板

with page(456, 800, id="page1"):
	# ······

    menu("打开面板", 显示面板("panel1"))
	
with panel(300, 300, id="panel1"):
    label("这是一个自定义面板", (1, 1, 30, 300), 居中)

    menu("关闭面板", 关闭面板)  # 关闭面板动作需写在面板页面中。
- 关闭面板

语法格式:menu("关闭面板", 关闭面板),当使用者按下该按键时,会关闭当前的局部窗口,需配合panel控件使用。(V3.0新增)

当打开面板时无法响应其他按键,所以menu(“关闭面板”, 关闭面板)的关闭面板动作需写在面板页面中,用于关闭面板。

3. 坐标/信号类动作

工件坐标

切换到相应的工件坐标系。写作 工件坐标("G55")

工件坐标支持通道号 (V3.5新增)

menu("切换G55", 工件坐标("G55")) #菜单名称为"切换G55",键按下时执行切换到工件坐标系G55的操作
menu("坐标切换", action=工件坐标("G55", path="D20"))   #通道号为表达式"D20"

信号翻转

将相应地址的位信号翻转(在0/1之间转换),写作 信号翻转("F5231.1"),括号内为相应位参数的字符串,支持的数据与switch控件相同。

menu("翻转", 信号翻转("F5231.1")) #菜单名称为"翻转",键按下时将F5231.1翻转

按下时将相应数据位置为1,弹起时置为0。(V2.1开始支持)

  • 写作 信号脉冲("K1.1")括号内必须是位型参数的字符串,支持的参数有K/D/F区位型参数(F区为相应版本对应的F区可写范围)。
menu("信号脉冲", 信号脉冲("K1.1"))   ##按下该按钮时,K1.1设置为1,弹起该按钮时设置为0

定时脉冲

按下时经过设置时间后将相应数据位置为1,弹起时置为0 (V3.6开始支持)

  • 写作action=定时脉冲("K1.3",1000)第一参数表示PLC的位信号,第二个参数ms表示定时时间,单位为微秒,默认为500ms
menu("脉冲K1.2", action=定时脉冲("K1.2", 1000)) # 菜单设置定时脉冲任务

程序支持注释,注释单独一行或程序段后,不能放入程序号后 (V3.5开始支持)

生成程序

用户可以使用该功能生成指定程序号的程序,并写入指定通道。

  • file_path: 支持文件路径或者程序内容字符串
  • number: 生成的程序号,仅支持数字
  • precision: 生成程序时默认的浮点数精度,默认为3
  • is_file: 选择file_path是否为文件路径,默认为True
  • path: 选择在哪个通道下生成程序,默认为1
  • show_progress: 是否显示进度条,默认为True。此功能需在脚本中编入对应指令。
  • input_name: 是否可编辑生成的程序名,默认为False
menu("生成程序", action=生成程序('''G0 X100''', path=1, is_file=False, number="11"))  # 在通道1内生成一个程序号为11的程序,其程序内容为"G0 X100"

menu("生成程序", action=生成程序("程序文件.txt", path=2, is_file=True, number="12"))  # 在通道2内生成一个程序号为12的程序,其程序内容读取文件"程序文件.txt"

menu("生成程序", action=生成程序("程序文件.txt", precision=3, is_file=True, number="12"))  # 生成一个程序号为12的程序,生成程序时默认的浮点数精度为3,其程序内容读取文件"程序文件.txt"

menu("生成程序", action=生成程序('''G0 X100 Z100''', is_file=False, input_name=True))  # 生成的程序名需要用户输入

menu("生成程序", action=生成程序('''{{G0 
    IF #500>10 THEN
        X#500
    ENDIF 
    Z100}}''', is_file=False, input_name=True))  # 若#500>10会生成X指令程序,其中使用{{xxxx}}会将{{}}内的程序按照一行程序处理生成

menu("生成程序", action=生成程序('''//系统程序注释,会跟随内容生成
    ((程序内部注释,不会跟随内容生成))
    SET_PROGRESS_MIN_MAX[0, 100]    ((设置进度条进度最小最大值,[0,0]为无限进度条))
    SET_PROGRESS_CUR[0]             ((进度条为0))
    G0 X0
    SET_PROGRESS_CUR[20]            ((进度条为20))
    G0 X20
    SET_PROGRESS_CUR[50]            ((进度条为50))
    G0 X50
    SET_PROGRESS_CUR[100]           ((进度条为100))
    G0 X100''', is_file=False, show_progress=True))  # 跟随内容生成注释,并且在生成程序时显示进度条

例如:写作 生成程序("圆周钻孔.txt", 1),第一个参数为程序模板文件名称字符串(同一路径下直接写名称,不在同一路径下需要写全路径),第二个参数为生成的程 序号;生成程序时要打开程序开关,否则生成程序失败;在点击"生成程序"时程序模板文件中使用到的变量要有值,否则会报错。可见下方应用分析与举例

程序段模板

可以使用该功能在当前光标所在是位置后插入程序段内容。

  • string: 程序段内容字符串,写入需要插入程序段的内容
  • precision: 生成程序时默认的浮点数精度,默认为3
  • prog_name: 指令插入程序段的程序文件名,若文件不存在则自动创建。程序号和程序名称不可以同时指定
  • number: 指令插入程序段的程序号,若文件不存在则自动创建。程序号和程序名称不可以同时指定
  • allow_opr: 在有程序运行时是否允许操作该指定程序,默认为False
  • allow_dialog: 插入程序段时是否弹窗提示,默认为True

语法为: action=程序段模板('''xxx'''),括号中的字符串为一个程序模板段,当操作者按下menu时,将以其为模板生成程序段,插入当前光标之后。程序模 板段可以包含任意符合KUI脚本语法的语句和一些会生成程序的模板语句,模板语句中的字符在生成程序时不变,变量则用其值来替代。例如 ’’’ G01 X#500’‘‘在 生成程序时(假设#500值为100),会生成程序"G01 X100;"。(V2.2开始支持)

menu("程序段", action=程序段模板('''G01 X100 F500
                                G0 X200;
                                //这是注释2
								#501 = 12
								WHILE #501 != 0 DO
								G01 X#501 F1000
								#501 = #501 -1
								ENDWHILE''')) #执行此段程序将生成很多G01语句

可以使用该功能替换当前光标所行的程序。

  • string: 程序段内容字符串,写入需要插入程序段的内容
  • precision: 生成程序时默认的浮点数精度,默认为3
  • file_path: 支持文件路径或者程序内容字符串
  • is_file: 选择file_path是否为文件路径,默认为True
menu("程序段", action=程序段替换('''G01 X0 F1000''', is_file=False))  # 替换当前光标所行的程序,其程序内容为"G01 X0 F1000"

menu("程序段", action=生成程序("程序段替换.txt", precision=3, is_file=True))  # 替换当前光标所行的程序,生成程序时默认的浮点数精度为3,其程序内容读取文件"程序文件.txt"

用于对程序进行常规操作,例如:打开程序、删除程序、重命名等操作 (V3.0新增)

  • 打开程序: 写作程序操作("open"),1.支持设置程序号变量prog_no和通道号path_no变量:用于打开特定程序若不设置,默认打开程序列表当前程序. (V3.7新增) 2.支持后台打开allow_opr=True。例如:menu("打开", action=程序操作("open", prog_no=10, allow_opr=True))当系统在运行时可以在后台打开指定的10号程序。
  • 删除程序: 写作程序操作("delete"),删除当前光标所行的程序
  • 新建程序: 写作程序操作("new"),重新创建一个新程序
  • 重命名 写作程序操作("rename"),重命名当前光标所在的程序
  • 程序备份: 写作程序操作("backup"),备份所有的程序到U盘中
  • 保存至: 写作程序操作("saveto"),将光标所在的程序保存至其他地方(本地或U盘)
  • 退出后台: 写作程序操作("exitbg"),退出后台打开的程序
  • 打开: 写作程序操作("loadtoexec"),打开程序
  • 块选择: 写作程序操作("blockeditsel"),等效于【块编辑】中的选择
  • 块复制: 写作程序操作("blockeditcopy"),等效于【块编辑】中的复制
  • 块剪切: 写作程序操作("blockeditcut"),等效于【块编辑】中的j剪切
  • 块粘贴: 写作程序操作("blockeditpaste"),等效于【块编辑】中的粘贴
  • 删除块: 写作程序操作("blockeditdelete"),等效于【块编辑】中的删除块
  • 块撤销: 写作程序操作("blockeditundo"),等效于【块编辑】中的撤销
  • 块恢复: 写作程序操作("blockeditredo"),等效于【块编辑】中的恢复
  • 查找替换: 写作程序操作("findreplace"),等效于【查找替换】按键
    menu("打开", action=程序操作("open", prog_no=10, allow_opr=True))    # 当系统在运行时可以在后台打开指定的10号程序。
    menu("删除程序",程序操作("delete"))
    menu("查找替换",程序操作("findreplace"))

语法为: action=运行MDI('''xxx'''),括号中的字符串为一个程序段,当操作者按下menu时,将以其为模板生成MDI程序。程序模板段可以包含任意符合 KUI脚本语法的语句和一些会生成程序的模板语句,模板语句中的字符在生成程序时不变,变量则用其值来替代。例如 ’’’ G01 X#500’‘‘在生成程序时 (假设#500值为100),会生成程序"G01 X100;"。(V2.4开始支持)

  • prog_str: 指定运行的MDI程序内容
  • path: 指定通道号,默认为1
menu("运行MDI", action=运行MDI(prog_str="G0 X100;", path=1))  # 通道1在录入方式下执行程序,程序内容为G0 X100;

语法为: action=运行程序("xxx", is_file=False)action=生成并运行程序("xxx", is_file=False),括号中的字符串为程序内容,当操作者按下menu时,将以其为模板生成程序并运行。程序内容可以包含任意符合 KUI脚本语法的语句和一些会生成程序的模板语句,模板语句中的字符在生成程序时不变,变量则用其值来替代。例如 ’’’ G01 X#500’’’ 在生成程序时(假设#500值为100),会生成程序"G01 X100;"。(V3.4开始支持)

  • file_path: 程序内容或程序文件路径
  • number: 程序号,若不设置,则自动选择一个程序号
  • is_file: 选择file_path是否为文件路径,默认为True
  • path: 选择通道号,默认为1
  • show_progress: 选择是否显示进度条,默认为None
  • input_name: 选择用户是否可以编辑程序名称,默认为None
  • precision: 选择生成程序时默认的浮点数精度,默认为3
menu("运行程序", action=运行程序(file_path='''G0 X100; X0;''', is_file=False, number="D10")) # 生成程序,程序号为D10,程序内容为G0 X100; X0;
menu("运行程序", action=运行程序("O1.txt", is_file=True, number=2, path=2)) # 在通道2生成并运行程序,程序号为2,程序内容读取O1.txt文件中的内容
menu("运行程序", action=生成并运行程序("O1.txt", is_file=True, precision=2)) # 生成并运行一个程序,程序号自动分配,程序内容读取O1.txt文件中的内容,浮点数精度为2

程序号number支持表达式 (V3.5开始支持)
运行程序、运行MDI、生成程序支持通道号path;(V3.5开始支持)
运行程序和生成程序支持是否从文件中读取,通过is_file设置,格式见下方示例 (V3.5开始支持)
如果没有指定程序号,则会在运行时自动选择一个程序号
当不设置通道号path时表示通道1
当通道号path不存在时自动转为通道1
is_file默认为True,表示第一个字符串为文件路径,若设置为False表示第一个字符串即为要解析的KUI脚本

该功能可以直接运行指定的程序名称,语法为: action=运行程序名称("程序名.PRG", path=1, path_type=主通道, forbid_modify_name=False))

当指令的通道内没有该程序时,会弹窗提示

  • name: 程序名称
  • path: 运行程序的通道号,默认为1
  • path_type: 运行程序的通道类型,默认为主通道
  • forbid_modify_name: 运行程序时是否禁止修改程序名称,默认为False
menu("运行程序名", action=运行程序名称("ce.PRG", path=1, path_type=主通道, forbid_modify_name=False))  # 在自动方式下指令通道1运行程序,程序名为ce.PRG

5. U盘操作

用于U盘文件导入到系统里,写作 U盘输入 (V3.0新增)

用于将系统打包文件或系统软件输出到U盘里,写作 u盘输出 (V3.0新增)

    menu("u盘输入",U盘输入)
    menu("u盘输出",u盘输出("sys_dat")) # 输出系统打包文件
    menu("u盘输出",u盘输出("sys_bin")) # 输出系统软件

6. 工艺类动作

用于保存或加载工艺数据,保存时会自动保存当前所有的自定义变量,加载时也会自动加载保存过的自定义变量。

使用该功能是需配合全局设置使用,在所有页面前定义需要保存的工艺数据范围,如:“K0-K10,D5,D10,#500$1-#600$1”。例如:add_craft_data("K0-K10,D5,D10,#500$1-#600$1")

工艺保存需配合工艺数据范围使用,函数为add_craft_data("")

add_craft_data("K0-K10,D5,D10,#500$1-#600$1")   # 在所有页面定义前定义需要保存的工艺数据范围

menu("工艺保存", 工艺保存)  # 以文件的形式保存工艺数据

工艺加载需配合工艺数据范围使用,函数为add_craft_data("")

add_craft_data("K0-K10,D5,D10,#500$1-#600$1")   # 在所有页面定义前定义需要加载的工艺数据范围

menu("工艺加载", 工艺加载)  # 以文件的形式保存工艺数据

工艺数据范围只需定义一次,并且工艺加载和工艺保存需要同时存在。

7. 系统操作、弹窗类

用于清除所有轴的机床坐标,写作清除机床

menu("清除机床", 清除机床)

用于启动一键回零,需提前在设置页面的一键回零页面设置完成,使用该功能时会根据一键回零页面中的回零顺序执行,写作一键回零

menu("一键回零", 一键回零)

用于进入指定自定义界面(应用)的默认页面,或进入自定义界面(应用)下的指定id页面, 写作进入应用("xxx"),其中,xxx为应用的uuid。

  • uuid: 进入指定应用的uuid
  • page_id: 进入指定应用的子页面的id名称,若忽略时进入应用的默认页面
menu("进入应用", 进入应用("j6Hr5QQXmxs3yLELrKL7Qq_076d"))
menu("进入子页面", 进入应用("j6Hr5QQXmxs3yLELrKL7Qq_076d", "page2"))

该功能可以快速跳转至NC界面。写作进入NC("xxx"),其中xxx为NC界面的特殊简写,只有部分NC页面可以跳转。

NC界面 特殊简写 NC界面 特殊简写 NC界面 特殊简写 NC界面 特殊简写
位置 pos 系统参数 prm DXF dxf 伺服台尾 tail_stock
程序 prg 诊断参数 dgn 系统维护 sysinfo 自动调机 auto_motor
刀补 ofs 报警 alarm 碰撞 collision 一键回零 all_home
坐标系 coord 图形 graph 维护计划 mntplan 权限 permission
载入模拟 process_monitor 设置 set IO配置 dioconfig 用户API user_api
收藏参数 favor_prm 伺服参数 svprm 按键配置 keyconfig 触屏测试 touch_test
宏变量 macro 帮助 help M代码表 user_mcode
menu("NC位置", 进入NC("pos"))   # 进入NC位置界面

该功能可以往当前光标所在控件里发送字母、数字或特殊符号,效果类似虚拟键盘。写作发送按键("xxx"),其中xxx为需要发送的按键。

可发送的按键有NC按键所有内容,例如:A-Z、0-9、~!@#$%^&*()_+-=[]{};:",./<>|

menu("字母P", 发送按键("P"))  # 往光标所在控件里发送按键P

用于弹出报警弹窗,需在系统有报警的时候才会生效,显示报警信息,写作 Action.alm_dlg显示报警(V3.0新增)

menu("报警", 显示报警)   # 当系统报警时按下该按钮时,弹出报警弹窗
  • 显示使用期限弹窗界面 (V3.9新增)
  • 举例
    menu("使用期限",使用期限)

该功能可以修改系统语言,写作修改系统语言

menu("修改系统语言", 修改系统语言)

该功能可以回退权限等级,写作权限回退。权限等级有效时生效。

menu("权限回退", 权限回退)

该功能可以设置网络参数,写作设置网络参数

menu("设置网络参数", 设置网络参数)

该功能可以设置KWS参数,写作KWS设置。KWS功能有效时生效。

menu("KWS设置", KWS设置)

该功能可以启动远程协助,写作远程协助。KWS功能有效时生效。

menu("远程协助", 远程协助)

该功能可以结束远程协助,写作结束远程协助。KWS功能有效时生效。

menu("结束远程协助", 结束远程协助)

8. 脚本、特殊类动作

执行KUI脚本

action取值可以为 运行脚本或运行脚本文件,此参数非字符串类型,直接写作 运行脚本('''xxx''')运行脚本文件("xxx.xx"), 为"运行脚本"时将若干符合KUI脚本语法的语句写在三引号中,为"运行脚本文件"将若干符合KUI脚本语法的语句写在一个文件中,在括号中写入文件名。

手动写lua文件时,内部变量请采用local,防止去自定义变量中查找导致程序出错

menu("TU2操作", action=运行脚本('''IF RESULT_YES==MSGBOX["是否执行TU2操作,选择执行将会执行TU2操作\\n选择取消将不会执行TU2操作\\n有疑问请咨询KND", MB_YESNOCANCEL, "提示"] 
     THEN SVOPR["TU2", "4"]
     ENDIF'''))
menu("执行文件", action=运行脚本文件("测试脚本文件.txt"))
menu("lua文件", action=运行脚本文件("lua脚本.lua"))

如下图所示,对话框的标题为"提示",中间的文字内容在\\n处换行,下方软按键处有三个选项为"是"、“否"和"取消”。按下"是"软按键时的返回值为 RESULT_YES,将执行TU2指令。

menuServoOpr控件应用举例

  • 增加焦点切换功能,用于快速回到某一特定位置,再次按下返回当前位置;若特定位置为程序控件,则自动进入程序编辑状态 (V3.7新增)
    • 焦点切换动作,第一参数表示要切换的控件的ID,
    • 举例
        menu("焦点|切换", action=焦点切换(id="edl_grog_g71"))   # 切换到edl_grog_g71控件
    

该功能用于将光标跳转至指定页面的指定控件上,通过指定页面id和控件id实现,写作页面焦点("xxx", {10:"page2:id2"}),其中xxx为变量或表达式,当变量或表达式为10时,则跳转至page2页上的id2控件。

当#500=10时,触发该按键则跳转至page2页上的id2控件。

menu("页面焦点", 页面焦点("#500", {10:"page2:id2"}))

调用槽函数

该功能需配合canvas控件使用,当图形需要跟随系统变量变化时需要使用控件动作调用槽函数更新图形内容。 page形参和panel形参只选择一个就行。

写作调用槽函数("face", "update", page="page1"),第1位参数为控件id。第2位参数为槽功能,目前只支持更新update。第3位参数为canvas控件所在页面(page)的id名称。

  • widget: canvas控件的id名称,用于指定哪个控件进行更新渲染图形。
  • slot: 槽函数功能,目前只支持更新update
  • page: canvas控件所在页面(page)的id名称
  • panel: canvas控件所在m面板(panel)的id名称

应用分析与举例

生成程序菜单可根据程序模板一键生成程序。适用于要实现某一特定功能,但是程序中的某些参数需要频繁更改或在操作时才能确定的情况。 例如,要实现在一个圆周上钻孔的特定功能,同时使操作者可以设定圆心位置、圆周半径、圆的数量、钻孔深度、主轴转速、加工方式等参数。 首先将这些可变的参数设定为KUI脚本的变量;然后将这些变量设定为data控件或teach控件的数据显示在页面上,使操作者可以编辑;最后根据这些变量和要实现的功能写一个符合KUI脚本语法的程序模板文件。下图展示了实现上述功能的自定义界面。

界面效果显示 生成的程序效果展示
生成程序举例 生成程序结果
#此处仅写出必要的代码
with page(510, 792, id="主页面"):
    picture("圆周钻孔.bmp", (1, 1, 510, 792))
    teach("{v500}", "x", (50, 654, 30, 96), f20x10, group=1)#圆心点X轴坐标
    teach("{v501}", "y", (90, 654, 30, 96), f20x10, group=1)#圆心点Y轴坐标
    data("{v502}", (130, 654, 30, 96), 确认)                #圆周半径
    data("{v503}", (170, 654, 30, 96), f20x10, 确认)        #圆周上孔的数量
    data("{v504}", (210, 654, 30, 96), 确认)                #第一个孔的角度
    data("{v505}", (250, 654, 30, 96), 确认)                #深度
    data("{v506}", (290, 654, 30, 96), choices={81: "G81", 82: "G82", 83: "G83"})      #G81-82-83
    data("{v507}", (330, 654, 30, 96), 确认)   #主轴转速
    data("{v508}", (370, 654, 30, 96), 确认)   #R点距离
    data("{v509}", (410, 654, 30, 96), 确认)   #钻孔速度
    data("{v510}", (450, 654, 30, 96), 确认)   #孔间断Q值

    menu("生成程序", 生成程序("圆周钻孔.txt", 1))#菜单名称为"生成程序",程序模板"圆周钻孔.txt"在当前目录下。在系统端按下此菜单时将执行程序模板生成程序"O0001.PRG"
    menu("示教坐标", 示教绝对(group=1))   #此处用了示教组功能,将X/Y轴的绝对坐标同时读入v500和v501中
// 以下为程序模板"圆周钻孔.txt"的内容:
G17 G90 G49 G80 G40
G91 G28 Z0
G90 M03 S#v507
M08
#v521 = #v503 - 1
FOR #i=0 TO #v521 DO;       //FOR循环
    #v10 = #v500 + #v502 * COS[[#v504 + #i * 360.0 / #v503]*PI/180]
    #v20 = #v501 + #v502 * SIN[[#v504 + #i * 360.0 / #v503]*PI/180]
    IF #v506 == 81 THEN;    //IF语句
        G81 K0 X#v10 Y#v20 Z#v505 R#v508 F#v509;
    ELSEIF #v506 == 82 THEN;
        G82 K0 X#v10 Y#v20 Z#v505 R#v508 Q#v510 F#v509;
    ELSEIF #v506 == 83 THEN;
         G83 K0 X#v10 Y#v20 Z#v505 R#v508 Q#v510 F#v509;
    ENDIF
ENDFOR
M05
M09
M30