首页 > 范文大全 > 正文

通用报文编解码与串口测试软件的研究与实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇通用报文编解码与串口测试软件的研究与实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

【摘 要】为提高串口测试软件的通用性和灵活性、提高测试效率,提出一种通用报文编解码串口测试软件的实现方案,重点对报文编解码所涉及的关键技术进行研究

【关键词】串口测试 串行通信 报文编解码 自动化

【中图分类号】 G 【文献标识码】 A

【文章编号】0450-9889(2015)06C-0189-02

在串行通信系统系统的测试工作中,报文协议是一项非常重要的测试内容,需要对各种报文协议进行大量的测试。测试人员在设计测试用例时针对每个报文协议手工编制大量的测试报文,再通过串口调试工具来进行串行通信并完成相关测试,最后根据报文协议来人工判读测试数据,工作量相当繁重。此外,报文协议的复杂性、枯燥性,以及重复性地输入输出数据给手工测试带来了很大的困难,大量测试报文的编制和解析更增加了手工测试的难度和出错率。编写专用的串口测试程序是提高测试效率和准确性的有效途径,但是各类系统的报文协议种类多、区别大,使用专用的串口测试程序只能完成特定系统、特定报文协议的测试任务,无法灵活满足新系统、新报文协议的测试需求。

针对上述问题,本文以提高串口测试软件的通用性和灵活性、提高测试效率为主要目标,提出一种通用报文编解码与串口测试软件的实现方案,重点对报文编解码所涉及的关键技术进行研究。

一、软件系统组成

在数字通信中,一次通信所要传输的所有数据称为报文。待测的串行通信系统各个组成部分以及系统与外界之间必须按照协议来传输报文数据,因此在对系统进行测试的过程中,报文协议是一项非常重要的测试内容,需要进行大量的报文编码、串口调试及报文解析工作。因此,通用报文编解码与串口测试软件总体上由报文元数据管理模块、报文管理模块、串口测试模块、报文解析模块共4个模块组成。

报文元数据管理模块主要实现报文系统的元数据定义功能。元数据(Metadata)是描述数据的数据(data about data),主要是对数据属性(property)的描述性信息。对于报文系统而言,元数据描述了报文协议的数据结构和报文字段的格式。报文元数据管理模块通过友好的用户界面,让用户方便地输入和维护待测试报文协议的报文元数据。

报文管理模块提供一个直观的报文编辑界面,根据指定的报文协议的元数据信息,将数据帧结构中各项参数的具体含义和可选值等信息通过友好的用户界面呈现给用户,并根据用户设定的各项参数值生成十六进制的报文数据。

串口测试模块负责将报文管理模块生成的一条或多条报文数据发送到对应的串口,并接收串口的应答报文。

报文解析模块负责解析不同应答报文的具体含义,将报文的内容和意义直观展示给用户。由用户指定需要解析的应答报文以及期望匹配的报文协议,该模块根据报文协议的元数据信息,将十六进制的应答报文解析为用户可以理解的报文状态参数值。

二、关键技术实现

(一)数据存储方式。报文元数据既可以存储于XML文件,也可以存储于关系型数据库,两种方式各有利弊:

1.XML文件随系统软件存储于本地计算机,适合在单机环境使用;XML的语法非常适合描述数据,能清晰地表示数据的逻辑结构,易于用户理解,用户使用操作系统自带的文本编辑器即可对报文元数据进行维护。但报文元数据均以明文方式存储于XML文件之中,缺乏安全性保护机制,如果是多用户共用则可能造成用户敏感数据的泄漏。

2.关系型数据库如SQL Server既能有效地存储报文元数据,又提供了很好的安全性保护机制,适合在单机环境和网络环境使用。但是采用关系型数据库增加了系统部署的工作量和难度,不利于非专业人员使用。

本文采用SQLite来存储报文元数据。SQLite是一款轻量级的关系数据库,具有零配置的特点,无需安装和管理配置,是存储在单一磁盘文件中的一个完整的数据库。SQLite可以为数据库文件设置访问密钥,从而实现基本的数据安全保护。由于SQLite既适合在单机环境使用,无需安装和管理配置,又具有关系型数据库的优点,因此是一种比较理想的数据存储方式。如果采用抽象工厂设计模式,还可以方便的迁移到其他诸如SQL Server等数据库系统以实现C/S模式运行。

(二)报文元数据管理。本文研究的串口数据帧由帧头、数据及帧尾3部分组成。帧头标记每帧报文的开始,长度和值由串口通信协议具体定义。数据域存放数据帧的信息内容如方位角、俯仰角,或控制指令如自检命令、授时命令等。帧尾是整个数据域与帧头的校验码,常用的校验方式有累加和校验、异或和校验、循环冗余校验等,有的协议帧尾使用固定的值,甚至没有帧尾。

据此设计报文元数据的存储结构,包括数据帧表、帧头表、数据域表、位域表及枚举值表。具体作用如下。

1.数据帧表:包含某一类报文的描述性名称,帧头长度,数据域长度以及校验方式。

2.帧头表:存储某一类报文帧头各个字节的描述性名称和值。

3.数据域表:存储某一类报文数据域的各个数据项的描述性名称、数据类型、存储方式等信息。数据项的存储方式又定义为高中低3个字节、高低2个字节、不含位域的1个字节、包含位域的1个字节等类型。所谓“位域”是把一个字节中的8个二进位划分为几个不同长度的区域,这样就可以用一个字节的二进制位域来同时表示几个信息。如果数据项包含位域,还需通过位域表来进一步描述各个位域的具体信息。

