KUI脚本语法与系统宏程序语法基本相同,不同之处在下面列出
''' '''中,
作为"运行脚本"函数的参数。具体使用方法见相应控件的说明。KUI脚本中的字符串需要用双引号括起表示
从V2.5开始,未初始化的宏变量和KUI自定义变量在KUI脚本中使用其值时会报错"脚本执行错误"
KUI脚本语法仅支持在KUI的执行脚本或执行脚本文件中使用。脚本同时支持KUI脚本语法和lua语法
1.宏程序中支持的常用数学函数,KUI脚本仅支持其"双精度"的形式,用法和含义相同。
2.不支持GOTO
3.不支持OPENWRITE、CLOSEWRITE、WRITE
4.不支持位操作,如<<、>>、&、XOR
5.不支持CALL和PARAMS
包括IF、ELSEIF、ELSE、ENDIF
IFxxxTHEN // 此行为一个语句,占一行
xxx
ELSEIFxxxTHEN // 此行为一个语句,占一行
xxx
ELSE
xxx
ENDIF
WHILE语句使用ENDWHILE结束,WHILE语句可以嵌套使用,ENDWHILE与上边距离最近的未组合的WHILE DO组合。
WHILExxxDO // 此行为一个语句,占一行
xxx
ENDWHILE
支持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
支持REPEAT重复,语法为:
REPEAT //重复开始
xxx //中间代码重复执行
UNTIL xxx ENDREPEAT //满足条件时退出循环
上面的三种 “条件” 及 “循环” 语句可以嵌套使用,例如IF语句中嵌套一个FOR循环
IFxxxTHEN // 此行为一个语句,占一行
FOR #1= 10 TO 1 BY -1.9 DO // 此行为一个语句,占一行
xxx //中间代码循环5次
ENDFOR
ELSE
xxx
ENDIF
针对循环、重复语句,提供了BREAK和EXIT跳出功能。BREAK/EXIT跳出当前循环。
REPEAT
#500=#500+1
IF #500==50 THEN
BREAK //当满足条件执行到BREAK语句时,跳出当前循环
ENDIF
UNTIL #500==100 ENDREPEAT
支持自定义变量,自定义变量的名字由小写字母或小写字母+数字组成。自定义变量在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
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表示的宏变量号
通道宏变量PVAR函数: 可以读取多通道系统的宏变量的值,语法为:PVAR[100, 0, 0]
通道宏变量: PVAR[100, 0, 0]第一个参数表示宏变量号,第二个参数表示通道索引,第三个参数表示通道类型(0:主通道,1:辅助通道)
#500=PVAR[5401, 1, 0] //将主通道2的宏变量#5401的值赋给宏变量#500。
#501=PVAR[5401, 0, 1] //将辅助通道1的宏变量#5401的值赋给宏变量#501。
通道宏变量VARALIAS (变量名称),可以读取多通道系统的宏变量的值,语法为:VARALIAS["参数1", 参数2, 参数3, 参数4, 参数5]
其中,参数1: 表示为宏变量别名 参数2: 表示轴号或偏移 参数3: 表示通道索引 参数4: 表示通道类型(0:多通道,1:辅助通道) 参数5: 表示需要赋值的值
例如:读1轴机床坐标语法为#502=VARALIAS["ABSMT", 1, 0, 0]。写G54坐标系的第2轴值为100,其语法为
#503=VARALIAS["WZG54", 2, 0, 0, 100]
#502=VARALIAS["ABSOT",1]
#503=VARALIAS["WZG54", 2, 0, 0, VARALIAS["ABSOT",1]]
第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。
第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
DIOCFG函数,读取或设置某个IO配置的值,语法为DIOCFG[参数1, 参数2, 参数3, 参数4]:
其中:参数1: 范围0-3,分别表示DI、DO、DI-Valid、DO-Valid 参数2: 范围0-16,0表示本地模块,1-8表示总线模块1-8,32表示远程模块 参数3: 表示模块数据位,本地模块0-96,总线模块0-64,远程模块0-320 参数4: 表示写入的值,仅当参数1为0或1时可写入
#v2= DIOCFG[0, 0, 2, 50] //写入功能码50到本地DI配置的X0.2中
BUSDGN函数,读取或设置某个IO配置的值,语法为BUSDGN[参数1, 参数2, 参数3]:
其中:参数1: 总线诊断的参数号 参数2: 参数的位数,若为单字节参数,则该位应设为8 参数3: 参数的轴号,1表示为第1轴,2表示为第2轴,以此类推
#v2= BUSDGN[554, 8, 2] //读取总线诊断第2轴的参数554的值赋给#v2
COOR_NAME函数,获取通道内轴的绝对名称,语法为COOR_NAME[参数1, 参数2, 参数3]:
其中:参数1: 表示通道内轴号 参数2: 表示通道index,默认为0,表示通道1 参数3: 表示通道类型,默认为0表示主通道,1表示辅助通道
例如:第2轴名为Z,第3轴名为Y,#501=501,#502=502,执行脚本后生成程序:G0 X100;Z501;Y502;
menu("生成", 生成程序('''G00 X100
LINE[STRCONCAT[COOR_NAME[2], #501]]
LINE[STRCONCAT[COOR_NAME[3,0,0], #502]]''', is_file=False))
CNC_DATA函数,获取通道内轴的绝对名称,语法为CNC_DATA[参数1, 参数2, 参数3, 参数4, 参数5]:
其中:参数1: 表示CNC_DATA变量名称如sp_m3_code 参数2: 轴号或主轴号 参数3: 表示通道index,默认为0,表示通道1 参数4: 表示通道类型,默认为0表示主通道,1表示辅助通道 参数5: 表示设置值。
例如:读取内部变量系统时间年__sys_time[0]、读写内部变量目标件数__goal_count、读写内部变量通道1的主轴1的M03代码
__sp_m3_code[1]
menu("读取", 运行脚本('''#500= CNC_DATA["sys_time", 0]''')) # 读取系统时间
menu("赋值", 运行脚本('''#500= CNC_DATA["goal_count", 0, 0, 0, 100]''')) # 设置目标件数为100并赋值给#500
menu("赋值", 运行脚本('''#500= CNC_DATA["sp_m3_code", 1, 0, 0, 33]''')) # 设置主通道1的主轴1的M03代码为33
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,但是KUI脚本字符串中换行符号为\\n,例如下方为字符串时的换行写法。
IF RESULT_OK==MSGBOX["是否给宏变量#500赋值\\n确认: #500=100\\n取消: 取消操作", MB_OKCANCEL, "提示"] THEN
#500=100
ENDIF
MSGBOX函数用于定义对话框的内容,MSGBOX[参数1,参数2,参数3],例如:MSGBOX["提示内容", MB_OKCANCEL, "标题名称"]。
MB_OK:软按键处仅显示"确定 “一个选项,其选项值为0MB_OKCANCEL:软按键处显示"确定”、“取消” 两个选项,其选项值为1MB_ABORTRETRYIGNORE:软按键处显示"终止"、 “重试” 、“忽略” 三个选项,其选项值为2MB_CANCELRETRYCONTINUE:软按键处显示"取消"、 “重试” 、“继续” 三个选项,其选项值为3MB_RETRYCANCEL:软按键处显示"重试"、“取消” 两个个选项,其选项值为4MB_YESNO:软按键处显示"是"、“否"两个选项,其选项值为5MB_YESNOCANCEL:软按键处显示"是”、 “否” 、“取消” 三个选项,其选项值为6MSGBOX函数的返回值取决于操作者按下的软按键。下方表格列出了软按键名称、其对应的中文和按下之后的返回值。上面的七种组合形式为目前支持的所有形式,用户不能自定义新的组合。
| 软按键名称(参数2) | 中文名称 | 返回值 | 返回值数据 |
|---|---|---|---|
| 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 |
| 相对位置 | 写法 | 相对位置 | 写法 | 相对位置 | 写法 |
|---|---|---|---|---|---|
| 左上 | ALIGN_TL | 左中 | ALIGN_ML | 左下 | ALIGN_MB |
| 中上 | ALIGN_TM | 中中 | ALIGN_MM | 中下 | ALIGN_MM |
| 右上 | ALIGN_TR | 右中 | ALIGN_MR | 右下 | ALIGN_MR |
如下所示,对话框的标题为"提示",中间的文字内容在\\n处换行,下方软按键处有两个选项为"确定"和"取消"。按下"确定"软按键时的返回值为
RESULT_OK,将执行#500=100赋值操作。
menu("赋值", 运行脚本('''IF RESULT_OK==MSGBOX["是否给宏变量#500赋值\\n确认: #500=100\\n取消: #500=0", MB_OKCANCEL, "提示"] THEN
#500=100
ELSE
#500=0
ENDIF'''))
# 相对位置写法
menu("弹窗", 运行脚本('''IF RESULT_OK==MSGBOX["是否给宏变量#500赋值\\n确认: #500=100\\n取消: 取消操作", MB_OKCANCEL, "报警", ALIGN_BL] THEN
#500=100
ENDIF'''))
# 绝对位置写法
menu("弹窗", 运行脚本('''IF RESULT_OK==MSGBOX["是否给宏变量#500赋值\\n确认: #500=100\\n取消: 取消操作", MB_OKCANCEL, "报警", 100, 56] THEN
#500=100
ENDIF'''))

