通过协议描述文件自动解析协议内容
创始人
2024-06-02 22:58:11
0

1.简介

        为了方便在开发过程中测试通信协议的数据而不重复开发上位机软件,我们开发了这款软件。我们使用XML文件来描述通信协议的内容,通过读取XML协议文件则可以实时解析串口或UDP接收到的数据帧。(注:目前版本仅支持“定长定内容”协议解析,即数据帧长度是固定的,协议中的某位或某字节的含义是固定的,不会因为某一位或一个字节的变化代表不同的含义。)

        软件下载链接:https://download.csdn.net/download/u012123768/87570506

        包含两个主要功能:1.根据协议定义创建XML协议描述文件;2.读取协议描述文件解析实时数据。

        下面为一个示例:

        现有一个通信协议,包含7个字节,以"AA,55"为帧头,和校验在第7个字节,第3到第6字节表示一个四字节的整形数据,高字节在前,代表的含义是电流。则将协议表示为下图所示:

         我们创建完成协议文件,则可以自动解析协议的内容。当发送端发送数据帧:AA  55 00 00 00 0100,解析端得到结果如下图中红色部分。

2 存储设置

        存储设置,主要配置在"解析"阶段,解析完成的数据保存至文本文件或者数据库中。

        "数据库"设置信息,在init文件夹的Database_Config.ini中。由于直接连接数据库,故使用了AES算法加密,尽量避免别人知道自己的数据库配置信息。主要配置信息:

  • HostIP:主机IP
  • HostPort:主机端口
  • DatabaseName:数据库名称
  • User:数据库用户名
  • Password:数据库密码       

        通过快捷键"Ctrl+Alt+D",可以调出"数据库”->“连接设置”菜单,然后配置数据的信息。这个菜单默认是隐藏的,配置后就尽量不要修改。看不见的不会经常去动,但是看不见的出现问题时不要忘记这个原因。

   

3 创建协议描述文件

        创建写意思描述文件,主要根据设计的协议内容,将协议转化成描述性文件。

        当前版本协议描述文件主要包括以下四个要素:帧长、帧头、校验和、数据定义。

        数据定义本版本包含三种形式:“原始数据”、"映射换算"和“按位转发”。

3.1 文件菜单

        文件菜单主要包含:打开已有文件和创建新的协议描述文件两种形式。

  • 打开协议描述文件

        打开已有文件,则协议内容会形式化的展示到主界面上。如下图所示。同时文件的名称会在页面底部的状态栏里显示,有助于了解当前被操作的协议文件的名称。

  • 新建协议描述文件

        输入新建文件的名字,然后选择保存的文件夹。设置界面如下所示:

  • 删除已有内容

        在协议内容显示界面中,通过邮件表格中的第一行(仅第一行可行),可弹出“删除”菜单,然后表格和描述文件中相应的字节定义的内容会被删除。

 3.2 设置帧长

        帧长为整个协议帧的长度。

                

3.3 设置帧头 

        帧头用于查询数据帧从哪儿开始,如果帧头为多个字节,中间使用英文逗号“,”隔开,且不用包含0x。

        例如:帧头为0xAA,0x55,则输入“AA,55”。如下图所示:

3.4  设置校验和

        这里的校验和只考虑了和校验和无校验,且和校验为除了校验所在位置的其他所有字节之和。

        比如:选择和校验,且位置在第7字节,那么校验和就是除了第7个字节之外所有自己的求和。

 3.5 原始数据转发

        即表示数据再计算机存储占用的内存,直接复制到协议中的一种方式。

        配置内容:

  • 位置:表示在协议里的起始位置,比如下图中的3,表示该数据在协议中从第3个字节开始计算。
  • 字节数:表示在协议里该数据类型占用的字节,比如下图中的4,则表示该数据类型占用4个字节,那么在协议中读取判断则会找寻第3个字节到第6个字节对应的数据。
  • 数据类型:这里存在四种类型“short","int","float","double"。注:这里选择完类型,记得设置前面的字节数。
  • 高低位:表示数据解析按照“高字节在前”还是“低字节在前”的去解析数据。
  • 含义:则表示该数据显示的意义,比如这里表示第3字节到第4字节代表的含义为“Voltage"。
  • 比例:就是获取原始数据之后,转化成需要的数据。比如,传输的数据是256.0,但是实际代表的电压为25.6V,这时需要乘以该比例0.1,获取真实的解析含义。大多情况下,取值为1。

