基于代码自动生成的计算机辅助系统设计与实现

2015-12-05 05:11李丽萍孟小丰刘立辉
航天控制 2015年4期
关键词:代码生成时序表格

李丽萍 孟小丰 刘立辉

北京航天自动控制研究所,北京100854

随着航天技术的不断发展,软件的应用范围越来越广,其中一类非常重要的软件——时序控制软件,其主要功能是按照一定的时间逻辑序列,完成飞行任务过程中实时控制指令的接收与发送。此类软件的特征是:在基线状态建立后,后续的每次任务中仅需要对软件中的数据进行局部修改,程序的框架和具体功能不变化。

在航天软件研制过程中,传统的采用手动编写软件代码的研制模式逐渐显露出各种弊端,其基于人工手动进行软件更改的方式越来越难以适应现代高速发展的控制系统时序软件的复杂性,存在效率低下与错误率高等许多缺点。软件生成的方法与手段的落后,在一定程度上浪费人力资源,影响设计质量,因此进行时序类软件自动生成技术和方法研究是非常有意义的。

时序软件代码自动生成的计算机辅助系统是实现从原始的任务输入文件(一般为WORD 文件)到目标代码文件的自动生成集成环境,它的主要优点在于以图形界面的方式向用户提供了可视化的软件自动生成工作环境,实现任务语言到软件代码的智能转换,具有效率高、质量可靠、通用性强及人机界面友好的特点。该系统使软件的生成工作变的直观、简单,并且该系统还兼顾了对测试结果进行判断的功能,进一步确保软件的可靠性。

1 系统设计总体思路

时序控制软件主要功能是实现时序的发送功能,主要是以顺序执行的方式进行,即到一定时间发送一个时串以控制箭体完成某种动作,时序时串的时间值来源于系统任务书中的时序时串表。其程序的主体适用瀑布式通用程序框架,主要是任务要求的时序时串数值、数量及组合发生变化,并且这些时序的发送功能相似,不同之处也有规律可循,因此可实现自动生成的方式完成时序时串代码的生成工作和测试数据辅助判读工作。时序控制软件的自动生成应实现从软件任务书(Word 文档)到最终软件代码的自动识别、自动转换、自动生成、单元测试辅助判读,因此应具有以下功能:

1)自动识别:读取系统提供的任务书中的有效数据,如时序时串表格,进行逐行扫描,获取包括火箭级数、待转换的时串名称等有效信息(同时兼容Office 多个版本),进行规格化检查后得到规格化的原始数据;

2)自动转换:原始数据完成规格化处理后,按照代码转换规则(时串外部地址规则文件和地址内存规则文件),转换成带有注释的中间代码,并且自动转换可适应不同数据规格和数据量的变化;

3)自动生成:选择所需生成的时串级别,将中间代码插入指定的源代码模版文件后自动生成程序源代码,编译连接按钮一键生成最终的代码执行程序;

4)单元测试辅助判读:生成与单元测试结果格式一致的结果文件,与人工测试的单元测试结果进行比对,可设置判读门限,将不一致的地方标出,以供测试人员进行使用。

2 计算机辅助系统设计与实现

该系统应具有原始数据自动识别功能、中间数据的自动转换功能、软件代码的自动生成及测试结果的自动判读功能。基于这些功能,本系统可设计为3 层:表示层、业务层和I/O 层。其中I/O 层是软件的最底层,负责文档的读取和代码存盘;业务层为中间层,负责代码转换规则的管理以及具体的代码生成工作;表示层为最上层,为软件与用户的接口,主要包括图形界面元素。表示层、业务层和I/O 层3 级层次间的总体框架设计,可实现底层的原始数据读取及格式转换,业务层的规则提取、数据分析及代码的自动生成。最后通过表示层提交辅助自动生成的结果,图1 为软件的总体框架设计图。

图1 软件的总体框架设计图

2.1 I/O 层

I/O 层是软件的最底层,包括3个功能模块,分别是TXT 文件存储模块,TXT 文件读取模块和WORD 表格读取模块,这3个功能模块相互独立,完成文档处理功能。

1)Word 文档读取

主要负责读取Microsoft Word 程序文档,以及将转换好的代码保存到磁盘。该层是针对Microsoft Office 的VBA 编程接口的抽象层,对VBA 接口进行了封装,同时封装了Windows 操作系统下的文件操作接口。该技术应同时兼容Office 多个版本,本软件使用2个类进行Word 文档读取,其中一个类负责WORD 文档操作部分,主要包括WORD 文档的打开、关闭,选取表格,控制文档的显示等功能;另一个类负责WORD 表格操作部分,主要包括WORD表格内容的读取,获取表格的行列总数等功能。

