纸飞机串口工具介绍
纸飞机一款性能强劲且专业的串口/网络/HID调试助手,具有多窗口绘图、关键字高亮、数据分窗和数据过滤等众多功能,可以极大的方便嵌入式开发人员的调试过程。本文介绍Lua数据处理。
软件下载
下载链接:https://io.comassistant.cn/
绘图教程:https://www.bilibili.com/video/BV1E3411E7vu
功能演示:https://www.bilibili.com/video/BV1df4y1k71h
Lua介绍
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
功能介绍
纸飞机通过集成Lua脚本,可以在不损失性能的情况下,更灵活的让用户自定义的处理数据。这在曲线滤波、文本数据更换(增删改)等场合下特别适用。同时,经过笔者评估,Lua的学习并不难,因为大多数情况下,我们还是只用到了常见的那几个Lua语法。
功能演示
功能使能
我们可通过以下路径打开Lua功能
打开后,纸飞机会自动在软件目录下新建:
- 快速教程文件:lua_quick_manual.html
- Lua脚本文件:ComAssistant.lua
- 脚本日志文件:ComAssistant.lua.log
快速教程文件
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
用户需要理解这段代码,但简单来讲,其实就是对应的功能在显示前额外执行了一个钩子函数,方便我们对数据进行预处理,大概数据流图如下:
假设我们要对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脚本在起作用。
The END