3.5 映射换算转发

        设计协议,一般需要考虑用最少的字节或者比特传递更多的内容,大多数就需要进行映射转发。

        比如硬件温度采集,温度测量范围为-5℃-20℃,且温度的分辨率为0.1℃,这样数据个数就是251个,而一个字节可以表示256个数据,那么我就可以用一个字节来表示温度,而不需要使用一个float四个字节来表示这个数据。

        可以这样设计:使用一个字节来表示,最小值为-5,比例为0.1,最大值25(未来版本添加范围检测,这版本暂时没有),解算得到的数据=接受数据*比例+最小值

        如接收到0x01,那么对应的温度=1*0.1+(-5)=-4.9℃,含义为接收到数据为0x01时,对应的温度数据为-4.9℃。

        配置内容主要包括以下内容:

  • 位置:在协议帧中的起始位置。
  • 字节数:在协议帧中占用多少字节。
  • 分辨率:数据换算时使用的比例。
  • 高低位:大于1个字节时,考虑按照“高字节在前”还是“低字节在前”的方式解析。
  • 最大值:解算后数据的最大值。
  • 最小值:解算后数据的最小值,非常类似一次函数,y=kx+b,k为比例,b为最小值。
  • 含义:表示当前描述的字段代表的意义。    

    

3.6 按位转发

        有时一些开关量,则只需要使用1个bit则可以进行表示。这里考虑是一个数据取值代表一个状态。

        配置说明:

  • 位置:在协议帧中的位置。
  • 取值:对应相应数据的十六进制取值,中间使用英文逗号","隔开。
  • 含义:对应取值的含义,中间使用英文逗号","隔开。

        配置说明,在协议帧第5个字节,如果此时取值为0x01时,对应的状态量为开机;如果取值为0x02时,对应的状态量为关机。

 4 解析实时数据

        从主界面选择“解析”则进入“解析实时数据”,通过选择相应的配置文件,配置实验数据和通信接口,则可以实时解析通信接口的数据。左键按住除了菜单栏的灰色无内容地方可以拖动窗口到想要位置。去掉原始的“最大”,“最小”,“关闭”按钮,因为windows系统左键按住标题栏的时候,会造成通信接口卡顿。这里去掉标题栏,可以通过文件里选择“退出”,或者使用快捷键"ESC",退出本界面。

4.1 选择文件

        文件菜单选择相应的协议文件。选择文件之后,协议的内容会在2中显示出来。同时在3框中,显示操作记录,其中“数据库连接测试”表示如果在主界面选择了数据库保存,则进入界面的时候,会开启一个数据库连接测试线程,如果不通过,则需要进行数据库配置检查。在框4中,显示的协议描述文件的全部内容。

         曲线说明,选择完协议文件,则在“曲线”菜单下,可以看到协议中定义的“原始数据”和“映射换算”的数据对应的曲线。例如本协议里包含“温度”、“电压”、“帧计数”三个曲线。

         曲线显示示意如下图所示:

        曲线点数设置是指上面曲线图像一整个界面里能显示的点的数量,超过的前面的数据会被移除出去。显示的点数可以根据自己需要显示的曲线:

4.2 配置实验信息

        通过配置实验信息,方便以后查找数据。且配置了相应的信息,才可以打开数据端口。

4.3 配置通信端口信息

  • 串口

        设置串口通信。

  • UDP

        设置UDP通信。

        单播时需要设置目标IP,端口号,本机IP。

        组播时,主要需要本机IP和端口号。

创作不易,如果意见建议欢迎随时提出,或者发送邮件:13051506610@163.com

如果其他合作也联系:13051506610@163.com

如果对您有帮助,可以点赞或赞赏,不胜感激。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...