专利名称:一种结构体定义和结构输出的方法及装置的制作方法
技术领域:
本发明涉及自动代码生成技术,更具体说利用配置文件模板方法快捷的自动生成用户自定义结构体文件和结构体内容打印文件的一种方法以及实现这种方法的一种代码自动生成装置。
背景技术:
在冶金过程控制系统开发过程中,多个系统间进行数据交换,常通过以太网以TCP/IP协议按照二进制字节流方式传递数据。对于大量的二进制数据,为了便于解析和管理,通常将这数据以某些结构集合在一起,形成用户自定义结构体。对于小型系统设计来说,整个系统中定义的数据结构并不是很多,在开发阶段可以用人工输入方式生产这些结构体。但随着系统越来越复杂,定义结构体也随着变的复杂,往往是多层结构嵌套等。这对开发人员来说,定义这些结构体变得异常复杂和繁琐,而且维护管理也很不方便。尤其当系统接口数据发生变化时,修改接口数据结构不但繁琐而且容易出错。同时,在程序调试和测试阶段,结构体存储的内容是二进制,想要查看和跟踪数据非常困难,如果能够实时将结构体中的内容打印出来,这样将大大调高程序调试和测试的效率。所以为了提高程序开发,调试,测试效率,简化维护管理步骤,发明了一种基于文本模板配置的用户自定义结构体定义和内容打印方法。并提供一种采用了应用代码生成技术实现上述方法的装置。应用代码生成技术是使用程序生成代码的一种技术,它最初的用途是把高级语言编译成汇编代码,机器指令,是语言转换,编译不可缺少的工具,尤其是在XML语言出现时代码生成器越来越多的应用到高级语言程序代码的生产中。代码生成所包含的面非常之广,有文本模板,正则表达式,XML以及命令行等。但是对于目前最普遍的层生成器,所使用的技术有很多是共通的。本代码生成装置就采用了文本模板技术来实现。文本模板代码生成通常借助一些文本模板工具来产生和维护一个具有复杂结构类型的文件,而应用程序只关注产生代码格式,这样可以把逻辑的定义和逻辑的代码格式相分离,形成符合程序执生成器的简单性和完整性。
发明内容
本发明提供了一种基于文本配置模板,快速自动产生用户自定义结构体定义以及结构体内容输出的方法,同时也提供了实现此方法的代码自动产生的装置。该方法的特点在于:根据使用者需求在Excel模板文件中配置用户自定义结构的各种属性。所述配置文档其特征在于,每个sheet页中配置一个唯一结构体的属性,不同结构体属性配置在不同的sheet页面中。Sheet页面的名称定义为结构体名称。对于结构体属性的设计,其特征在于,结构体属性中包括结构名称,标识类型(标识类型名称和结构体名称定义相同,它用来在别的结构体成员类型名称),数据成员个数,数据成员属性以及结构体描述信息。这些信息大部分作为结构体功能的描述信息最终输出到结构体定义文件以及内容输出文件中。对于结构体数据成员属性的设计,其特征在于,所述数据成员属性包括数据成员名称,数据成员类型,长度,数组标识,数组维数,维数大小,单位,上下限条件及描述信息。上述这些信息大部分作为结构体数据成员功能描述信息在结构体定义文件以及内容输出文件中体现。结构体属性转换为配置数据库中的结构体表和结构体类型表。其特征在于,结构体名称、标识类型和描述映射到结构体表中,主键为结构体名称。所以在配置文件中不能出现相同名称的结构体。每个结构体本身可能作为其他结构体数据成员的类型,所以结构体的标识类型映射到结构体类型表中。结构数据成员体属性转换为配置数据库中的结构体数据成员表,其特征在于,结构体数据成员表用数据成员在结构体中的序列号作为主键和结构体表中结构体名称作为外部键。数据成员的其他属性映射为数据成员表中的其他数据列。配置数据库映射表产生出符合程序规范(本发明用C/C++规范)的结构体定义文件及内容打印文件的方法,其特征在于:配置数据库中结构体表,找到结构体名称,再从结构体数据成员表中查询到结构体名称所属的所有数据成员值,类型等,按照C/C++规范输出到以结构体名称命名的文件中,形成结构体定义文件(*.h)。结构体定义文件,如果结构体数据成员类型为其他数据结构体,则要先迭代产生数据成员类型中结构体的定义文件,并在所述结构体定义文件中包含数据成员结构体类型文件。结构体定义文件的同时,遍历配置数据库中结构体表和数据成员表,根据数据成员类型格式化输出显示结果,并将结构输出到以结构体名称命名的数据文件,生产结构内容打印文件(.cpp)。内容打印包括,标准屏幕打印和日志文件打印。屏幕打印结构体内容将只在应用程序标准输入输出界面显示,日志文件打印将结构体内容输出到用户日志文件。用户可以在程序中选择使用两者中一种或者两种打印方式。上述两种内容打印方式的内容相同,其中内容包括:结构体数据成员名称、数据成员类型、数据成员描述及结构体成员数值;格式为:内容描述{结构体数据成员名称+数据成员类型+数据成员描述}=结构体数据成员数值。有益效果本发明具有如下一些优越性:(I)通过对复杂系统开发过程中多层次结构体嵌套的定义和自动生成,极大提高了多层次复杂结构体的生成效率,及在程序开发过程对复杂结构体的管理和维护效率;(2)本发明中的复杂数据结构数据成员格式化输出显示,为所开发系统在调试过程中和使用过程中的中间结果输出提供了便利的手段,从而提高系统的开发效率和使用便捷性;(3)本发明所包含的代码生成装置,为使用者提供了便捷的使用手段,可以满足使用者对复杂结构体的定义和维护等功能。总之,本发明通过对复杂多层次数据结构的定义、自动生成和格式化输出,极大的提高了在复杂系统开发中用户自定义结构体的定义和维护的效率,以及整体系统开发、调试和使用的效率和便捷性。
图1描述了结构体配置文本模板的格式。图2描述了结构体定义和结构输出的方法流程图。图3描述了配置文件到配置数据库的转换流程。图4描述了配置关系库中主要表的关系图。
具体实施例方式参考图1所描述的配置文本模板,安装此模板定义用户自定义结构体属性,形成结构体配置文件。为了方便实施本发明中说描述的方法,在本发明实施例中提供了 一个实现说明书中所述方法的装置,其特点在于利用软件设计方法,采用VS2010VB.net开发环境,结合微软Access数据库实现用户自定义结构体定义以及结构体内容打印代码的自动生成。此装置具有以下特点:该装置主要提供可视化界面,用来查看用户配置结构体所有信息,查看文件输出配置,提供人机交互功能接口实现配置文档的导入,配置信息编辑,如添加,删除和修改等功能。最后实现代码的自动生成。具体执行流程为:参考图3将结构体配置文档导入到系统,同时完成配置文件到配置关系库的转换。在此装置对Excel配置文档和Access数据库都采用OLEDB访问方式。使用连接对象 System.Data.0leDb.0leDbConnection 建立连接,用 System.Data.0leDb.0leDbDataAdapter 查询数据,数据集存储在 System.Data.0leDb.DataSet 中。配置文件导入到系统后,形成了配置数据库,包括基本类型表,结构体表,结构体成员表以及其他辅助类型的表。这些表之间的关系参考图4。,此装置最后一个步骤就是将配置在数据库中的结构体按照程序规范(本发明采用C/C++)产生出定义文件,以及结构体内容输出文件。定义文件的格式是:每个结构体产生一个独立文件,文件后缀为h”。在文件中除了结构体描述外,还定义一个结构体输出函数声明。出现结构体嵌套时,在这个结构体定义文件中包含嵌套结构体的头文件。内容输出文件格式是:每个结构体产生一个独立的内容输出(打印)文件,文件后缀为cpp”。在此文件包含对应结构体定义头文件,同时实现在头文件声明函数。在程序要要到这些定义的结构体时,需要将结构体定义文件包含在程序中,如果要打印结构体内容,则需要将头文件和CPP文件同时包含在程序中编译。
权利要求
1.一种结构体定义和结构输出的方法,其特征在于: 步骤一、根据使用者需求在Excel模板文件中配置用户自定义结构的属性,每个sheet页中配置一个唯一结构体的属性,不同结构体属性配置在不同的sheet页面中,Sheet页面的名称定义为结构体名称; 所述的结构体属性中包括结构名称、标识类型、数据成员个数、数据成员属性以及结构体描述信息;上述结构体属性信息将作为结构体功能的描述信息最终输出到结构体定义文件以及内容输出文件中; 所述的数据成员属性包括序列号、数据成员名称、数据成员类型、长度、数组标识、数组维数、维数大小、单位、上下限条件及描述;上述数据成员属性信息将作为结构体数据成员功能描述信息在结构体定义文件以及内容输出文件中体现; 步骤二、建立配置数据库,配置数据库包括结构体表、结构体类型表和结构体数据成员表;将所述的结构体名称和结构体描述信息映射到配置数据库的结构体表中,其中结构体表的主键为结构体名称;将所述结构体名称和标识类型映射到配置数据库结构体类型表中,主键为结构体名称;将所述的数据成员属性转换为配置数据库中的结构体数据成员表,结构体数据成员表用数据成员在结构体中的序列号作为主键和结构体表中结构体名称作为外部键,数据成员的其他属性映射为数据成员表中的其他数据列; 步骤三、从结构体表中找到结构体名称,再从结构体数据成员表中查询到结构体名称所属的所有数据成员属性信息按照相应的程序语言规范输出到以结构体名称命名的文件中,形成结构体定义文件; 在形成结构体定义文件的过程中,如果结构体数据成员类型为其他数据结构体时,则要先迭代产生数据成员类型中结构体的定义文件,并在所述结构体定义文件中包含数据成员结构体类型文件; 结构体定义文件的同时,遍历配置数据库中结构体表和结构体数据成员表,根据数据成员类型格式化输出显示结果,并将结构输出到以结构体名称命名的数据文件,产生结构内容打印文件;内容打印包括:标准屏幕打印和日志文件打印,标准屏幕打印结构体内容只在应用程序标准输入输出界面显示,日志文件打印将结构体内容输出到用户日志文件;用户在程序中选择使用两者中一种或者两种打印方式;上述两种内容打印方式的内容相同,其内容包括:结构体数据成员名称、数据成员类型、数据成员描述及结构体成员数值。
2.一种实现如权利要求1所述的结构体定义和结构输出方法的装置,其特征在于:该装置包括可视化界面、导入和编辑器、转换器、代码生产器; 可视化界面:用来查看用户配置结构体所有信息,提供功能接口 ; 导入和编辑器:用来将步骤一中产生的配置结构体信息文件导入装置中,并对结构体信息进行编辑; 转换器:用来将导入和编辑器所产生的结构体信息转换成配置数据库映射表; 代码生产器:用来将转换器所产生的配置数据库中的结构体信息输出到文件,最终产生结构体定义文件和结构体内容输出文件。
全文摘要
一种结构体定义和结构输出的方法及装置,本发明涉及自动代码生成技术。本发明根据使用者需求在Excel模板文件中配置用户自定义结构的各种属性,产生出一个完整的结构体描述配置文件;从所述配置文件中分析提取出结构体之间的嵌套和复用关系,将结构体属性,结构体之间的关系相结合,生成结构体配置的配置数据库;遍历所述配置数据库中结构体属性表,找到每个结构体属性,按照程序语言规范产生出结构体定义文件,根据数据库存储的结构体之间的关系,通过迭代方法生成结构体结构内容打印文件。本发明同时公开了一种实施上述方法的装置,应用该方法和装置极大的提高了在过程控制系统开发中用户自定义结构体定义和维护的效率。
文档编号G06F9/44GK103116500SQ20131007569
公开日2013年5月22日 申请日期2013年3月11日 优先权日2013年3月11日
发明者高雷, 刘维兆, 郭立伟, 陈丹, 李书昌, 王彦辉, 赵强, 龚彩军, 李亮举 申请人:北京首钢自动化信息技术有限公司