纸飞机串口工具介绍
纸飞机一款性能强劲且专业的串口/网络/HID调试助手,具有多窗口绘图、关键字高亮、数据分窗和数据过滤等众多功能,可以极大的方便嵌入式开发人员的调试过程。本文介绍多窗口绘图下的ModbusRTU协议。
软件下载和视频教程
下载链接:https://io.comassistant.cn
绘图教程:https://www.bilibili.com/video/BV1E3411E7vu
功能演示:https://www.bilibili.com/video/BV1df4y1k71h
适用场合
ModbusRTU属于业界标准,支持CRC校验、且是十六进制传输。因此适用于对端已经支持ModbusRTU、或者要求数据能够可靠高效传输和存储,并且不在意数据可阅读性的场合。
协议介绍
纸飞机也支持符合业界标准的ModbusRTU协议,但是只支持功能码03的应答帧的协议格式。大多情况,对端设备可能需要收到请求帧,才会返回应答帧给纸飞机,所以这里将请求帧和应答帧的格式都列举出来。
请求帧协议格式如下:
功能定义 | 地址码 | 功能码 | 起始地址 | 数据长度 | 校验低位 | 校验高位 |
---|---|---|---|---|---|---|
数据长度 | 1字节 | 1字节 | 2字节 | 2字节 | 1字节 | 1字节 |
应答帧协议格式如下:
功能定义 | 地址码 | 功能码 | 数据长度 | 数据内容 | 校验低位 | 校验高位 |
---|---|---|---|---|---|---|
数据长度 | 1字节 | 1字节 | 1字节 | n字节 | 1字节 | 1字节 |
注意:
- 纸飞机只是按照协议格式进行解析,并不限制功能码和地址码具体是多少,因此这两个字段你可以从0x00~0xFF里任意选择,只要你的对端设备能够支持。
- 数据内容中的n字节数据就是要绘制曲线的数据,可以有多个数据代表多个曲线,但是同一时间只能有同一个数据类型。比如
- 数据长度 = 数据类型所占用字节 x 数据个数
- 不支持诸如1条int8类型+1条float类型的数据组合,因为不是同一个数据类型
- 数据转换为十六进制数据流发送时,是有大小端(字节序)的概念,低位数据先发送还是高位数据先发送一定要搞清楚,并在软件上选择好,否则解析一定出问题
绘图演示
首先我们要确保软件选择了正确的协议,打开数据可视化,并打开串口
假设,下位机发来了2个int16类型的数据要绘图,数据部分是大端发送的,地址码为0x01,功能码为0x03。那么我们应该按照这些信息设置好纸飞机的参数
如果数据内容部分的第一个数据是300(0x012C),第二个数据是500(0x01f4),那么字节流应该如下:
功能定义 | 地址码 | 功能码 | 数据长度 | 数据内容 | 校验低位 | 校验高位 |
---|---|---|---|---|---|---|
数据长度 | 1字节 | 1字节 | 1字节 | n字节 | 1字节 | 1字节 |
数据举例 | 0x01 | 0x03 | 0x04 | 0x01 0x2c 0x01 0xf4 | 0x3A | 0x11 |
绘图结果应该如下:
多窗口绘图
上一个节(最后一个图片)我们已经看到,纸飞机在解析出曲线后会自动的创建一个“ADDR:01 FUNC:03”的绘图窗口,这里分别对应的是地址码和功能码,所以我们只需要使用不同的地址码或者功能码,就可以让纸飞机自动的完成多窗口绘图的功能。这里不再演示。
如何计算CRC
如何在纸飞机上计算CRC
纸飞机提供了CRC校验工具可供用户快速验证CRC结果,打开功能——工具箱——数据校验工具即可。
打开数据校验工具后,选择对应的计算模型即可,纸飞机支持MD5、SHA、CRC、SUM、ADD、XOR等数十种计算模型,这里我们选择CRC16-MODBUS即可。随后输入要计算的数据即可自动算出对应的CRC。
如何在下位机上计算CRC
在我们提供的软件压缩包里,自带了计算CRC-MODBUS的源代码,仅1个头文件,将其添加进你的工程即可,非常简单,此处不再展开,目录结构如下:
- ComAssistant_MSVC.zip
- 绘图教程
- 绘图示例数据
- 部分协议的C语言示例代码.zip
- 部分协议的C语言示例代码
- protocol_demo_code
- 1.非文本协议(十六进制数据)
- ModbusRTU
- 1.非文本协议(十六进制数据)
- protocol_demo_code
- 部分协议的C语言示例代码
- 部分协议的C语言示例代码.zip
- 绘图示例数据
- 绘图教程