发明内容
有鉴于此,本申请提供了一种基于MATLAB模型的测试方法、装置及系统,以解决现有技术中的测试方法无法保证数据读取的实时性和准确性,并且,无法满足对实时性要求较高的被测目标系统的测试需求的问题。
为实现上述目的,本申请提供如下技术方案:
一种测试方法,应用于MATLAB模型,所述MATLAB模型上预先编译有用于读写文件的第一函数,所述MATLAB模型运行于下位机预先分配的第一内存区域中,该方法包括:
利用所述第一函数加载回放数据到所述第一内存区域中,所述回放数据为所述下位机预先从上位机下载,并存储于硬盘中的数据;
在每一预设的测试周期内,分别执行以下测试步骤直到测试过程结束:
依据所述回放数据的存储顺序,读取当前测试周期对应的回放数据;
将所述当前测试周期对应的回放数据发送给被测目标系统;
接收所述被测目标系统反馈的当前测试周期的结果数据。
优选的,所述MATLAB模型上还预先编译有用于写内存的第二函数。
优选的,所述测试过程还包括:
利用所述第二函数,将所述结果数据按照预设顺序写入第二内存区域。
优选的,所述方法还包括:
将存储于所述第二内存区域中的各个测试周期的结果数据生成文件,并上传至上位机。
优选的,所述回放数据包括:至少一个子数据,所述子数据按照预设顺序进行存储;
所述依据所述回放数据的存储顺序,读取当前测试周期对应的回放数据的过程包括:
根据当前测试周期在所有测试周期中的顺序,读取回放数据中与其对应顺序的子数据。
一种测试装置,所述测试装置上预先编译有用于读写文件的第一函数,所述装置还包括:
数据加载模块,用于利用所述第一函数加载回放数据到所述第一内存区域中,所述回放数据为所述下位机预先从上位机下载,并存储于硬盘中的数据;
测试模块,用于在每一预设的测试周期内,执行测试直到测试过程结束;
所述测试模块包括:
测试周期对应的回放数据;
数据发送单元,用于将所述当前测试周期对应的回放数据发送给被测目标系统;
数据接收单元,用于接收所述被测目标系统反馈的当前测试周期的结果数据。
优选的,所述装置上还编译有用于写内存的第二函数,所述测试模块还包括:
数据写入单元,用于利用所述第二函数,将所述结果数据按照预设顺序写入第二内存区域。
优选的,所述装置还包括:
数据上传模块,用于将存储于所述第二内存区域中的各个测试周期的结果数据生成文件,并上传至上位机。
所述上位机上存储有回放数据,并编译包含有用于读写文件的第一函数的MATLAB模型;
所述下位机从所述上位机下载所述MATLAB模型,并从所述上位机下载回放数据,并将所述回放数据存储于硬盘中;
所述下位机运行所述MATLAB模型,利用所述第一函数加载回放数据到所述第一内存区域中,在每一预设的测试周期内,分别执行以下测试步骤直到测试过程结束:依据所述回放数据的存储顺序,读取当前测试周期对应的回放数据;将所述当前测试周期对应的回放数据发送给被测目标系统;接收所述被测目标系统反馈的当前测试周期的结果数据;
所述被测目标系统在每一测试周期接收下位机发送的回放数据,并反馈对应的结果数据。
优选的,所述MATLAB模型上还预先编译有用于写内存的第二函数,所述上位机还用于利用所述第二函数,将所述结果数据按照预设顺序写入第二内存区域,待测试过程结束后,将存储于所述第二内存区域中的各个测试周期的结果数据生成文件,并上传至上位机。
经由上述的技术方案可知,本申请实施例公开的基于MATLAB模型的测试方法中,预先在MATLAB模型编译用于读写文件的第一函数,上位机下载MATLAB模型到下位机后,利用第一函数,将回放数据从下位机的硬盘加载到第一内存区域,然后根据测试周期,读取回放数据发送给被测目标系统进行测试。在上述过程中,MATLAB模型读取的是下位机内存区域的数据,无需再从上位机获取,保证了数据读取的实时性和准确性,能够满足对实时性要求较高的被测目标系统的测试需求。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请公开了一种测试系统,该系统基于MATLAB模型,其结构如图1所示,包括:上位机101,下位机102和被测目标系统103。其中,上位机101用于完成MATLAB模型的开发和编译,在开发过程中,在原有MATLAB模型的基础上,开发了用于读写文件的第一函数,该第一函数为S-Function函数,S-Function也就是system-function的缩写。通俗的讲,S-Function就是当用MATLAB所提供的模型不能完全满足用户需求时,提供给用户自己编写程序来满足要求模型的接口。通过该接口,开发适用于用户需要的函数。然后,将第一函数与原有MATLAB模型共同编译,由于该函数是利用MATLAB模型的自身接口开发,因此两者并不存在矛盾,可以顺利的编译在一起,成为一个新的模型。
在开始测试之前,下位机102需要从上位机101上下载已经编译好的模型到预定的内存空间,同时,下位机根据S-Function中初始化要求预先分配一个内存区域,定义为第一内存区域。
在进行测试之前,下位机102还需要从上位机101上下载回放数据,将该回放数据存储在下位机的硬盘中。
测试进行时,运行模型后,模型首先利用第一函数,将存储在硬盘中的回放数据加载到第一内存区域中,整个测试过程分为多个测试周期,在每一个测试周期内,模型按照回放数据的存储顺序,读取当前测试周期对应的回放数据,然后把读取的回放数据发送给被测目标系统,被测目标系统接收到回放数据后,进行仿真(测试),然后将得到的结果数据通过接口发送给下位机并存储在第二内存区域。如此重复,直到该测试过程的所有测试周期都完成。
本申请实施例公开的测试系统中,预先在MATLAB模型编译用于读写文件的第一函数,下位机下载编译后的MATLAB模型和回放数据后,利用第一函数,将回放数据从下位机硬盘加载到第一内存区域,然后根据测试周期,读取回放数据发送给被测目标系统进行测试。在上述过程中,MATLAB模型读取的是与其处于同一计算机内存区域的数据,无需再从上位机获取,保证了数据读取的实时性和准确性,能够满足对实时性要求较高的被测目标系统的测试需求。
进一步的,在上位机编译MATLAB模型时,还可以同时开发用于写内存的第二函数,该第二函数与第一函数一起编译到MATLAB模型中,并被下载到下位机,下位机根据S-Function中初始化要求预先分配一个内存区域,定义为第二内存区域。当每个测试周期内接收到结果数据后,利用该第二函数将结果数据按照顺序写入到下位机中预先分配的第二内存区域中。并且,在整个测试过程结束后,将所有结果数据生成文件后,一起上传至上位机。
本申请实施例公开的基于上述测试系统,并应用于系统中的MATLAB模型的测试方法流程如图2所示,包括:
步骤S201:利用所述第一函数加载回放数据到所述第一内存区域中。
所述回放数据为所述下位机预先从上位机下载,并存储于下位机硬盘中的数据。
本实施例中,第一函数为利用CMEXS文件模板,编写的S-Function文件,可命名为readwritefile.c。
MATLAB模型在被下载到下位机时,利用模型中的mdlStart函数,向下位机申请内存,下位机分配第一、二内存区域。然后,readwritefile.c从硬盘中加载回放数据到第一内存区域。
步骤S202:在每一预设的测试周期内,分别执行测试步骤直到测试过程结束。
其中,测试过程的流程如图3所示,包括:
测试周期对应的回放数据;
模型在每一测试周期内,分别调用mdlOutputs函数,按照回放数据的存储顺序,读取当前的回放数据,读取后,将指针指向下一测试周期要读取的回放数据的存储地址处。
步骤S302:将所述当前测试周期对应的回放数据发送给被测目标系统;
步骤S303:接收所述被测目标系统反馈的当前测试周期的结果数据。
在上述测试过程中,MATLAB模型读取的是与其处于同一计算机内存区域的数据,无需再从上位机获取,保证了数据读取的实时性和准确性,能够满足对实时性要求较高的被测目标系统的测试需求。
进一步的,MATLAB模型上还预先编译有用于写内存的第二函数。第二函数同样也是利用CMEXS文件模板,编写的S-Function文件,可命名为writememory.c。
在具有第二函数后,上述图3中还包括:
步骤S304:利用所述第二函数,将所述结果数据按照预设顺序写入第二内存区域。
因为第二函数具有写内存的功能,所以能够将结果数据写入下位机预先分配的第二内存区域中。在mdlOutputs函数中,将每一测试周期采集的结果数据按照规律顺序存放在已第二内存区域中,直到测试终止。
而在整个测试周期结束后,图2所示流程还包括:
步骤S203:将存储于所述第二内存区域中的各个测试周期的结果数据生成文件,并上传至上位机。
在上述实施例中,利用第二函数可将得到的结果数据先写入下位机内存,等测试结束后,再一起上传至上位机,避免了重复多次传输结果数据的过程,并且,避免了由于传输过程中的故障导致结果数据丢失或者不准确的情况发生。
在上述实施例中,回放数据包括:多个子数据,该多个子数据可以为按照预设长度划分的子数据,也就是,每个子数据长度相同,其在进行存储时,所占用的存储空间也是相同的,这样,在模型运行时,可以通过为mdlOutputs函数中的指针设置一个固定的偏移量,就能够实现在读取完当前测试周期的子数据后,指针跳转到下一测试周期对应的子数据的存储地址的操作。
可替换的,各个子数据的长度也可以不一致,例如,可以是5bit,也可以是10bit,本申请并不限定。为了避免不同长度的子数据在存储时存储空间大小不确定导致的存储地址的变化不固定的情况,可以为各个子数据都分配相同大小的存储空间,该存储空间能够保证最长的子数据被存储在内,而对于其他的子数据,该存储空间的剩余部分可以填充0,或其他没有实际意义的数据,既不会影响测试的过程,也保证了存储空间的一致性。
所述子数据按照预设存储数据进行存储,分段存储并不会影响回放数据中各个数据的先后关系。
回放数据的子数据个数可以与测试周期的个数有关,例如,测试周期有5个,则将回放数据划分为5个子数据。每个测试周期读取其中的一个子数据。子数据按照顺序一次排列,第一测试周期内读取排在第一位的子数据,第二测试周期内读取排在第二位的子数据,以此类推。
本申请实施例中,由于回放数据是从上位机下载到下位机中,并且,其已经根据测试周期进行了相应的处理,相邻的数据间的位置关系是不会发生变化的,即便不同的测试过程间相比,下位机分配的第二内存区域会有所变化,但是回放数据内的数据关系是不会发生变化,这就使得无论进行多少次测试,进行测试的数据是确定的,更进一步保证了测试过程的准确性。
本申请同时公开了一种测试装置,其结构如图4所示。在该测试装置上,预先编译有用于读写文件的第一函数,该装置还包括:
数据加载模块401,用于利用所述第一函数加载回放数据到所述第一内存区域中,所述回放数据为所述下位机预先从上位机下载,并存储于下位机硬盘中的数据;
测试模块402,用于在每一预设的测试周期内,执行测试步骤直到测试过程结束;
所述测试模块402的结构如图5所示,包括:
测试周期对应的回放数据;
数据发送单元502,用于将所述当前测试周期对应的回放数据发送给被测目标系统;
数据接收单元503,用于接收所述被测目标系统反馈的当前测试周期的结果数据。
进一步的,该装置上还编译有用于写内存的第二函数,因此,所述测试模块还包括:
数据写入单元504,用于利用所述第二函数,将所述结果数据按照预设顺序写入第二内存区域。
而所述装置还包括:
数据上传模块403,用于将存储于所述第二内存区域中的各个测试周期的结果数据形成文件上传至上位机。
本申请实施例公开的测试装置中,预先在MATLAB模型编译用于读写文件的第一函数,下位机下载MATLAB模型后,数据加载模块利用第一函数,将回放数据加载到第一内存区域,然后测试模块根据测试周期,读取回放数据发送给被测目标系统进行测试。在上述过程中,MATLAB模型读取的是与其处于同一计算机内存区域的数据,无需再从上位机获取,保证了数据读取的实时性和准确性,能够满足对实时性要求较高的被测目标系统的测试需求。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。