2)文本读取与保存

程序中针对文本操作的输入输出模块用于访问代码生成中使用的指令模板。本软件的指令模板直接以文本方式存放在软件文件夹中。文本操作模块同时具备索引功能,可以在代码文件中找到指定的标志文本位置,并将代码插入指定位置中。

2.2 业务层

业务层是软件的中间层,也是核心层。其主要完成读取时串名称与外部地址和内存映射等规则,分析时序时串表,并得到级别数量等信息,根据规则生成汇编程序代码等工作。代码生成器参考代码模板,并将最终生成代码交由I/O 层的文本保存模块保存到磁盘。

1)规则管理器

用于管理代码生成过程所需的各个时串外部地址和内存地址,以及代码的模板。负责读取规则表格和代码模板并记录在内存中,同时还具有规则一致性检查功能,可以检查2个规则文件中是否有不一致的内容。本软件在用户选择规则文件后执行规则的初始化工作,并使用2个类分别管理外部地址规则和内存规则。

2)文档分析器

用于对待转换的时序时串表格进行预处理,扫描表格中的所有行列,记录有效的时串步序号,为代码生成工作做准备。

3)数据综合

为代码生成器的数据提供模块,该模块从规则管理器中找到符合规则的模板内容和地址信息,将其提供给代码生成器,数据综合管理了所有的规则、代码模板以及相应的缓存和状态信息。

4)代码生成器

为核心模块之一,其功能为将数据综合模块提供的代码模板组合起来,然后使用相应的规则信息对模板中的关键字段进行替换,从而生成相应的程序代码。使用关键字替换功能,将需要动态指定的内容定义为关键字,然后从数据综合模块获得关键字的指定信息,然后进行文本替换,使用多个代码模板联合生成最终代码。

5)测试结果分析

测试结果分析模块将测试工具的输出文本信息与规则管理器中的相应规则进行对比,标识出不符合规则的内容。由于测试结果分析同样需要使用时串规则等内容,因此主要功能实现在数据综合模块中。具体实现和接口参考数据综合模块。

6)代码检查

代码检查模块可以对已生成的代码进行一定的合法性检查,其中包括代码的标号唯一性检查和代码的长度检查。为方便日后扩展功能,代码检查功能放置在一个单独的模块文件中。

2.3 表示层

表示层主要包含用户的图形界面模块,用户可以通过表示层与本软件进行交互。本软件使用基于Microsoft Office 的图形界面,在界面中分别有相应的控制按钮响应用户指令。同时,用户界面有防止误操作的功能,用户无法进行非法的指令输入。

本软件具有代码的基本编辑功能,其中包括代码的可视化编辑,代码查找、打印、剪切、复制和粘贴及代码定位等功能。为方便将生成代码插入到文件的指定位置,本模块还有一键生成插入标志的功能,如图2 所示。

图2 代码编辑与显示示意图

使用Xtreme ToolkitPro 提供的第三方控件实现。其中包括CXTPSyntaxEditView 代码编辑视图、CXTPTabClientWnd 框架视图、CXTPDockingPaneManager 停靠管理器和CXTPCommandBars 工具栏等。

1)规则管理

规则管理界面主要用于加载和检查时串外部地址规则和内存规则。成功加载后,规则信息会在规则管理窗口中显示。对于规则检查,如果工具发现当前规则与已读入规则有不一致的地方,会以提示框的形式显示,如图3 所示。该部分使用了停靠栏加列表框控件的结构。

图3 规则管理界面示意图

2)代码生成

代码生成的用户界面主要由几个生成控制按钮组成,其中包括时序时串文件的加载和时序的选择等,如图4 所示。该功能通过响应工具栏上的指定命令按钮实现。同时,对于需要配置信息的指令,程序还会从指定配置栏中读取相应信息。

3)测试结果分析

测试结果可以在用户界面上以类似加载程序文件的方式显示。在读入结果文件后,会将其数据与工具中已加载的规则进行对比分析,将不一致的内容以特殊符号“* ”标识出来,如图5 所示,该部分的界面实现与代码生成类似,同样使用工具栏响应函数。

图4 代码生成界面示意图

图5 测试结果分析界面示意图