4.位域表:存储组成某个字节的各个位域的描述性名称、位域长度、是否提供枚举值、是否有默认值等信息。

5.枚举值表:用于创建报文编辑界面的时候,为枚举型的位域提供输入选项,如是/否、有效/无效、正常/故障,等等。枚举值表存储这些选项的描述性名称和对应位域的二进制值。

(三)报文管理。报文管理模块主要解决两个关键问题:一是从报文元数据加载指定的报文协议定义,并动态生成报文编辑界面;二是用户根据用户在报文编辑界面设定的各项报文参数,动态生成十六进制的报文数据。

1.动态生成报文编辑界面。由于不同报文协议的报文格式、内容及长度不一,因此报文编辑界面必须根据具体的报文协议来动态生成。.NET Winform的TableLayoutPanel控件提供了一个表格布局模版,适合以表格形式在窗体上动态添加控件,表格的行数也可以根据报文长度动态增加。本文使用单选按钮控件,提供默认值、枚举值及自定义值等选项来给用户指定各个报文字段的值,单选按钮控件与其所代表的报文元数据的名称和值(Name-Value)绑定,用户选中单选按钮即可将其对应的报文字段值显示在当前行。

2.动态生成报文数据。这是本文所述系统的关键功能,实现的算法是根据报文元数据所定义的字节和位域顺序,在报文编辑界面依次查找和读取各个报文字段的当前值,并将读取到的十六进制或二进制值,经数据转换和重组之后形成一条相对完整的报文。

对于占1字节、包含位域的报文字段,程序将该字节各个位域的二进制值,全部拼接成一个8位二进制字符串,再转换为十六进制值。

对于占2字节的报文字段,值范围为十进制数0~65535,需要程序对用户输入的值进行数据转换,分别提取其十六进制表示的高八位和低八位。例如十进制数60110,转换的结果为0xEA(高八位)、0xCE(低八位)。借助C#语言中StructLayout和FieldOffset特性,可以比较方便的实现相关的数据转换。

(四)发送报文。报文管理模块生成的报文并未包含校验码和帧尾,并不是完整的一条报文。在串口测试工作中,校验码也是一个重要的测试内容,还需要对缺少校验码或校验码错误的情况进行测试,如果由报文管理模块来自动计算出校验码,会对后续的串口测试工作造成不便。因此本文在设计软件时,将添加校验码和帧尾的工作放在串口测试模块实现。用户在窗体上设定校验码为“无、自动计算、随机生成错误值”三个选项之一,以及指定是否在报文末尾附加固定的帧尾值,报文将按指定的要求附加校验码和帧尾之后才被发送到串口。串口测试模块还可提供串口参数设定、自动定时发送、接收串口数据等功能。

(五)报文解析。报文解析是报文编码的逆过程。报文解析模块有两种实现方案:一是对串口测试模块接收到的报文数据进行实时的解析,二是先保存接收到的报文再进行解析。相比之下后者更为合理,因为系统在短时间内可能会接收到大量的报文数据,如果对这些数据进行实时解析和显示,界面上信息刷新的速度会非常快,用户可能还没有看清楚某个报文的具体意义,界面上的信息就已经发生了变化。因此,为了分析测试数据的需要,报文解析模块应当先保存捕获到的报文,等到捕获的报文数量达到一定值时自动或手动停止报文的捕获,然后再开始对报文进行分析。

报文解析模块根据报文的数据帧格式来读取通过串口测试模块接收到的串口数据,并根据报文元数据的定义,将串口数据逐字节、逐位域的解析还原为有具体含义的报文信息,最后通过友好的界面将报文的内容和意义直观展示给用户。报文解析功能有助于测试人员观察待测系统对于测试数据的响应是否与测试用例的预期结果相符,减少了测试人员人工判读测试结果的工作量,提高了测试效率和准确性。

综上,本文探讨和实现了一种通用报文编解码与串口测试软件的实现方案以及涉及的关键技术。实际应用情况表明,该软件能减轻测试人员的工作量,避免了测试过程中人为的疏忽和错误,提高了测试效率和正确率,同时也提高了串口测试软件的通用性和灵活性。当然,该软件还存在继续改进的空间,例如可进一步朝着自动化测试产品的方向改进,根据测试脚本自动生成测试用例,并自动形成测试结果和报表,最终实现测试过程自动化和测试结果自动化。

【参考文献】

[1]刘烨,王永斌,刘宏波.报文解析工具中的XML数据字典[J].计算机工程,2009(3)

[2]陈乃澍,吴国庆.炮兵指挥系统测试的报文通用解析编辑模型[J].火力与指挥控制,2009(6)

[3]马贤颖,刘文红,夏烨.航天测控系统遥控软件自动化测试仿真平台研究[J].系统仿真学报,2014(4)

[4]董延杰,宋朝辉,陈静.嵌入式软件串口通信自动化测试工具的研究[J].自动化应用,2014(10)

[5]曹佳佳. 应答器报文编译码的研究与设计[J]. 科技信息,2012(1)

[6]侯高雷,黄明山,李志华. 基于C~#的终端自动化测试系统设计与实现[J]. 现代电子技术,2012(2)

[7]张婷婷.基于.NET的RS-232高效串口调试程序设计与实现[J].计算机光盘软件与应用,2012(17)

【作者简介】黄 伟(1979- ),男,广西隆安人,硕士,南宁职业技术学院软件技术专业带头人,讲师。

(责编 黎 原)