KUI支持以程序模板生成程序或程序段的功能。
程序模板的使用场景有switch/textbox/combobox/menu中的action参数取值为程序段模板时和menu的生成程序功能。可以将若干符合程序模板语法的语句写成一个编码格式为"带标签的UTF-8"或"GBK"的文件,将文件名作为"生成程序"函数的参数,或者直接将若干符合程序模板语法的语句写在一个三引号''' '''中,作为"程序段模板"函数的参数。具体使用方法见相应控件的说明。
从V2.5开始,未初始化的宏变量和KUI自定义变量在KUI脚本中使用其值时会报错"脚本执行错误"
程序模板可以包含任意符合KUI脚本语法的语句和一些会生成程序的模板语句,模板语句中的字符在生成程序时不变,变量则用其值来替代。例如 ''' G01 X#500'''在生成程序时(假设#500值为100),会生成程序G01 X100;
每次运行模板语句时都会生成相应的程序语句,所以当使用KUI脚本语法中的循环语句时,循环语句中的模板语句将生成若干遍程序语句。
session为包含在双大括号 {{ }} 中语句块,session中的语句块可以分为若干行书写,其生成的程序语句中间不会换行,仅有一行。
V2.5新增
// session的一种用法是和ISNOTNULL一起使用,下面的代码包含多行,生成程序时将生成一行语句,
{{G71
IF ISNOTNULL[#503] THEN
P#500
ENDIF
X100 Z0}}
LINE函数支持在生成程序的过程中生成字符串,例如:LINE["#500=10"]该写法的生成程序结果为#500=10
(())符号表示脚本注释符,脚本注释符内的内容不会被生成到程序中。例如:((脚本注释))该写法内容仅在脚本中可以看到,不会被生成到程序中。
如果生成程序需要系统进行大量的计算,会导致系统在生成程序时后台在不断的计算,该功能可以在系统进行后台计算时,生成一个进度条,提示用户正在生成程序。写法为SET_PROGRESS_MIN_MAX[参数1, 参数2]和SET_PROGRESS_CUR[xx]
其中,参数1: 为进度条的最小值
参数2: 为进度条的最大值。
SET_PROGRESS_MIN_MAX[0, 0]表示无限进度条、
SET_PROGRESS_CUR[xx]表示当前进度条的进度
menu("程序进度条", 生成程序('''SET_PROGRESS_MIN_MAX[0, 100]
#v1=0
WHILE #v1<100000 DO
#v2=[SIN[RAD[#v1]]*COS[RAD[#v1]]+100]/7
G01 X#v2
#v1=#v1+1
SET_PROGRESS_CUR[#v1/1000]
ENDWHILE''', show_progress=True, is_file=False)) # 生成程序时有进度条提示
kui的lua脚本中增加函数 _parse_para() 解析当前程序段,并返回一个表。分析当前行的程序并进行处理替换,一般配合程序段替换使用。
当前程序段有G代码、X代码、Z代码,实现:G代码保留、X代码值修改为当前机床坐标、Z代码值在原有值上加1处理。
with page(456, 800, id="page1", text=(白色, f20x10, 左对齐), bg_color=(24, 24, 24)):
prog((1, 1, 456, 400))
menu("第一页", "page1")
menu("程序段解析", 程序段替换("程序段解析-无序.lua"))
文件:程段解析-无序.lua
local function __main__(...)
local val1, val2=_parse_para({a=0})
local k1 = val1["G"]
local k2 = val1["X"]
local k3 = val1["Z"]
if k3 ~= nil then
_line({str=_concat_as_string("G", k1," X", _var({no=5201}), " Z", k3+1)})
elseif k2 ~= nil then
_line({str=_concat_as_string("G", k1," X", _var({no=5201}))})
elseif k1 ~= nil then
_line({str=_concat_as_string("G", k1)})
else
_line({str="(脚本错误)"})
end
end
__main__()
当前程序段有G代码、X代码、Z代码、Y代码,实现:按原有代码顺序进行修改,G代码保留、X代码值修改为X轴绝对坐标、Z代码值修改为Z轴绝对坐标、Y代码值修改为Y轴绝对坐标。
with page(456, 800, id="page1", text=(白色, f20x10, 左对齐), bg_color=(24, 24, 24)):
prog((1, 1, 456, 400))
menu("第一页", "page1")
menu("程序段解析", 程序段替换("程序段解析-有序.lua"))
文件:程段解析-有序.lua
local function __main__(...)
local _parts = {}
for i, pair in ipairs(_parse_para({a=1})) do
for k, v in pairs(pair) do
if k == "X" then
table.insert(_parts, "X" .. string.format("%.3f", _var({no=5201})) .. " ")
elseif k == "Y" then
table.insert(_parts, "Y" .. string.format("%.3f", _var({no=5202})) .. " ")
elseif k == "Z" then
table.insert(_parts, "Z" .. string.format("%.3f", _var({no=5203})) .. " ")
else
table.insert(_parts, k .. v .. " ")
end
end
end
if 1 == _msg_box({msg="是否修改该行程序?",option=1,title="提示"}) then
if #_parts > 0 then
_line({str = table.concat(_parts)}) -- 拼接非空部分
end
end
end
__main__()