KUI脚本语法

KUI脚本语法与系统宏程序语法基本相同,不同之处在下面列出

  • KUI脚本强制规定每一个语句占一行
  • KUI脚本的使用场景有switch/data/combobox/textbox/button/menu中的action参数和menu的生成程序功能。可以将若干KUI脚本语句写成一个编码格式 为"带BOM的UTF-8"或"GBK"的文件,将文件名作为"运行脚本文件",“生成程序"函数的参数,或者直接将若干KUI脚本语句写在一个三引号''' '''中, 作为"运行脚本"函数的参数。具体使用方法见相应控件的说明。

KUI脚本中的字符串需要用双引号括起表示
从V2.5开始,未初始化的宏变量和KUI自定义变量在KUI脚本中使用其值时会报错"脚本执行错误"

IF语句

包括IF、ELSEIF、ELSE、ENDIF

IFxxxTHEN             // 此行为一个语句,占一行
xxx
ELSEIFxxxTHEN         // 此行为一个语句,占一行
xxx
ELSE
xxx
ENDIF

WHILE语句

WHILE语句使用ENDWHILE结束,WHILE语句可以嵌套使用,ENDWHILE与上边距离最近的未组合的WHILE DO组合。

WHILExxxDO        // 此行为一个语句,占一行
xxx
ENDWHILE 

FOR语句

支持FOR循环,语法为:

FOR a=b TO c BY d DO // a只能是一个自定义变量或宏变量中的局部变量,
xxx     //[b,c]是一个闭区间。d为变量a每次的递增值,默认为1,可正、可负也可以是浮点数
ENDFOR  // 当a不在[b,c]区间之内时结束循环

FOR #a1= 1 TO 20 DO           // 此行为一个语句,占一行
xxx                           //中间代码循环20次
ENDFOR

FOR #1= 10 TO 1 BY -1.9 DO    // 此行为一个语句,占一行
xxx                           //中间代码循环5次
ENDFOR

循环和条件语句嵌套

上面的三种 “条件” 及 “循环” 语句可以嵌套使用,例如IF语句中嵌套一个FOR循环

IFxxxTHEN                    // 此行为一个语句,占一行
FOR #1= 10 TO 1 BY -1.9 DO   // 此行为一个语句,占一行
xxx                          //中间代码循环5次
ENDFOR
ELSE
xxx
ENDIF

自定义变量

支持自定义变量,自定义变量的名字由小写字母或小写字母+数字组成。自定义变量在KUI脚本中的使用方法为将变量名前面加上”#“直接使用,自定义变量语法格式与宏程序中的宏变量语法格式相同;自定义变量也可以在data控件中使用,格式为{变量名}。

data("{v2}", (1, 2))  #自定义变量为v2,在KUI脚本中使用格式为#v2,#v2的使用语法与宏程序中宏变量相同

设置和读取数控系统数据

KUI脚本支持设置和读取数控系统数据。(系统参数、宏变量、诊断参数(只有KDTC和F区的部分参数可以赋值)、伺服参数)

格式为:#["参数名称"]
// 这种直接使用的形式对诊断参数有一定限制,因为无法指定诊断参数的位数,均默认为u8。
// 可以使用下面介绍的PLC函数指定诊断参数的位数。
#103=#["P1115"]         //读取系统参数P1115到#103
#["P1105.5-3"]=1        //系统参数P1105.5-3设置为1 
#500=#["D5"]            //读取D5的值到#500
#["K0.3"]=1             //K0.3设置为1
#["PA5-4"]=50           //伺服参数PA5-4设为50

EXPORT函数

EXPORT函数,输出数控系统的参数到U盘,目前只支持输出PLC配置参数,语法为:

