纸飞机串口调试助手
电子 › 单片机 › 单片机工具 | 下载:0 | 浏览:27 | 时间:2 星期前 |
- 文件大小:18.33MB
- 运行平台:Windows
- 开发工具:C
- 下载鸟蛋:免费
- 说明
多种通信模式和绘图协议
纸飞机支持丰富的通信模式,目前已经包括UART、TCP、UDP、HID等模式。绘图协议支持万能文本协议、多窗口文本协议、简易十六进制协议、ModbusRTU可靠十六进制协议
自定义关键字高亮
纸飞机具有关键字高亮功能,可以将重要的关键字以不同的颜色高亮显示,提高观感,方便从众多log数据中快速找到重要信息。
数据分窗与过滤
借助内置协议,纸飞机可以实时提取数据并分类到不同的窗口。当然也可以利用自定义过滤器提取任何数据,方便用户从大量log数据流中快速找到所需要的信息。
数据可视化
纸飞机具有卓越的实时绘图性能,并支持多窗口绘图,各窗口图像独立控制。此外,纸飞机还支持数据的表格化显示和频域化显示。
纸飞机始终致力于提高嵌入式工程师的调试体验,以下是纸飞机的主要功能清单
功能清单 | 描述 |
---|---|
数据可视化 | 支持曲线显示、表格显示、频谱显示 |
数据分窗和过滤 | 支持按类别自定义提取文本数据并显示在不同窗口 |
自定义关键词高亮 | 内置常用的关键词高亮,也支持自定义高亮语法 |
多种简易协议 | 支持超过6种协议,适用于不同场合,并包含一种万能文本协议 |
Lua脚本模式 | 通过Lua脚本您可自由的处理您的数据 |
Hex视图模式 | 可便捷查看原始数据流的HEX形式 |
多字符串组件 | 支持自动录入,支持延时、循环、跳转发送 |
多彩主题 | 支持亮/暗色主题、支持背景、字体设置 |
意外数据恢复 | 电脑意外断电、系统意外崩溃时可最大限度保护您的数据安全 |
实时数据记录仪 | 支持原始数据、显示数据、曲线数据实时存储,并支持时间戳记录 |
24小时运行模式 | 限制使用内存以确保软件可以长时间工作 |
数据导出 | 支持原始数据、文本数据导出、支持曲线数据导出为excel、matlab、bmp等格式,支持图片拷贝到剪贴板 |
丰富工具箱 | 浮点数转换、HEX转换、数据校验、文件校验、ASCII表、运算优先级表等 |
链路监控 | 支持链路带宽监控、流量监控。 |
多种通信模式 | 支持UART、TCP、UDP、HID等模式,网络模式支持多点连接,支持终端模式 |
简易协议 | 支持了超过6种协议,适用于不同场合,并包含一种万能文本协议 |
数据自动应答 | 支持在检测到关键数据时,自动回复指定的数据 |
自定义软件标题后缀 | 软件标题后缀可在您多开软件时快速区分不同软件的作用 |
工程配置文件 | 通过工程配置文件可以在多开软件时切换为不同的工作模式和配置 |
大头钉和全局热键 | 大头钉可让软件置顶,全局热键可快速弹出软件,均可方便观察数据, |
前言
数据绘图请阅读《协议》和《数据可视化》小节。
数据分窗请阅读《协议》和《数据分窗》小节。
作者的话:
串口调试几乎是所有嵌入式工程师都会的调试方法,通过观察串口打印的log数据,可以判断设备工作状态,但有时候光看打印不是很直观,或者比较乱。
这里面的原因有很多,可能是打印量过大导致找信息困难,这在一些大型的嵌入式项目上很常见,也可能是希望通过一些曲线或者图表来观察更加直观,也有一些工程领域数据只能在频域观察。
过去这些问题并不是没有前辈去思考解决,只是受限于不同原因,有些地方不那么好用或者功能不那么全面。
纸飞机是一款串口/网络多功能调试助手,聚焦于改善嵌入式工程师的调试效率和调试体验。那如何做到这些?
在调试前,纸飞机设计了几种不同的协议,其特点都是简单便于实现、可阅读性高便于理解,方便新工程师快速导入适配。
在调试时,纸飞机支持关键字高亮、数据可视化、数据分窗、数据过滤等特色功能,方便工程师快捷的强化想要的信息,并剔除不重要的信息或者将数据以简单图表的形式展现出来。
带宽监控、流量监控和简单定时器,让你方便分析串口的使用情况。
纸飞机自带了一些常用的小工具方便使用,比如FLOAT转HEX工具、ASCII字符表等。
具有自动发送功能的多字符串组件,可以让你便捷的发送一串命令并控制命令之间的时间间隔。
简洁模式给你更大的视窗内容,希望能让你更加专注的观察接收到的调试信息。
数据安全是纸飞机十分看重的点,数据恢复、实时记录、和关闭提示等功能,可以让你无需担心未保存的数据意外丢失。在调试后,纸飞机支持丰富多样的数据导出方式,方便导入到其他软件进行专业的数据分析处理。
文件
保存原始数据:将收到的原始数据原封不动的保存为dat文件。
打开原始数据:加载dat文件并进行解析。
保存显示数据:将你所看见的数据保存。与原始数据不同,显示数据会丢失不可见字符,并可能添加时间戳等新的信息。
保存曲线数据:将绘图器收到的数据保存为excel、csv、txt文件。(若要用纸飞机重新解析数据并绘图,请选择“保存为原始数据”)
保存曲线图片:将绘图曲线保存为图片。图片的尺寸由当前窗口大小决定。图像的质量顺序由高到底为pdf > bmp > jpg = png
发送文件:将选择的文件以二进制流的形式或以标准的文件传输协议从端口发送出去。
功能
多字符串:发送的数据均会记录下来供重复使用。右键清空多字符串窗口记录的数据并重启软件可显示更详细的指导。
数据分窗:数据分窗开关。具体参考《数据分窗显示》
二级数据分窗:二级数据分窗开关。TEXT协议支持"{window1}{window2}string\n";STAMP协议支持"<stamp>{window1}{window2}string\n";ASCII协议支持"{window1:{window2}string}\n";
实时数据记录:实现自动接收并保存数据。如果需要长时间记录数据,建议关闭《数据分窗》和《数据过滤》功能。
ASCII码表:提供一个ASCII码表格进行查询。
HEX转换:提供ASCII、HEX、FLOAT相互转换的小工具。
网络模式:点击后将切换为网络调试模式。
HID模式:点击后将切换为USB HID调试模式。
终端模式:开启后进入终端通讯模式。
设置
串口设置:对串口进行数据位、停止位等设置。
编码规则:选择软件内部使用的编码规则。若中文乱码请检查该项。
回车样式:选择win风格回车"\r\n"还是unix风格回车"\n"。若出现多次换行效果,请检查该项。
个性化:
关键字高亮:打开后,时间戳信息、字符串、注释等以及如下字符等会以不同颜色显示: , ; { } = ( ) [ ] < >
自定义高亮:您可通过该工具对您的文本进行自定义上色。
全局弹出热键:弹出主窗口,最小化后方便快速打开查看数据,默认值为Shift+Alt+Z,点击后进行修改。
字体设置:设置字体。
背景色设置:设置背景色。
恢复默认设置:单击以恢复所有默认设置。也可以在关闭软件后通过删除程序目录的ComAssistantConfig.ini文件达到同样目的。
通用
HEX发送:纸飞机会自动将按键转换为对应的HEX数据,对于按键0~9、按键A~F、按键a~f可通过组合按键Alt或Shift配合对应按键实现转换。
协议
纸飞机目前支持众多协议,其中TEXT、STAMP、CUSTOM、ModbusRTU为主要推荐的几个协议,可按需选择。
TEXT协议为文本格式,支持多窗口文本和绘图。
STAMP协议和TEXT协议类似,但需要下位机额外提供X轴信息。
CUSTOM协议为单窗口万能文本协议,大部分场景下无需修改下位机源码即可提取指定行的数字进行绘图。
ModbusRTU协议满足标准ModbusRTU中03功能码应答报文的风格,支持多窗口绘图,具有校验功能,但不支持多窗口文本。
【注意】在调试TEXT、STAMP、ASCII、CSV等文本协议时请勿勾选"HEX显示"和"HEX发送"按钮!!
协议选择:
TEXT协议说明:
TEXT协议包含窗口、数据两个特征点,通过自定义不同的窗口,可以实现数据的筛选和分类。
通常建议按任务或者功能给窗口命名。
{window}string\n
以上表示一个数据包,其中
1. {和}用于包裹window,不可省略。
2. window 表示窗口名称,要求为英文字符,纸飞机将根据window划分不同的显示窗口。
3. string 为你想显示的任意英文字符,当string格式为逗号分隔数字时可以触发绘图。
4. \n为换行符,也可以是\r\n,该字符不可遗漏。
5. 单个数据包长限制为512字节,否则将无法解析。
C语言示例代码
1.首先定义宏函数简化后期工作(ARMCC/ARMGCC/GCC编译器):
#define PRINT(window, fmt, args...) printf("{"#window"}"fmt"\n", ##args)
2.若要将电压和电流数据进行绘图,并将功率数据分窗显示,可这样调用:
PRINT(plotter, "%d,%d", current, voltage);
PRINT(power, "the power is %d W", current * voltage);
3.实际显示效果可能如下:
{plotter}3,2
{power}the power is 6 W
STAMP协议说明:
STAMP协议包含计数戳、窗口、数据三个特征点,相比TEXT协议增加X轴信息,可以更清晰的了解log的先后顺序。
<stamp>{window}string\n
以上表示一个数据包,其中
1. stamp为计数戳,要求为纯粹int或者float类型数据,不可带上单位,如时分秒。注意:计数戳将被作为绘图器的X轴数据源。
2. <和>为计数戳的包络字符,不可省略;
3. window 表示窗口名称,要求为英文字符,纸飞机将根据window划分不同的显示窗口。
4. { 和 } 为窗口名称的包络字符,不可省略。
5. string 为你想显示的任意英文字符,当string格式为逗号分隔数字时可以触发绘图。
6. \n为换行符,也可以是\r\n,不可省略。
7. 单个数据包长限制为512字节,超大的数据包将无法解析。
C语言示例代码
0.准备一个不断递增的全局变量,表征时间流逝。比如系统滴答定时器:
static uint32_t system_counter;
1.定义宏函数简化后期工作(ARMCC/ARMGCC/GCC编译器):
#define PRINT(window, fmt, ...) printf("<%u>{"#window"}"fmt"\n", system_counter, __VA_ARGS__);
2.若要将电压和电流数据进行绘图,并将功率数据分窗显示,可这样调用:
PRINT(plotter, "%d,%d", current, voltage);
PRINT(power, "the power is %d W", current * voltage);
3.实际显示效果可能如下:
<0>{plotter}3,2
<0>{power}the power is 6 W
CUSTOM协议说明:
CUSTOM协议会提取包含关键词所在行的数据进行绘图。
通过对话框你可以丢弃不需要的曲线数据。
ModbusRTU协议说明:
纸飞机可对03和04功能码的应答帧进行解析并绘图。
激活后软件的右下角可以切换数据类型和字节序,以告诉纸飞机如何对数据进行解释、组合并绘图。
// 举例:
// 假设:对端设备的0x0040和0x0041两个寄存器各存储了一个int16类型的模拟量,其值分别为300(0x012C)和500(0x01F4)
// 需求:读取这两个模拟量并进行绘图。
// 流程:纸飞机需要先构造并发送问询帧给对端设备,对端设备解析并返回应答帧给纸飞机,纸飞机解析应答帧并绘图。
// 问询帧举例(建议使用纸飞机自带的"数据校验工具",选择CRC16-MODBUS即可自动计算问询帧的校验数据)
// 如果您有多个问询帧需要发送,建议使用"多字符串组件"
| 地址码 | 功能码 | 起始地址 | 数据长度 | 校验低位 | 校验高位 |
| 1字节 | 1字节 | 2字节 | 2字节 | 1字节 | 1字节 |
| 0x01 | 0x03 | 0x00 0x40 | 0x00 0x02 | 0x3A | 0x11 |
// 应答帧举例(纸飞机接收应答帧并解析)
| 地址码 | 功能码 | 数据长度 | 数据 | 校验低位 | 校验高位 |
| 1字节 | 1字节 | 1字节 | n字节 | 1字节 | 1字节 |
| 0x01 | 0x03 | 0x04 | 0x01 0x2C 0x01 0xF4 | 0x3A | 0x11 |
EasyHEX协议说明:
只需要将数据直接以二进制形式发送出去后,追加特定的帧尾即可,您主要关注数据类型、字节序和帧尾三个信息。
一个数据包的格式参考如下:
数据 1 | 数据 2 | 数据 ... | 帧尾 |
每一个数据都要求类型一致、字节序规则一致,同时帧尾定义如下:
数据类型 | UINT8 | UINT16 | UINT32 | FLOAT32 |
帧尾 | 0xFF | 0xFFFF | 0xFFFFFFFF | 0xFFFFFFFF |
数据类型 | INT8 | INT16 | INT32 | |
帧尾 | 0x80 | 0x8000 | 0x80000000 |
不难总结出:
对于无符号整型,帧尾为最大值,数据段不允许出现最大值;
对于有符号整型,帧尾为最小值(最大值+1),数据段不允许出现最小值;
对于单精度浮点,帧尾为固定值0xFFFFFFFF,此时为NaN;
样例数据举例:
样例A:以小端模式收到2个UINT16数据,分别为100(0x0064)、-50(0xFFCE),正确数据流顺序如下:
64 | 00 | CE | FF | FF | FF |
样例B:以小端模式收到2个INT16数据,分别为100(0x0064)、-50(0xFFCE),正确数据流顺序如下:
64 | 00 | CE | FF | 00 | 80 |
样例C:以大端模式收到2个INT16数据,分别为100(0x0064)、-50(0xFFCE),正确数据流顺序如下:
00 | 64 | FF | CE | 80 | 00 |
样例D:以小端模式收到2个FLOAT数据,分别为15(0x41700000)、-25(0xC1C80000),正确数据流顺序如下:
00 | 00 | 70 | 41 | 00 | 00 | C8 | C1 | FF | FF | FF | FF |
ASCII协议说明:
ASCII协议包含窗口、数据两个特征点,通过自定义不同的窗口,可以实现数据的筛选和分类。
通常建议按任务或者功能给窗口命名。
{window:string}\n
以上表示一个数据包,其中
1. {和}为起始和结束字符,不可省略。
2. window 表示窗口名称,要求为英文字符,纸飞机将根据window划分不同的显示窗口。
3. :为 window 和 string 之间的分隔符。
4. string 为你想显示的任意英文字符,当string格式为逗号分隔数字时可以触发绘图。
5. \n为换行符,也可以是\r\n,该字符不可遗漏。
6. 单个数据包长限制为512字节,超大的数据包将无法解析。
C语言示例代码
1.首先定义宏函数简化后期工作(ARMCC/ARMGCC/GCC编译器):
#define PRINT(window, fmt, args...) printf("{"#window"}"fmt"\n", ##args)
2.若要将电压和电流数据进行绘图,并将功率数据分窗显示,可这样调用:
PRINT(plotter, "%d,%d", current, voltage);
PRINT(power, "the power is %d W", current * voltage);
3.实际显示效果可能如下:
{plotter:3,2}
{power:the power is 6 W}
CSV协议说明:
格式和CSV文件一样,即数据(数字)之间以逗号进行分隔,并以换行符\n结尾即可。
num1, num2, ...\n
FLOAT协议说明:
只需要将float类型数据按小端顺序拆成4个字节依次发送,并以0x00, 0x00, 0x80, 0x7F四个字节作为一组数据的结尾(0x7F800000是float型能表示的极小值)。
容易得出结论FLOAT协议的数据包总是4的倍数,每4个数据表示一条曲线数据,且无法表示极小值数据。
调试FLOAT协议时请勾选"HEX显示"和"HEX发送"!
/* C语言示例 */ //float转byte宏 #define BYTE0(dwTemp) (*(char *)(&dwTemp)) #define BYTE1(dwTemp) (*((char *)(&dwTemp) + 1)) #define BYTE2(dwTemp) (*((char *)(&dwTemp) + 2)) #define BYTE3(dwTemp) (*((char *)(&dwTemp) + 3)) //发送函数(含2个数据) void SendCurve(float data1, float data2) { uint8_t dataBuff[4 + 4 + 4]; //缓存大小:(数据数量 + 1) * sizeof(float) int32_t cnt = 0; dataBuff[cnt++]=BYTE0(data1); //第一个数据,如电压 dataBuff[cnt++]=BYTE1(data1); dataBuff[cnt++]=BYTE2(data1); dataBuff[cnt++]=BYTE3(data1); dataBuff[cnt++]=BYTE0(data2); //第二个数据,如电流 dataBuff[cnt++]=BYTE1(data2); dataBuff[cnt++]=BYTE2(data2); dataBuff[cnt++]=BYTE3(data2); dataBuff[cnt++]=0x00; //结束标志 dataBuff[cnt++]=0x00; dataBuff[cnt++]=0x80; dataBuff[cnt++]=0x7F; // 该函数将dataBuff发送出去,可根据实际替换成你的发送函数 for(int32_t i = 0; i < cnt; i++) { printf("%c",dataBuff[i]); } }
和校验:
该功能仅限绘图,勾选后,最后一个数据将作为前序数据的累加校验和,只有校验通过的才算有效数据包。
【注意】不推荐使用此项,这会增加复杂度,而纸飞机的初衷是便捷调试,而非数据可靠。
1. 以下数据包是有效的,因为1+2等于3
{plotter:1,2,3}\n 或者 <0>{plotter}1,2,3\n 或者 1,2,3\n
2. 以下数据包是无效的,因为1+2不等于4
{plotter:1,2,4}\n 或者 <0>{plotter}1,2,4\n 或者 1,2,4\n
3. 对于Float协议,参考如下代码:
void SendCurve(float data1, float data2)
{
uint8_t dataBuff[4 + 4 + 4 + 4]; //缓存大小:(数据数量 + 1 + 1) * sizeof(float)
int32_t cnt = 0;
dataBuff[cnt++]=BYTE0(data1); //第一个数据,如电压
dataBuff[cnt++]=BYTE1(data1);
dataBuff[cnt++]=BYTE2(data1);
dataBuff[cnt++]=BYTE3(data1);
dataBuff[cnt++]=BYTE0(data2); //第二个数据,如电流
dataBuff[cnt++]=BYTE1(data2);
dataBuff[cnt++]=BYTE2(data2);
dataBuff[cnt++]=BYTE3(data2);
dataBuff[cnt++]=BYTE0(data1 + data2); //第三个数据,和校验
dataBuff[cnt++]=BYTE1(data1 + data2);
dataBuff[cnt++]=BYTE2(data1 + data2);
dataBuff[cnt++]=BYTE3(data1 + data2);
dataBuff[cnt++]=0x00; //结束标志
dataBuff[cnt++]=0x00;
dataBuff[cnt++]=0x80;
dataBuff[cnt++]=0x7F;
// 该函数将dataBuff发送出去,可根据实际替换成你的发送函数
for(int32_t i = 0; i < cnt; i++)
{
printf("%c",dataBuff[i]);
}
}
数据分窗
数据分窗可以将不同类型的数据分别显示在不同的窗口中,对于日志信息的提取和查看具有重要意义,目前支持TEXT协议、STAMP协议、ASCII协议。
filter过滤器
数据接收区有一个filter窗口可用于过滤实时接收的数据,通过输入要被匹配的关键字符即可。
被过滤的数据包必须以换行符\n结尾,最长为512字节。
数据可视化
数据可视化包括多窗口绘图器、数值显示器、频谱图等组件。
绘图器
由于纸飞机支持多窗口绘图,因此这里有一个重要概念:默认绘图窗口(器)。
默认绘图窗口具有最完整的功能,可以保存配置,同时将常驻于纸飞机,不可删除。
尽管每个绘图窗口的配置都可以各自修改,但新生成的绘图窗口的初始配置将继承自默认绘图窗口,这也是默认绘图窗口概念的意义。
由于CSV和FLOAT协议的特性,无法进行多窗口绘图,因此所有数据都显示在默认绘图器上。
右键图像可以对图像进行一些基本的设置。
若选用STAMP协议,X轴数据由协议中的stamp提供。
若选用非STAMP协议,X轴数据仅表示数据点个数。
数值显示器
数值显示器将当前显示的绘图窗口的数据以表格的形式显示出来。若未开启绘图窗口,则将显示默认绘图窗口的数据。
差分:当输入yes/no时将启动/关闭差分计算,可用于简单的速率分析。
表达式:通过表达式可进行简单的四则运算,@n表示第n条曲线(n>0),如@1*2将对第1条曲线数据放大2倍后显示。
频谱图
频谱图可以自动对指定绘图窗口的数据进行FFT运算。由于频谱图属于实时计算的,因此您必须先开频谱图,再给纸飞机发送数据。
请注意,角频率和频率的关系为:w = 2*PI*f
绘图器快捷操作
Axis + Wheel 鼠标放置在轴上并配合滚轮实现指定轴的缩放
x + Wheel 当焦点位于绘图器时,按住x并配合滚轮实现X轴缩放
v + Wheel 当焦点位于绘图器时,按住v并配合滚轮实现Y轴缩放
Shift + Click Background 按住Shift并单击绘图器背景可以激活/取消固定辅助线
Ctrl + Click Curve 按住Ctrl并单击曲线实现曲线的隐藏和显示
Ctrl + Select Background 按住Ctrl并用鼠标框选背景可以调整显示范围
Double Click Legend 双击图例修改曲线名称
Double Click Axis 双击轴精确修改轴范围
Double Click Axis Label 双击轴标签修改轴标签
通用快捷操作
Shift + Alt + C 全局弹出快捷键(支持自定义)
Enter + Filter 当光标位于Filter关键词输入框时,通过回车可快捷过滤历史数据
Ctrl + Enter 发送按钮
Ctrl + Delete 清空按钮
Ctrl + S 保存原始数据
Ctrl + Shift + S 保存曲线数据
Ctrl + O 打开原始数据
Ctrl + R 实时数据记录
Ctrl + E 简洁模式
Ctrl + M 多字符串
Ctrl + H Hex工具
Ctrl + D 绘图器
Ctrl + T 数值显示器
Ctrl + F 频谱图
F1 使用教程
F2 使用统计
F3 检查更新
F4 关于
F5 授权窗口
其他注意事项
运行多个纸飞机可能导致数据恢复功能不可用,这是因为共用了恢复文件。请将软件复制到不同目录下运行。
数据恢复功能可能无法恢复软件崩溃前最后1秒的数据。
FTDI芯片在高速收发下可能出现卡顿现象。可在设备管理器中检查该端口的属性,选择最高的缓冲大小和最小的收发延时计数器。
CH343芯片在高速收发下关闭串口仍然持续接收数据:可卸载掉CH343驱动使用微软自带驱动。
CP2102芯片在使用2023年驱动时开启流控可能会导致软件崩溃,请使用2018年的驱动。
FAQ
各窗口和main窗口时间戳不一致(或时间戳重复)
保存的曲线数据的时间戳只显示到秒
HID收发异常:
绘图器显示乱码
FFT计算不准确:
main窗口的输出数据是各窗口的输入数据,各模块独立工作且使用各自的时间戳。
为了最佳的运行效率,除了main窗口外,其他模块不会立刻处理数据,因此时间分辨率有限,时间戳仅供参考。
这是Excel显示问题,修改单元格格式即可。
设置单元格格式--自定义--输入hh:mm:ss.000即可
# HID可能需要配置报告ID,建议可先重置软件底部HID配置后,观察数据规律,逐个配置调整。
修改系统的语言和地区为中国大陆
注意角频率和频率的区别;注意FFT窗口中的采样频率指的是信号的采样频率不是数据的发送频率;
% 纸飞机调试助手验证FFT所用的MATLAB代码
f1=10; % 生成正弦波信号的频率
fs=128; % 信号的采样频率
N=4096; % 采样点数
n=0:N-1;
t=n/fs; % 生成时间序列
y=sin(2*pi*f1*t); % 生成幅值序列
y=y';
save sin.txt -ascii y % 保存到文件,可用纸飞机调试助手加载解析(请选择CSV协议)。
隐私声明
本软件可能会收集部分使用统计信息上传至服务器。若您无法接受,可使用防火墙阻拦本软件的网络请求,或者请勿使用本软件。
免责声明:作者不对本软件造成的任何后果承担任何责任
© 2020-now INHOWE
- 目录
- 相关推荐
- 相关问题