本发明涉及一种基于XML的结构化多变量信息帧的界面赋值方法。属于软件工程技术领域。
背景技术:
在软件工程技术中,信息帧是一种常用的数据传输格式,对于多变量的信息帧编制方法一般采用结构体进行定义,界面控件的赋值也需采集结构体中定义的对应字段。在软件升级,特别是信息帧变量数目或整个结构变化时需要对结构体进行重新编制,且相关数据处理方法、界面控件的赋值相关内容等也需进行修改,其编写、测试以及调试等工作量非常大。
某型船载系统监控台,监控对象为测控设备,设备信息量大、数据类型复杂,软件设计采用了结构体形式。在某个测控设备功能增加后,信息内容发生简单变化,软件中重新定义了结构体,相关解析、界面赋值等函数也进行了修改,大约花费一个月时间才完成系统联试。
本发明利用XML技术设计了一种一种基于结构化多变量信息帧的界面赋值方法,为解决这一问题提供一种实用、简便的方法。
技术实现要素:
本发明所要解决的技术问题是针对上述现有技术提供一种基于XML的结构化多变量信息帧的界面赋值方法,在信息帧发生变化时不需要进行重新编制,并且对于后期的数据处理也不需要花费大量的时间来修改,大大提高了工作效率,降低了工作强度。
本发明解决上述问题所采用的技术方案为:一种基于XML的结构化多变量信息帧的界面赋值方法,所述方法包括以下步骤:
步骤一、对结构化信息数据进行组帧形成信息帧
信息帧由控制域和数据域组成,控制域包括帧头、数据变量数和变量积时字段,数据域由多个变量按照约定顺序进行排列,按照数据类型,将数据中可以表示为1bit或几bit的数据进行组合,作为XML文件某个节点的子节点进行表示;将数据中有明确字节定义,且占用字节较多的数据,作为某个节点进行表示;将一些具有明显特征的自定义数据类型,作为某个节点进行表示;
步骤二、形成表征信息帧结构的XML文件
(1)具有子节点的节点
具有子节点的父节点具有4种属性,分别为描述、标识码、数据类型和数据值,描述用于增加可读性,标识码用于表明数据与节点关系,数据类型根据子节点所需位数来定义该节点的类型,数据值为子节点数据转换后的值;
其子节点定义8种属性,分别为描述、容器名、容器类型、控件名、控件类型、数据起始位、数据长度、数据值,每个子节点的数据类型均为bit,按照数据起始位和数据长度来决定它在父节点数据转为二进制数据类型后的位置关系,即数据长度决定了该子节点的位数;
(2)无子节点的节点定义
该节点定义10种属性,分别为描述、容器名、容器类型、控件名、控件类型、标识码、数据类型、数据值、最大值、最小值,描述用于增加可读性,标识码用于表明数据与节点关系,数据类型根据所需类型(也可自定义类型)进行定义,最大值、最小值(可为空)表征数字型数据值的上限和下限;
步骤三、通过读XML文件的方法实现界面赋值
通过遍历步骤三的XML文件,读取每个节点或子节点的控件名属性,按照数据类型属性对数据值属性完成类型转换,得到界面显示控件所需的数据值,然后在XML规定的界面容器中按照控件类型进行查找,如果控件名和控件类型相同,则按照控件类型进行赋值,再准备下一次查找,直到读完XML文件最后一个节点。
优选地,所述步骤一中的信息帧控制域包括编码字段,步骤二中的数据域根据大小,可以分为一个或多个数据域,通过控制域的编码字段进行区分。
与现有技术相比,本发明的优点在于:
(1)本发明适用于网络软件数据传输中的数据帧设计,便于数据交互和后期维护。
(2)本发明同时适用于工业控制总线数据传输中的数据帧设计,具有设计简单,实现方便的优点。
(3)本发明能同时适用于自定义数据结构的数据帧设计,具有灵活、简明的优点。
(4)本发明兼顾考虑了数据帧校验的设计问题。
附图说明
图1为本发明一种基于XML的结构化多变量信息帧的界面赋值方法的流程图。
图2为本发明一种基于XML的结构化多变量信息帧的界面赋值方法中XML文件书写格式图。
图3为本发明一种基于XML的结构化多变量信息帧的界面赋值方法中信息帧结构图。
图4为本发明一种基于XML的结构化多变量信息帧的界面赋值方法中XML文件结构化定义图。
图5为本发明一种基于XML的结构化多变量信息帧的界面赋值方法中所定义XML文件。
图6为本发明一种基于XML的结构化多变量信息帧的界面赋值方法中界面控件轮询赋值的流程图。
图7为本发明一种基于XML的结构化多变量信息帧的界面赋值方法中读XML文件的界面赋值图。
具体实施方式
以下结合附图实施例对本发明作进一步详细描述。
本发明涉及一种基于XML的结构化多变量信息帧的界面赋值方法,如图1所示,具体过程为:
第一步、对结构化信息数据进行组帧形成信息帧
信息帧由控制域和数据域组成,控制域包括帧头(1byte)、数据变量数(4byte)、变量积时(相对当天00时00分00秒的秒数,4byte)、编码(对应多数据域,对每个数据域进行标识,相当于高级语言中每个结构体的命名,2byte)。
数据域由多个变量按照约定顺序进行排列(nbyte),如图2所示。按照数据类型,将数据中可以表示为1bit或几bit的数据进行组合,作为XML文件某个节点的子节点进行表示;将数据中int(uint)、double、float、char等有明确字节定义,且占用字节较多的数据,作为某个节点进行表示;将一些具有明显特征的自定义数据类型,如定义60个字节的中文描述,作为某个节点进行表示。根据数据域大小,可将数据域分为一个或多个数据域(也就对应了一个或多个XML文件),通过控制域的“编码”字段进行区分,也就是“编码”与XML文件进行了关联。
第二步、形成表征信息帧结构的XML文件
本发明依赖于XML(eXtensible Markup Language,可扩展标志语言)的规则性描述语言,语言示例如图2。其中,A为XML前奏,version表示版本号,encoding表示编码类型;B为XML标签,包含元素和属性,attrs为根元素,devType、edition为属性;C为XML注释,用于解释定义的属性;D为子元素(这里成为节点),也包括元素和属性;E为子元素中的子元素(这里成为子节点),也包括元素和属性。无论是根元素还是子元素,对于XML定义必须闭环,如定义<attrs>根元素,必须定义</attrs>结束。
单结构体的内部定义包含两部分;字段和类型(或嵌套结构体),结构体(上层结构体)可嵌套多个单结构体,XML文件的总体结构按照结构体形式定义,上层结构体内容对应XML文件的节点,嵌套结构体内容对应子节点。为实现界面赋值,节点和子节点属性必须包含类型和值。
对于结构化信息对应的界面控件,一般包含文本框、选择框、指示类控件和为丰富界面所用的各型容器类控件,在XML文件属性中必须包含容器控件类型和名称、各种显示控制的类型和名称。
XML文件结构
XML文件结构如图4所示。
(1)具有子节点的节点定义
具有子节点的父节点具有4种属性,分别为描述、标识码、数据类型和数据值,描述用于增加可读性,标识码用于表明数据与节点关系,数据类型根据子节点所需位数来定义该节点的类型,数据值为子节点数据转换后的值;
其子节点定义8种属性,分别为描述、容器名、容器类型、控件名、控件类型、数据起始位、数据长度、数据值,每个子节点的数据类型均为bit,按照数据起始位和数据长度来决定它在父节点数据转为二进制数据类型后的位置关系,即数据长度决定了该子节点的位数。
(2)无子节点的节点定义
该节点定义10种属性,分别为描述、容器名、容器类型、控件名、控件类型、标识码、数据类型、数据值、最大值、最小值,描述用于增加可读性,标识码用于表明数据与节点关系,数据类型根据所需类型(也可自定义类型)进行定义,最大值、最小值(可为空)表征数字型数据值的上限和下限。
第三步,通过读XML文件的方法实现界面赋值
界面赋值是一种低频率的刷新方法,通过遍历XML文件,读取每个节点或子节点的控件名属性,按照数据类型属性对数据值属性完成类型转换,得到界面显示控件所需的数据值,比如文本框的字符、下拉框的selectitemindex值;在XML规定的界面容器中(也可无),按照控件类型进行查找,如果控件名和控件类型相同,则按照控件类型进行赋值,再准备下一次查找,直到读完XML文件最后一个节点。
实例:
下面以某一种C#编程环境下网络信息帧结构设计为例,展示本发明在实际中的应用过程。按照发明步骤一的原则,依次实现:第二步、编写表征信息帧结构的XML文件,;第三步,使用控件轮询方法实现界面赋值。
第二步、编写表征数据帧结构的XML文件。
根据数据帧编制原则,编写XML文件,如图5所示。第一个帧头节点,定义如下属性:id、desc、dataType、Value,Value约定为40;第二变量数节点,定义属性同帧头节点,Value对应数据变量个数;第三积时节点,定义属性同帧头节点,Value对应数据发送时刻相对于当日0时的积秒值;第四编码节点,定义属性同帧头节点,Value对应编码值;第五以后为数据节点,分为有子节点和无子节点类型,无子节点定义属性为:desc、ConName、ConType、Id、IdType、code、dataType、Value、Max、Min,有子节点定义属性分别为:desc、code、dataType、datavalue(顶层节点)和desc、ConName、ConType、Id、IdType、Startpos、length、Value(内部节点)。
第三步、使用控件轮询方法实现界面赋值。
在C#中提供了对XML技术支持的类库,可以便利实现对XML文件的读写,通过读XML文件对应节点属性值就可以实现界面控件的自动赋值,其软件流程如图6所示。程序通过System.Xml类库的XmlDocument、XmlElement属性,定时读取指定XML文件从第四数据节点后的数据:提取对应节点的id属性值、Value属性值等信息,数据校验合格后,遍历界面容器查找名称为id属性值的控件,如找到则对应赋值;循环读取下一个节点数据,并进行处理赋值,直到所有数据节点读取完毕,程序运行界面如图7所示。
除上述实施例外,本发明还包括有其他实施方式,凡采用等同变换或者等效替换方式形成的技术方案,均应落入本发明权利要求的保护范围之内。