纸飞机调试助手文档 ComAssistant Docs

多窗口绘图(ModbusRTU协议)

多窗口绘图(ModbusRTU协议)

适用场合

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