3 实际应用

时序软件代码自动生成工具的使用过程设计为以下步骤:

1)代码生成

在代码生成之前,需要由用户选择包含转换规则的Word 文档文件,其中包括时串外部地址规则文件和地址内存规则文件。工具读取规则后,会将读取的规则数量显示在界面中,供用户确认。

确定转换规则后,用户可以选择待转换的时序时串表格文件。点击“时序时串”命令,程序会将含有该文件的Word 程序窗口弹出,提示用户选择需要转换的表格。用户可以选择指定表格或将光标置于待转换表格中,然后点击用户界面上的读取时序信息按钮,软件对该文件进行分析,读取表格信息,包括级别个数、待转换的时串名称等,并将分析的结果信息呈现在用户界面中。

成功分析时序时串表格后,用户就可以在界面上选择所需生成的时串级别,并指定代码文件。在生成代码前,可以使用代码编辑的“标记”功能插入指定标记,自动生成的代码将填入标记所指定的位置。用户点击“生成代码”按钮后,程序将生成最终的代码文件,在找到指定插入标记的情况下,代码会被插入到指定位置,否则代码会覆盖整个文件。

2)代码检查

在完成代码生成或加载后,即可使用代码检查功能。当前本工具支持“标志检查”和“长度检查”功能。在点击相应功能按钮后,程序将逐行分析当前代码行,并执行相应检查。

3)代码编译

使用批处理文件执行代码编译工作,批处理内容如图6 所示。其中“%1”参数为当前已生成或已加载的代码文件名称,“%2”参数为工具生成的临时文件,该文件作为“hexobj”指令的输入,提供指令的输入参数。

图6 编译批处理文件内容

4)规则和时序时串表格正确性检查

本软件可分别针对地址规则表格、内存规则表格和时序时串表格进行正确性检查。

针对地址规则表格和内存规则表格,主要检查内容为规则数量是否一致,每个时串对应的外部地址是否一致,外部地址与内存地址的映射规则是否一致。

针对时序时串表格,本工具首先分析表格格式是否合法。如果合法,则在此基础上分析时序时串的数量以及对应级别、各项时间值是否一致等。

对于以上检查不一致的情况,系统将提示错误并将详细信息保存在日志文件中。

5)测试结果分析

测试结果分析同样需要加载规则参数以及时序时串表格,其加载过程与代码生成相同。成功分析时序时串表格后,用户可以在界面上选择所需读取的测试结果类型,其中包括“定时测试”和“允许测试”。“定时测试”直接使用测试结果文件中的时间值进行分析,“允许测试”则将结果文件中的时间值加上“补偿时间”值进行分析。分析工程将以已加载的时序时串表格为基础,对测试结果文件进行逐行分析,当无法找到指定结果行时,分析过程将停止并提示错误。对于测试结果中的每一行,将在该行结尾处添加规则指定的时间或地址值,并将不匹配的值用特殊符号标识。

4 结束语

目前,软件代码自动生成技术正在逐渐走向实用。本文针对控制系统时序控制软件手工生成的现状,提出了一种高效率、高可靠性的自动生成方案,并设计完成了基于数据自动生成的计算机辅助生成系统,改进了运载器控制系统时序控制软件生成的薄弱环节,使得时序控制软件生成的效率大大提高,节省了劳动力成本,可以有效地实现控制系统时序控制软件研制过程中的可靠性增长。

[1]Thomas H Cormen,Charles E Leiserson,et al. 潘金贵,顾铁成,等,译. 算法导论[M]. 机械工业出版社,2006,9.

[2]David Simon,周瑜萍. et al. Visual C ++6 编程宝典[M].电子工业出版社,2006,5.

[3]Deke McClelland,Laurie UlrichFuller. 邱燕明,周瑜萍,等,译. Photoshop CS2 宝典[M]. 电子工业出版社,2006,3.

[4]求是科技,编著. Visual C ++6.0 数据库开发技术与工程实践[M].人民邮电出版社,2004,1.

猜你喜欢
代码生成时序表格
《现代临床医学》来稿表格要求
《现代临床医学》来稿表格要求
基于Sentinel-2时序NDVI的麦冬识别研究
Lustre语言可信代码生成器研究进展
统计表格的要求
基于FPGA 的时序信号光纤传输系统
一种毫米波放大器时序直流电源的设计
代码生成技术在软件开发中的应用
基于XML的代码自动生成工具
DPBUS时序及其设定方法