menu("执行脚本", 运行脚本("EXPORT[\"plccfg\"]")  #菜单名称"执行脚本",键按下时向U盘输出PLC配置参数

执行伺服指令

V1.5新增

执行伺服命令以TU2指令为例,语法为:

SVOPR["TU2",  XXX]  // XXX可以是轴名字符串,如"A";可以是轴号数字,如 1;也可以是KUI的自定义变量

#v1=#["D5"]        // 在此处定义KUI自定义变量v1,赋值为系统诊断参数D区5号参数
SVOPR["TU2", #v1]  // 此处操作的是v1代表的轴号

支持的伺服指令有DEF/BA/RS/TU1/TU2/TU3/B-TU3/TU4/TU5/TU6/TU7/A-TU7/B-TU7/TU8/TU9/TUF/D/CL

弹出对话框

弹出对话框一般要根据操作者按下的软按键执行不同操作,故多和IF语句同时使用,格式如下:

下面的格式是将KUI脚本写成一个文件执行时的语法,当将脚本写成一个字符串时要将下面的\n写成\\n

IF RESULT_YES==MSGBOX["是否执行TU2操作,选择执行将会执行TU2操作\n选择取消将不会执行TU2操作\n有疑问请咨询KND", MB_YESNOCANCEL, "提示"] THEN
    SVOPR["TU2", "4"]
ENDIF

MSGBOX函数用于定义对话框的内容,MSGBOX[参数1,参数2,参数3],

  • 参数1 为对话框中间部分显示的字符串,\n表示另起一行,设计对话框时根据系统的显示结果调整换行情况;
  • 参数3为对话框的标题栏内容;
  • 参数2为弹出对话框时在下方软按键处显示的选项,共有
    • MB_OK:软按键处仅显示"确定 “一个选项,其选项值为0
    • MB_OKCANCEL:软按键处显示"确定”、“取消” 两个选项,其选项值为1
    • MB_ABORTRETRYIGNORE:软按键处显示"终止”、 “重试” 、“忽略” 三个选项,其选项值为2
    • MB_CANCELRETRYCONTINUE:软按键处显示"取消"、 “重试” 、“继续” 三个选项,其选项值为3
    • MB_RETRYCANCEL:软按键处显示"重试"、“取消” 两个个选项,其选项值为4
    • MB_YESNO:软按键处显示"是"、“否"两个选项,其选项值为5
    • MB_YESNOCANCEL:软按键处显示"是”、 “否” 、“取消” 三个选项,其选项值为6

MSGBOX函数的返回值取决于操作者按下的软按键。下方表格列出了软按键名称、其对应的中文和按下之后的返回值。上面的七种组合形式为目前支持的所有形式,用户不能自定义新的组合。

软按键名称 中文名称 返回值 返回值数据
MB_OK 确定 RESULT_OK 1
MB_CANCEL 取消 RESULT_CANCEL 2
MB_ABORT 终止 RESULT_ABORT 3
MB_RETRY 重试 RESULT_RETRY 4
MB_IGNORE 忽略 RESULT_IGNORE 5
MB_CONTINUE 继续 RESULT_CONTINUE 6
MB_YES RESULT_YES 7
MB_NO RESULT_NO 8
menu("TU2操作", action=运行脚本('''IF RESULT_YES==MSGBOX["是否执行TU2操作,选择执行将会执行TU2操作\\n选择取消将不会执行TU2操作\\n有疑问请咨询KND", MB_YESNOCANCEL, "提示"] 
     THEN SVOPR["TU2", "4"]
     ENDIF'''))

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

servp-opr

角度转换

  • DEG函数,弧度值转角度值。
  • RAD函数,角度值转弧度值。

宏变量读写

VAR函数,读取或设置某个宏变量的值,语法为:

第1个参数为宏变量号,此参数可以是任何KUI脚本中支持的数字类型的值,函数结果及其组成的表达式,例如一个字面值、宏变量、KUI自定义变量;第2个参数为要赋给此宏变量的值,值的类型和第1个参数一样(可选)。
本函数强制将结果赋值给某一个变量,如果不想使用结果可以将结果赋值给一个不被使用的变量。如果将此函数结果作为某一函数的参数时不能将结果赋值给变量。
#v2=VAR[12] //将宏变量#12的值赋给自定义变量v2。
#v2=VAR[12, 233] //将233赋值给宏变量#12,再赋值给自定义变量v2。
#v2=VAR[#v1, #v3] //将自定义变量v3的值赋给自定义变量v1表示的宏变量号。
#v2=VAR[#v1, PLC["D1", "u8"]] //将PLC参数D1的值赋值给自定义变量v1表示的宏变量号

PLC数据读写

  • PLC函数,读取或设置某个PLC参数的值,语法为:
第1个参数为PLC参数地址,可以是写在双引号中的地址字符串、表示字符串的KUI自定义变量或者STRCONCAT函数的返回值(此处不能将函数返回值赋值给变量), 支持位型地址;第2个参数为PLC参数的类型,当第1个参数为位型地址时此处类型写"u8";第3个参数为赋给PLC参数的值,此参数可以是任何KUI脚本中支持的数字类型的值,函数结果及其组成的表达式,例如一个字面值、宏变量、KUI自定义变量(第3个参数是可选的)。
被赋值的PLC参数必须是可被赋值的。
本函数强制将结果赋值给某一个变量,如果不想使用结果可以将结果赋值给一个不被使用的变量。如果将此函数结果作为某一函数的参数时不能将结果赋值给变量。
#v2=PLC["K1.1", "u8", 1]  // 将PLC参数K1.1赋值为1,再将#v2赋值为1。
#v2=PLC["D1", "u8"]     // 将PLC参数的D1的值赋给v2, D1数据类型为u8。
#v2=PLC["D1", "u8", 122]// 将PLC参数的D1的值设置为122,再赋给v2, D1数据类型为u8
#v2=PLC["D1", "u8", #v3]// 将自定义变量v3的值赋给D1,再赋给v2。
#v2=PLC["D88", "u32", PLC["D96", "u32"]] //将D96的值赋给D88。
#v2=PLC["D1", "u8", #["P1115"]] //将系统参数P1115赋值给D1,再赋给v2。
  • PLCCFG函数,读写PLC配置,语法为:
第1个参数为索引,第二个参数为值,此参数可以是任何KUI脚本中支持的数字类型的值,函数结果及其组成的表达式,例如一个字面值、宏变量、KUI自定义变量(可选)
本函数强制将结果赋值给某一个变量,如果不想使用结果可以将结果赋值给一个不被使用的变量。如果将此函数结果作为某一函数的参数时不能将结果赋值给变量。
#v2=PLCCFG[0]    //获取PLCCEG[0]的值赋给v2
#v2=PLCCFG[0,33] //获取PLCCEG[0]设置为33,再赋给v2

系统参数读写

PRM函数,读取或设置某个系统参数的值,语法为:

第1个参数为参数号;第2个参数为位型索引,不是位型时需要将此参数设置为8;第3个参数为轴号,非轴型参数需要将此参数设置为0;第4个参数为赋给系统参数的值,此参数可以是任何KUI脚本中支持的数字类型的值,函数结果及其组成的表达式,例如一个字面值、宏变量、KUI自定义变量(可选)。
本函数强制将结果赋值给某一个变量,如果不想使用结果可以将结果赋值给一个不被使用的变量。如果将此函数结果作为某一函数的参数时不能将结果赋值给变量。
#v2=PRM[1105, 1, 2]    //获取系统参数P1105.1-2的值赋给v2
#v2=PRM[1105, 1, 2, 1 ] //系统参数P1105.1-2设置为1,再赋给v2
#v2=PLC["D88", "u32", PRM[1115, 8, 0]] //将P1115的值赋给D88。

伺服参数读写

SVPRM函数,读取或设置某个伺服参数的值,语法为:

第1个参数为参数号;第2个参数为位型索引,不是位型时需要将此参数设置为8;第3个参数为轴号;第4个参数为赋给伺服参数的值,此参数可以是任何KUI脚本中支持的数字类型的值,函数结果及其组成的表达式,例如一个字面值、宏变量、KUI自定义变量(可选)。
本函数强制将结果赋值给某一个变量,如果不想使用结果可以将结果赋值给一个不被使用的变量。如果将此函数结果作为某一函数的参数时不能将结果赋值给变量。
#v2=SVPRM["PA10", 1, 2]//获取系统参数PA10.1-2的值赋给v2
#v2=SVPRM["PA10", 1, 2, 1 ]//系统参数PA10.1-2设置为1,再赋给v2

页面跳转函数

PAGE函数,跳转至某个自定义页面。

PAGE[xxx]     // xxx为相应页面的id,运行此函数时将跳转到id为xxx的页面,xxx可以是双引号括起的字符串也可以是数字,取决于跳转到的页面的id。

面板函数

脚本里支持打开和关闭面板 (v3.4新增)

PANEL["dlg1"] #打开面板dlg1
CLOSE_PANEL[""] #关闭面板

定时脉冲函数

脚本里支持设置定时脉冲,可以增加弹窗提示 (v3.6新增)

menu("脉冲脚本", action=运行脚本('''IF RESULT_YES==MSGBOX["是否执行K1.1定时脉冲,有疑问请咨询KND", MB_YESNOCANCEL, "提示"] THEN
                                    TIMER_PULSE["K1.1", 1000]
                                    ENDIF'''))

ISNOTNULL函数

ISNOTNULL函数,判断一个KUI自定义变量或者宏变量是否被初始化

V2.5新增

ISNOTNULL[xxx]   // xxx为某个宏变量或者KUI自定义变量,当xxx未被初始化时返回false,已被初始化时返回true。

字符串函数

  • STRFORMAT函数,格式化字符串,语法为: 注:前面介绍的PLC函数、PRM函数、SVPRM函数都可以和此函数联合使用以实现动态改变参数地址的目的
第1个参数为带有"转换说明符"的待格式化字符串,其中可以有1个或多个"转换说明符","转换说明符"由%和其右边一个字符组成,不同字符表示不同含义,%d格式化整数,向0取整;%u格式化无符号整数,小于0的数格式化为0,大于0的数向0取整;%s格式化字符串;从第2个参数开始的n个参数依次对应第1个参数中的第n个"转换说明符"。
本函数强制将结果赋值给某一个变量,如果不想使用结果可以将结果赋值给一个不被使用的变量。如果将此函数结果作为某一函数的参数时不能将结果赋值给变量。
#v2= STRFORMAT["D%d", #v1] //format D%d给v2
#v2= STRFORMAT["D%d F%s", #v1, #vm]//format D%d F%s给v2
#v2= PLC[STRFORMAT["D%d", #v1], "u32", 112] // 将112赋值给相应地址的D区参数,地址号由自定义变量v1决定。
  • STRCONCAT函数,连接若干字符串,语法为:
此函数可以有2~n个参数,每个参数为写在双引号中的字符串/表示字符串的KUI自定义变量或者STRCONCAT函数的返回值。
本函数强制将结果赋值给某一个变量,如果不想使用结果可以将结果赋值给一个不被使用的变量。如果将此函数结果作为某一函数的参数时不能将结果赋值给变量。
#v2= STRCONCAT["D1 ", "D2"]//结果为"D1 D2"赋给v2
#v2= STRCONCAT["D1 ", "D2", "D3"]//结果为"D1 D2D3"赋给v2
#v2= STRCONCAT[STRCONCAT["D1 ", "D2"], "D3"] // 和上1行结果等价,第2个函数不能将返回值赋值给变量
  • 将自定义变量格式化为字符串 (V2.7开始支持)

格式化自定义变量为字符串,语法为:

[#v1:06u]       // 中括号不能省略,"["右侧必须是一个自定义变量,冒号后面为格式化控制字符。
// 此语法主要用于生成程序时,将变量格式化为字符串,生成程序时所有的变量都会默认被当做数值处理,此语法可以更精细的控制生成程序的格式。

格式化控制字符主要由一些数字和字符组成,其详细含义和组合形式在下面给出。
最右侧的字符含义如下
    c - 接受一个数字, 并将其转化为ASCII码表中对应的字符
    d, i - 接受一个数字并将其转化为有符号的整数格式
    o - 接受一个数字并将其转化为八进制数格式
    u - 接受一个数字并将其转化为无符号整数格式
    x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母
    X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母
    e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
    E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
    f - 接受一个数字并将其转化为浮点数格式
    g(G) - 接受一个数字并将其转化为e(E, 对应G)及f中较短的一种格式
    q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
    s - 接受一个字符串并按照给定的参数格式化该字符串

为进一步细化格式, 可以在字符左侧添加参数. 参数将以如下的顺序读入:
    (1)符号: 一个+号表示其后的数字转义符将让正数显示正号. 默认情况下只有负数显示符号.
    (2)占位符: 一个0, 在后面指定了字串宽度时占位用. 不填时的默认占位符是空格.
    (3)对齐标识: 在指定了字串宽度时, 默认为右对齐, 增加-号可以改为左对齐.
    (4)宽度数值
    (5)小数位数/字串裁切: 在宽度数值后增加的小数部分n, 若后接f(浮点数转义符, 如6.3f)则设定该浮点数的小数只保留n位, 若后接s(字符串转义符, 如5.3s)则设定该字符串只显示前n位.

其他

  • 宏程序中支持的常用数学函数,KUI脚本仅支持其"双精度"的形式,用法和含义相同。
  • 不支持GOTO
  • 不支持OPENWRITE、CLOSEWRITE、WRITE
  • 不支持位操作,如<<>>、~、&、^、XOR、|
  • 不支持CALL和PARAMS