基于脚本的嵌入式软件仿真及测试一体化平台的构建方法_2

文档序号:9765892阅读:来源:国知局
[0036]图2是实时处理机中总线驱动模块实现原理图;
[0037]图3是实时处理机中任务注册及调度模块实现原理图;
[0038]图4是实时处理机中脚本解释器与其他模块的关系;
【具体实施方式】
[0039]为了便于本领域普通技术人员理解和实施本发明,下面结合附图和实施例对本发明作进一步的详细和深入描述。
[0040]在主控机中构建具有异常检测功能的脚本开发模块具体包括下面步骤:
[0041]步骤一、构建脚本开发模块,实现一个具备仿真模型导入功能的集成开发环境,用于开发测试用例脚本和仿真模型脚本。
[0042]在主控机中构建脚本开发模块是由于主控机中Windows平台提供良好的图形用户界面,便于开发功能强大的集成开发环境,极大的提高脚本的开发效率。在实现时采用Visual Stud1开发环境和Sinti I IaNet窗体控件开发脚本开发集成环境。首先,将SintiI IaNet控件所在目录添加到环境变量中,然后将SintiIIaNet.dll添加到VisualStud1工具箱中。导入后可以调用scinti I la.NativeInterf ace获取原生接口,利用其提供的API接口实现脚本编辑、脚本自动补全、代码折叠、语法高亮、代码注释等功能。
[0043]嵌入式系统中,仿真模型库大多采用C/C++语言编写,而Python脚本语言的底层采用C语言实现,因而采用Python脚本语言可以方便的通过混合编程技术导入仿真模型,复用已有的仿真模型库。具体地,模型导入功能的实现方法是:I)将已有的仿真模型的程序源代码制作成一个动态链接库。首先将代码导入Tornado开发环境创建downloadable vxworksproject工程,将每个仿真模型代码封装成可调用的函数,编写头文件指定函数调用约定方式、定义复杂数据结构的结构体和导入导出函数。如果采用C++的工程,导出的时候需要添加extern“C”,这样Python中才能识别导出的函数。最终生成.ο格式的动态链接库。2)编写Python仿真模型脚本,在脚本中采用继承的方式构造和动态链接库中一致的数据结构,然后为每个调用的函数设置参数类型和返回值类型。该脚本不提供仿真模型的实现,只需要在Python脚本中导入制作好的动态链接库。
[0044]测试用例脚本和仿真模型脚本编辑完成以后,存放在主控机中。仿真和测试执行前,主控机将脚本文件的路径下发到实时处理机中,实时处理机中的实时脚本解释器采用FTP协议,根据路径读取主控机中的脚本解释执行。与测试脚本不同,导入的仿真模型被制作成.ο动态链接库以后,在仿真执行前将会通过TCP/IP协议下发到实时处理机中。执行时,脚本解释器首先读取主控机中的脚本,执行时遇到导入语句时,直接读取实时处理机中的.0动态链接库执行。
[0045]步骤二、构建异常检测模块,包括脚本解释器和语义检查模块。
[0046]对于异常检测模块中的语法检查功能,并未采用传统的编译技术中的自动机理论,而是充分利用了 Python脚本语言解释运行的特性,采用后台运行脚本的方式获取语法检查结果。仿真和测试脚本开发完成以后,首先在后台启动脚本解释器解释执行,并截获Python解释器解释运行的控制台信息作为语法检查的结果。为了方便用户完成仿真和测试,一体化平台的脚本中需要添加相应的接口,包括仿真中的数据发送接口 send_var、数据接收接口 recv_var以及任务注册接口 reg_task。测试中的测试激励接口 in ject_var、测试反馈接口 feedback_var和任务注册的接口 reg_task。但是这些添加的接口无法被标准解释器识别,因此需要对标准解释器进行扩展,将这些接口内嵌入脚本解释器。由于主控机与实时处理机中的脚本解释器扩展接口的目的不同,因而对接口具有不同的实现。主控机中脚本解释器扩展接口的目的是执行脚本时能够识别这类接口,进而得到正确的语法检查结果。因而,此处对每个接口只需提供简单实现,无需完成真实的仿真和测试过程。其中,具有返回值的接口,实现是一条返回语句,返回的数值是与接口返回值类型相同且处于有效区间的任意值。对于没有返回值的接口,无需提供具体的实现。除了接口实现不同,主控机与实时处理机中的脚本解释器扩展接口的参数类型、参数个数、返回值类型必须完全一致,这是由于脚本的开发位于主控机,而脚本的执行位于实时处理机,脚本的开发和执行虽然处于两个不同的平台,但操作的是同一个脚本,主控机中脚本开发模块语法检查的结果必须与实时处理机中检查的结果保持一致。
[0047]对于异常检测中的语义检查功能,实现与仿真和测试相关的语义检查,仿真和测试相关接口的参数进行语义检查。由于测试脚本与其他模块进行交互主要通过三种方式,分别是变量赋值(仿真中的数据发送和测试中的测试激励),变量取值(仿真中的数据接收和测试中的测试反馈),以及任务注册(仿真和测试中的任务注册)。因此,仿真和测试相关的语义检查主要包含以下三类:I)变量赋值中可能引发的异常主要有:变量名错误、变量长度或变量类型错误。进行语义检查时,需要到变量表里查询测试激励变量,如果从变量表中找到相同名称的变量,且测试激励变量值的长度和类型与变量表中描述一致,则认为脚本未出现测试激励语义异常,否则,抛出异常,提示用户修改脚本。2)变量取值中可能引发的异常是变量名错误。语义检查时,到变量表中查询测试反馈变量,如果能找到该变量,则认为脚本未出现测试反馈语义异常,否则抛出异常。3)任务注册中可能引发语义异常的主要有:任务的周期错误、任务起始时间错误、任务结束时间错误。如果任务的周期、任务的起始时间和任务的结束时间均为大于等于零的整数,且任务的结束时间大于任务的起始时间,则认为脚本未出现任务注册语义异常,否则抛出异常。
[0048]步骤三、集成脚本开发模块与异常检测模块,将异常检测模块链接到脚本开发模块中。
[0049]脚本开发模块与异常检测模块集成包括两部分内容,分别是负责语法检查的脚本解释器与脚本开发模块集成以及语义检查与脚本开发模块集成。脚本解释器与脚本开发模块集成的主要工作是信息流重定向。脚本解释器采用模拟运行的方式进行语法检查,由于脚本运行时解释器无法获得控制台输出,为了使用户能够看到提示信息,需要将脚本中输出语句的输出信息重定向到脚本开发模块的界面中。脚本的语法错误信息也要重定向到脚本开发模块的界面中。语义检查模块与脚本开发模块集成时,完成的交互主要包含两部分,一是语义检查模块从脚本开发模块中导入变量表,根据变量表中变量的名称、类型等信息进行测试相关的语义检查。二是语义检查结果发送给脚本开发模块,最终通过脚本开发模块显示给用户。
[0050]实时处理机部分,采用Tornado开发环境构建总线驱动模块、任务注册及调度模块以及实时脚本解释器,并在运行前加载到实时处理机。具体包括以下三个步骤:
[0051]步骤一、采用总线、数据帧和帧变量的组织方式构建总线驱动模块。
[0052]在仿真及测试一体化平台出现以前,研制单位采用真实的设备进行仿真测试,被测设备通常需要与多个外部交联设备及测试设备通过总线进行连接(图1中虚线部分)。而构建仿真及测试一体化平台时,采用一台实时处理机代替了所有的外部交联设备和测试设备,其中,仿真模型脚本代替了外部交联设备,测试用例脚本代替了测试设备。此时,被测设备与实时处理机之间的总线需要通过总线驱动模块进行管理。对总线信息的描述采用总线-数据帧-帧变量的三级层次结构。下面通过实例讲解总线通讯模块的实现。如图2所示,总线驱动模块管理了两条通信总线,分别是RS-422总线和ARINC429总线,总线通信模块中记录每条总线的通信属性,如通信地址、波特率等。每条总线上传输一个或多个数据帧,每个数据帧具有传输周期、传输方向、数据帧长度等数据帧属性。如图2中的数据帧Framel的传输周期为5ms,方向为箭头所指示的方向。每个数据帧是由多个帧变量构成,每个帧变量有变量类型,变量长度等信息。如图2中Framel由三个帧变量构成。帧变量是仿真模型脚本和测试用例脚本操作的对象,仿真模型通过改变帧变量的值实现模型计算结果的发送,测试用例通过改变帧变量的值进行测试激励。仿真模型和测试用例对帧变量的值的修改,最终都在任务注册及调度模块的调度下,通过总线驱动模块在发送给被测设备。
[0053]步骤二、构建任务注册及调度模块,该模块接收脚本解释器在执行脚本时注册的仿真及测试任务、总线通信模块中的通信任务,总线通信模块中的通信任务,并按照周期及优先级属性执行调度算法对任务进行排序。
[0054]任务注册及调度模块管理的任务包括三部分,分别是仿真模型脚本中的仿真任务
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1