Lua数据处理
Lua数据处理
Lua介绍
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
功能介绍
纸飞机通过集成Lua脚本,可以在不损失性能的情况下,更灵活的让用户自定义的处理数据。这在曲线滤波、文本数据更换(增删改)等场合下特别适用。同时,经过笔者评估,Lua的学习并不难,因为大多数情况下,我们还是只用到了常见的那几个Lua语法。 把本文喂给AI,可让AI直接帮你写Lua脚本
功能演示
功能使能
我们可通过以下路径打开Lua功能
打开后,纸飞机会自动在软件目录下新建:

快速教程文件
Luau快速教程文件是笔者为方便降低大家学习Lua的门槛,亲自整理的一个文档,只覆盖了常用的Lua语法,大约只需要翻6次屏幕就可以阅读完,用浏览器即可打开,这里不再展开赘述

Lua脚本文件
该文件是整个功能的核心,里面主要是内置了一些预定义函数和预定义变量,纸飞机会调用这些函数或变量。
--[[
# Lua教程:纸飞机在软件目录下释放了简短的入门教程文件,您也可以访问https://www.runoob.com/lua/lua-tutorial.html进行系统的学习
# 所有下划线__开头的变量会被纸飞机调用:
不可修改/删除名字和值;
# 所有下划线__开头的函数会被纸飞机调用:
不可修改、删除函数名称;
不可修改参数顺序、个数
不可修改返回值类型、个数;
但你可修改函数内部的实现,也可以添加自定义的函数
# 任何语法错误会导致脚本整体失效,请认真检查您的脚本
# 本文件的编码格式约定为UTF-8,使用LF作为换行符
--]]
-- 脚本文件版本
__version = 1
-- 函数功能:初始化函数,打开Lua功能后会执行一次
function __init()
io.output(io.open('ComAssistant.lua.log', 'a')) -- 重定向输出到文件,用于调试
end
-- 函数功能:反初始化函数,关闭Lua功能后会执行一次
function __deinit()
io.close()
end
-- 函数功能:该函数打印调试日志,日志会被打印到ComAssistant.lua.log文件
function print(data)
io.write(os.date("%Y-%m-%d %H:%M:%S ") .. data .. "\n")
io.flush()
end
-- 函数功能:该函数实现自动应答功能
-- 输入参数data:纸飞机收到的原始数据
-- 返回参数:当ackData不为空时,纸飞机会将它发送出去
function __auto_reply(data)
ackData = ""
return ackData
end
-- 函数功能:该函数对发送的数据进行处理
-- 输入参数data:纸飞机计划发送出去的数据
-- 返回参数:纸飞机即将发送出去的数据
function __before_send(data)
return data
end
-- 函数功能:该函数对即将显示到绘图器上的数据进行处理
-- 输入参数window: 当前数据所属的窗口,类型为字符串
-- 输入参数data:即将显示到绘图器窗口的曲线数据,类型为数组
-- 返回参数:纸飞机将使用返回的数据显示到绘图器上,类型为数组
function __before_plotter_window(window, data)
return data
end
-- 函数功能:该函数对即将显示到频谱仪上的数据进行处理
-- 输入参数window: 当前数据所属的窗口,类型为字符串
-- 输入参数data:即将显示到频谱仪的曲线数据,类型为数组
-- 返回参数:纸飞机将使用返回的数据进行FFT运算,类型为数组
function __before_fft_window(window, data)
return data
end
-- 函数功能:该函数对即将显示到过滤器上的数据进行处理
-- 输入参数window: 当前数据所属的窗口,类型为字符串
-- 输入参数data:即将显示到过滤器窗口的一行数据,类型为字符串
-- 返回参数:纸飞机将使用返回的数据显示到过滤器上,类型为字符串
function __before_filter_window(window, data)
return data
end
-- 函数功能:该函数对即将显示到数据分窗器上的数据进行处理
-- 输入参数window: 当前数据所属的窗口,类型为字符串
-- 输入参数data:即将显示到数据分窗窗口的一行数据,类型为字符串
-- 返回参数:纸飞机将使用返回的数据显示到数据分窗器上,类型为字符串
function __before_spliter_window(window, data)
return data
end
用户需要理解这段代码,但简单来讲,其实就是对应的功能在显示前额外执行了一个钩子函数,方便我们对数据进行预处理,大概数据流图如下:
数据接收 ---> 数据提取/解析 ---> lua脚本 ---> 数据显示
假设我们要对[[04-filter数据过滤]]的数据增加前缀HELLO_PREFIX:,那么其对应的脚本钩子函数为
__before_filter_window,我们可以重新修改其实现
-- 函数功能:该函数对即将显示到过滤器上的数据进行处理
-- 输入参数window: 当前数据所属的窗口,类型为字符串
-- 输入参数data:即将显示到过滤器窗口的一行数据,类型为字符串
-- 返回参数:纸飞机将使用返回的数据显示到过滤器上,类型为字符串
function __before_filter_window(window, data)
-- 使用两个点..来进行字符串拼接
return "HELLO_PREFIX:"..data
end
那么Lua处理效果如下

可以看到,main窗口收到的数据是没有HELLO_PREFIX:信息的,但是filter窗口会多出这么一个数据,正是Lua脚本在起作用。