PAGE函数,跳转至某个自定义页面。
PAGE[xxx] // xxx为相应页面的id,运行此函数时将跳转到id为xxx的页面,xxx可以是双引号括起的字符串也可以是数字,取决于跳转到的页面的id。
脚本里支持打开和关闭面板 (v3.4新增)
PANEL["dlg1"] # 打开面板dlg1
CLOSE_PANEL[""] # 关闭面板
脚本里支持设置定时脉冲,可以增加弹窗提示 (v3.6新增),写法为:TIMER_PULSE["K1.1", 1000]
其中:参数1: 表示脉冲信号 参数2: 表示脉冲时间间隔
menu("脉冲脚本", action=运行脚本('''IF RESULT_YES==MSGBOX["是否执行K1.1定时脉冲,有疑问请咨询KND", MB_YESNOCANCEL, "提示"] THEN
TIMER_PULSE["K1.1", 1000]
ENDIF'''))
脚本里支持在程序页面中MSG信息中打印信息,语法为:MSG["xxx"]
menu("MSG", 运行脚本('''MSG["KUI"]''')) # 打印MSG信息内容为KUI
脚本里支持报警弹窗信息,该报警弹窗不会影响系统的程序运行,语法为:ERR[参数1, 参数2]
其中:参数1: 表示报警号 参数2: 表示报警内容信息
menu("ERR", 运行脚本('''ERR[100, "KUI", "报警内容2"]''')) # 打印报警信息
脚本里支持直接对坐标系进行测量操作,写法为:MEASURE_COOR[5501,0,0,0]
其中:参数1: 表示工件坐标系(仅坐标系宏变量号) 参数2: 表示通道索引(默认为0) 参数3: 表示通道类型(0:多通道, 1:辅助通道, 默认为0) 参数4: 表示测量数值(默认为0)
menu("坐标测量", 运行脚本('''MEASURE_COOR[5401, 0, 0, 10]''')) # 主通道1的G54坐标系进行坐标测量
一般在脚本中配合三角函数时使用,例如:SIN[RAD[30]]
KUI脚本中支持常规数学符号,例如:π:PI、三角函数等。
| 名称 | 符号 | 名称 | 符号 | 名称 | 符号 | 名称 | 符号 |
|---|---|---|---|---|---|---|---|
| π | PI |
正无穷 | INF |
正无穷 | PINF |
负无穷大 | NNIF |
| 零值 | ZERO |
正零 | PZERO |
负零 | NZERO |
非数字 | NAN |
| 判断是否有限数 | FINITE |
判断是否为无穷大 | ISINF |
判断是否为NAN | ISNAN |
浮点绝对值 | FABS |
| 向下取整 | FLOOR |
截断小数 | FIX |
向上取整 | CEIL |
向上取整 | FUP |
| 截断函数 | TRUNC |
四舍五入 | ROUND |
平方根函数 | SQRT |
反正弦 | ASIN |
| 反余弦 | ACOS |
正弦函数 | SIN |
余弦函数 | COS |
正切函数 | TAN |
| 反正切 | ATAN |
以2为底对数 | LOG2 |
以10为底对数 | LOG10 |
自然对数(e) | LOG |
| 自然对数(e) | LN |
指数函数(e) | EXP |
以2为底指数 | EXP2 |
幂函数 | POW |
| 二进制转换 | BIN |
BCD转换 | BCD |
绝对值 | ABS |
判断为空 | ISNULL |
| 角度转弧度 | RAD |
弧度转角度 | DEG |
一般用于读取位数据,语法为:BIT[参数1, 参数2]
其中:参数1: 表示参数号 参数2: 参数位数
例如:将F19000.1赋值给#500,写为:#500=BIT[#["F19000"], 1]
menu("赋值", 运行脚本('''#500=BIT[#["F19000"], 1]''')) # 读取F19000.1的值并赋值给#500
menu("赋值", 运行脚本('''#500=BIT[#["F19000"], 5, 1]''')) # 将F19000的第5位置为1后返回F19000的数值,并不是将F19000的第5位置为1
与运算语法为:&、或运算语法为:&、非运算语法为:~
menu("与", 运行脚本('''#500=#["F19000.0"]&#["F19000.1"]'''))
menu("或", 运行脚本('''#500=#["F19000.0"]|#["F19000.1"]'''))
menu("非", 运行脚本('''#["F19001.0"]=~#["F19000.1"]'''))
最小值运算语法为MIN[aa, bb, cc, ...]
menu("最小值", 运行脚本('''#500=MIN[10, 5, 9, 100]''')) # #500等于MIN函数中的最小值
menu("最小值", 运行脚本('''#500=MIN[#600, #601, 9, 100]''')) # #500等于MIN函数中的最小值
最小值运算语法为MAX[aa, bb, cc, ...]
menu("最大值", 运行脚本('''#500=NAX[10, 5, 9, 100]''')) # #500等于MAX函数中的最大值
menu("最大值", 运行脚本('''#500=MAX[#600, #601, 9, 100]''')) # #500等于MAX函数中的最大值
最小值运算语法为MEAN[aa, bb, cc, ...]
menu("平均值", 运行脚本('''#500=MEAN[10, 5, 9, 100]''')) # #500等于MEAN函数中的平均值
menu("平均值", 运行脚本('''#500=MEAN[#600, #601, 9, 100]''')) # #500等于MEAN函数中的平均值
ISNOTNULL函数,判断一个KUI自定义变量或者宏变量是否被初始化
V2.5新增
ISNOTNULL[xxx] // xxx为某个宏变量或者KUI自定义变量,当xxx未被初始化时返回false,已被初始化时返回true。
ISINT函数,判断一个KUI自定义变量或者宏变量是否为整数型
ISINT[xxx] // xxx为某个宏变量或者KUI自定义变量,当xxx不为int型时返回false,xxx为整数时返回true。
第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决定。
此函数可以有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个函数不能将返回值赋值给变量
格式化自定义变量为字符串,语法为:
[#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位.