一种文件生成方法及装置制造方法

文档序号:6638538阅读:245来源:国知局
一种文件生成方法及装置制造方法
【专利摘要】本申请提供了一种文件生成方法及装置,在接收到用户的编译指令后,将Simulink模型生成C语言程序,C语言程序中至少包括第一主程序及保存模型的数据的第一程序,在第一主程序中增加第一类型的头文件及第一类型的函数、形成第二主程序,将第一程序中的模型的数据写入第二主程序中,形成第三主程序,因为第一类型为能被Matlab函数编译的类型,因此,通过编译第三主程序,能够生成基于C语言的调用模型文件,因为相比Simulink模型,Matlab调用C程序的速度较快,所以,将Simulink模型转换为C文件供Matlab调用,能够加快Simulink模型的调用,从而提高程序运行的效率。
【专利说明】一种文件生成方法及装置

【技术领域】
[0001]本申请涉及电子信息领域,尤其涉及一种文件生成方法及装置。

【背景技术】
[0002]Matlab作为一款科学计算软件,将高性能数值计算与可视化集成在一起,并提供了大量的内置函数,从而被广泛应用于科学计算、控制系统、信息处理等领域的分析、仿真和设计工作。
[0003]在Matlab中编程语言和图形化的Simulink建模工具结合在一起,通过m语言程序调用Simulink模型。Matlab本身为m编程语言调用Simulink模型提供了专用的函数接口,即sim函数。由于sim函数运行时会先对Simulink模型进行编译,所以调用模型会花费一定时间,当调用模型的次数较多时,由于每次调用sim函数都需要重新编译模型,因此会累积大量的调用时间,这无疑极大地增加了程序运行的时间,从而导致程序使用效率的降低。
[0004]因此,如何加快Simulink模型的调用,成为亟待解决的问题。
[0005]申请内容
[0006]本申请提供了一种文件生成方法及装置,目的在于解决如何加快Simulink模型的调用的问题。
[0007]为了实现上述目的,本申请提供了以下技术方案:
[0008]一种文件生成方法,包括:
[0009]在接收到用户的编译指令后,将Simulink模型生成C语言程序,所述C语言程序中至少包括第一主程序及保存所述模型的数据的第一程序;
[0010]通过在所述第一主程序中增加第一类型的头文件以及第一类型的函数,形成第二主程序,所述第一类型为能够被Matlab函数编译的类型;
[0011]通过将所述第一程序中的所述模型的数据写入所述第二主程序中,形成第三主程序;
[0012]通过编译所述第三主程序,生成基于C语言的调用模型文件。
[0013]可选地,在所述通过编译所述第三主程序,生成基于C语言的调用模型文件之前,还包括:
[0014]如果所述第三主程序中包括至少两个子函数,则判断所述子函数在所述第三主程序中的顺序是否正确;
[0015]在所述子函数的顺序不正确的情况下,调整所述子函数的顺序。
[0016]可选地,在所述通过编译所述第三主程序,生成基于C语言的调用模型文件之前,还包括:
[0017]在所述第三主程序中存在无用的头文件的情况下,将所述无用的头文件改为注释类型。
[0018]可选地,所述通过在所述第一主程序中增加第一类型的头文件以及第一类型的函数,形成第二主程序,包括:
[0019]接收所述用户输入的所述第一主程序的存储路径;
[0020]通过所述存储路径,查找到所述第一主程序;
[0021]在所述第一主程序中增加第一类型的头文件以及第一类型的函数,形成第二主程序。
[0022]可选地,所述第一类型的头文件包括:meX.h头文件;
[0023]所述第一类型的函数包括:mexfunct1n函数;
[0024]所述无用的头文件包括:_private.h文件。
[0025]一种文件生成装置,包括:
[0026]C语言程序生成模块,用于在接收到用户的编译指令后,将Simulink模型生成C语言程序,所述C语言程序中至少包括第一主程序及保存所述模型的数据的第一程序;
[0027]增加模块,用于通过在所述第一主程序中增加第一类型的头文件以及第一类型的函数,形成第二主程序,所述第一类型为能够被Matlab函数编译的类型;
[0028]写入模块,用于通过将所述第一程序中的所述模型的数据写入所述第二主程序中,形成第三主程序;
[0029]编译模块,用于通过编译所述第三主程序,生成基于C语言的调用模型文件。
[0030]可选地,还包括:
[0031]函数顺序调整模块,用于在所述通过编译所述第三主程序,生成基于C语言的调用模型文件之前,如果所述第三主程序中包括至少两个子函数,则判断所述子函数在所述第三主程序中的顺序是否正确,在所述子函数的顺序不正确的情况下,调整所述子函数的顺序。
[0032]可选地,还包括:
[0033]头文件修改模块,用于在所述通过编译所述第三主程序,生成基于C语言的调用模型文件之前,在所述第三主程序中存在无用的头文件的情况下,将所述无用的头文件改为注释类型。
[0034]可选地,所述增加模块具体包括:
[0035]接收单元,用于接收所述用户输入的所述第一主程序的存储路径;
[0036]查找单元,用于通过所述存储路径,查找到所述第一主程序;
[0037]增加单元,用于在所述第一主程序中增加第一类型的头文件以及第一类型的函数,形成第二主程序。
[0038]可选地,所述增加模块用于通过在所述第一主程序中增加第一类型的头文件以及第一类型的函数,形成第二主程序包括:
[0039]所述增加模块具体用于,通过在所述第一主程序中增加mex.h头文件以及mexfunct1n函数,形成第二主程序;
[0040]所述头文件修改模块用于将所述无用的头文件改为注释类型包括:
[0041]所述头文件修改模块具体用于,将_private.h文件改为注释类型。
[0042]本申请所述的文件生成方法及装置,在接收到用户的编译指令后,将Simulink模型生成C语言程序,所述C语言程序中至少包括第一主程序及保存所述模型的数据的第一程序,通过在第一主程序中增加第一类型的头文件以及第一类型的函数、形成第二主程序,通过将所述第一程序中的所述模型的数据写入所述第二主程序中,形成第三主程序,因为第一类型为能够被Matlab函数编译的类型,因此,通过编译所述第三主程序,能够生成基于C语言的调用模型文件,可见,本申请中所述方法及装置,在由Simulink模型生成C语言程序后,能够通过对C语言程序增加第一类型头文件、第一类型头函数、写入模型的数据以及编译的方式,将C语言程序转换为Matlab能够直接调用的模型文件,因为相比Simulink模型,Matlab调用C程序的速度较快,所以,将Simulink模型转换为C文件供Matlab调用,无疑能够加快Simulink模型的调用,从而提高程序运行的效率。

【专利附图】

【附图说明】
[0043]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0044]图1为本申请实施例公开的一种文件生成方法的流程图;
[0045]图2为本申请实施例公开的又一种文件生成方法的流程图;
[0046]图3为在Matlab平台的配置参数对话框中设置模型的步长类型的示意图;
[0047]图4为在Matlab平台中配置参数对话框中设置系统目标文件的示意图;
[0048]图5为本申请实施例公开的一种文件生成装置的结构示意图;
[0049]图6为本申请实施例公开的又一种文件生成装置的结构示意图。

【具体实施方式】
[0050]本申请实施例公开的文件生成方法及装置,可以应用在Matlab平台上,目的在于加快Simulink模型的调用,从而在需要多次调用Simulink模型时,提高程序运行的效率。[0051 ] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0052]本申请实施例公开的一种文件生成方法,如图1所示,包括:
[0053]SlOl:在接收到用户的编译指令后,将Simulink模型生成C语言程序,其中,所述C语言程序中至少包括第一主程序及保存所述模型的数据的第一程序;
[0054]通常,由Simulink模型生成的C语言程序中,至少包括与Simulink模型同名的主程序C文件以及包含Simulink模型的数据的C文件,例如,由命名为TestFM的Simulink模型文件编译过后生成的C语言程序中,包括与命名为TestFM的主程序C文件、以及包含模型的数据的、命名为TestFM_data的C文件。本申请实施例中,为了方便描述,将主程序称为“第一主程序”、将包含模型的数据的程序称为“第一程序”。
[0055]S102:通过在所述第一主程序中增加第一类型的头文件以及第一类型的函数,形成第二主程序,其中,所述第一类型为能够被Matlab函数编译的类型;
[0056]S103:通过将所述第一程序中的所述模型的数据写入所述第二主程序中,形成第三主程序;
[0057]本实施例中,可以直接将第一程序中的模型的数据复制到第二主程序中。
[0058]S104:通过编译所述第三主程序,生成基于C语言的调用模型文件。
[0059]本实施例中,经过以上步骤操作后生成的基于C语言的调用模型文件,因为其中的头文件和函数均为能够被Matlab函数编译的类型,且经过了编译过程,所以,能够被Matlab直接调用。
[0060]因此,进一步地,在Matlab需要多次调用Simulink模型时,可以直接多次调用由Simulink模型生成的基于C语言的调用模型文件,因为Matlab调用基于C语言文件的速度快于调用Simulink模型的速度,所以可以缩短程序的运行时间,从而提高程序的运行效率。并且,Matlab需要调用的Simulink模型的数量越多,这种运行效率的提升效果越明显。
[0061]本申请实施例公开的又一种文件生成方法,如图2所示,具体包括以下步骤:
[0062]S201:在接收到用户的编译指令后,将Simulink模型生成C语言程序;
[0063]具体地,可以通过Matlab平台自带的对话框接收用户输入的编译指令,如图3所示,用户可以打开Simulink模型的配置参数Configurat1n Parameters对话框,在解算器Solver界面将模型的步长类型设置为定步长并保存设置;如图4所示,用户可以打开配置参数Configurat1n Parameters对话框,在实时工作台Real-Time Workshop界面设置系统目标文件System target file,通常可设置为“ert.tic”或“grt.tic”并保存设置;当接收到用户点击配置参数Configurat1n Parameters对话框中的建立Build按钮或者模型工具栏中的增量编译Incremental build按钮后,在Mat lab当前路径下生成C语言程序的代码。
[0064]通常,在生成过程中、在Matlab命令行中会输出相应编译信息,若出现生成错误,则用户可以根据提示信息对模型进行修改并再次编译,编译成功后,将生成对应的文件夹。在文件夹中,至少包括第一主程序及保存所述模型的数据的第一程序。
[0065]S202:接收所述用户输入的所述第一主程序的存储路径;
[0066]S203:通过所述存储路径,查找到所述第一主程序;
[0067]S204:在所述第一主程序中增加第一类型的头文件以及第一类型的函数,形成第二主程序;
[0068]本实施例中,具体地,第一类型的头文件可以但不限定为mex.h头文件,第一类型的函数可以但不限定为mexfunct1n函数。其中,mex.h头文件以及mexfunct1n函数均为Matlab中已定义的文件或参数,因此能够被Matlab函数直接编译。
[0069]S205:将第一程序中的模型的数据复制到第二主程序中,形成第三主程序;
[0070]S206:在所述第三主程序中存在无用的头文件的情况下,将所述无用的头文件改为注释类型;
[0071]Matlab中,使用*表示注释部分,因此,可以在无用的头文件之前以及之后加上*,例如无用的头文件为_private.h文件,以*_private.h*的格式,将无用的头文件改为注释,从而避免在后续编译过程中出现错误。
[0072]S207:如果所述第三主程序中包括至少两个子函数,则判断所述子函数在所述第三主程序中的顺序是否正确;
[0073]S208:在所述子函数的顺序不正确的情况下,调整所述子函数的顺序;
[0074]调整的原则可以为:被调用函数的位置尽量靠前。而调用其它子函数的函数的位置需要尽量靠后。函数调整后可以保证程序正确运行,否则易出错。
[0075]S209:用mex工具编译第三主程序,mex编译成功后,生成基于C语言的调用模型文件,即可像使用普通的sim函数一样调用所述模型文件。
[0076]本实施例中所述的方法,实现了将Simulink模型转换为基于C语言的调用模型文件的目的,在多次调用同一个模型或多次调用不同模型时,节省程序的运行时间,提高工作效率。
[0077]与上述方法相对应地,本申请实施例还公开的了一种文件生成装置,如图5所示,包括:
[0078]C语言程序生成模块501,用于在接收到用户的编译指令后,将Simulink模型生成C语言程序,所述C语言程序中至少包括第一主程序及保存所述模型的数据的第一程序;
[0079]增加模块502,用于通过在所述第一主程序中增加第一类型的头文件以及第一类型的函数,形成第二主程序,所述第一类型为能够被Matlab函数编译的类型;
[0080]写入模块503,用于通过将所述第一程序中的所述模型的数据写入所述第二主程序中,形成第三主程序;
[0081]编译模块504,用于通过编译所述第三主程序,生成基于C语言的调用模型文件。
[0082]本实施例中所述的装置,将Simulink模型转换为基于C语言的调用模型文件,从而能够加快对模型文件的调用,并且,本实施例所述的装置,生成C语言的调用模型的过程中,无需用户参与,能够实现C语言模型的自动生成,从而方便用户的使用。
[0083]本申请实施例中公开的又一种文件生成装置,如图6所示,包括:
[0084]C语言程序生成模块601,用于在接收到用户的编译指令后,将Simulink模型生成C语言程序,所述C语言程序中至少包括第一主程序及保存所述模型的数据的第一程序;
[0085]接收单元602,用于接收所述用户输入的所述第一主程序的存储路径;
[0086]查找单元603,用于通过所述存储路径,查找到所述第一主程序;
[0087]增加单元604,用于在所述第一主程序中增加第一类型的头文件以及第一类型的函数,形成第二主程序;
[0088]其中,第一类型的头文件可以为mex.h头文件,第一类型的函数可以为mexfunct1n 函数。
[0089]写入模块605,用于通过将所述第一程序中的所述模型的数据写入所述第二主程序中,形成第三主程序;
[0090]函数顺序调整模块606,用于在所述通过编译所述第三主程序,生成基于C语言的调用模型文件之前,如果所述第三主程序中包括至少两个子函数,则判断所述子函数在所述第三主程序中的顺序是否正确,在所述子函数的顺序不正确的情况下,调整所述子函数的顺序;
[0091]头文件修改模块607,用于在所述通过编译所述第三主程序,生成基于C语言的调用模型文件之前,在所述第三主程序中存在无用的头文件的情况下,将所述无用的头文件改为注释类型;
[0092]其中,无用的头文件可以为_private.h文件。
[0093]编译模块608,用于通过编译所述第三主程序,生成基于C语言的调用模型文件。
[0094]本实施例所述的文件生成装置,能够自动将Simulink模型转换为基于C语言的调用模型文件,在多次调用同一个模型或多次调用不同模型时,可以节省程序的运行时间,提高工作效率。
[0095]需要说明的是,本申请所述的装置生成调用模型文件的具体过程可以如前方法实施例所述,这里不再赘述。
[0096]本申请实施例方法所述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算设备可读取存储介质中。基于这样的理解,本申请实施例对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机,服务器,移动计算设备或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM, Read-Only Memory) >随机存取存储器(RAM, Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0097]本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
[0098]对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
【权利要求】
1.一种文件生成方法,其特征在于,包括: 在接收到用户的编译指令后,将Simulink模型生成C语言程序,所述C语言程序中至少包括第一主程序及保存所述模型的数据的第一程序; 通过在所述第一主程序中增加第一类型的头文件以及第一类型的函数,形成第二主程序,所述第一类型为能够被Matlab函数编译的类型; 通过将所述第一程序中的所述模型的数据写入所述第二主程序中,形成第三主程序; 通过编译所述第三主程序,生成基于C语言的调用模型文件。
2.根据权利要求1所述的方法,其特征在于,在所述通过编译所述第三主程序,生成基于C语言的调用模型文件之前,还包括: 如果所述第三主程序中包括至少两个子函数,则判断所述子函数在所述第三主程序中的顺序是否正确; 在所述子函数的顺序不正确的情况下,调整所述子函数的顺序。
3.根据权利要求1或2所述的方法,其特征在于,在所述通过编译所述第三主程序,生成基于C语言的调用模型文件之前,还包括: 在所述第三主程序中存在无用的头文件的情况下,将所述无用的头文件改为注释类型。
4.根据权利要求3所述的方法,其特征在于,所述通过在所述第一主程序中增加第一类型的头文件以及第一类型的函数,形成第二主程序,包括: 接收所述用户输入的所述第一主程序的存储路径; 通过所述存储路径,查找到所述第一主程序; 在所述第一主程序中增加第一类型的头文件以及第一类型的函数,形成第二主程序。
5.根据权利要求4所述的方法,其特征在于,所述第一类型的头文件包括:meX.h头文件; 所述第一类型的函数包括:mexfunct1n函数; 所述无用的头文件包括:_private.h文件。
6.一种文件生成装置,其特征在于,包括: C语言程序生成模块,用于在接收到用户的编译指令后,将Simulink模型生成C语言程序,所述C语言程序中至少包括第一主程序及保存所述模型的数据的第一程序; 增加模块,用于通过在所述第一主程序中增加第一类型的头文件以及第一类型的函数,形成第二主程序,所述第一类型为能够被Matlab函数编译的类型; 写入模块,用于通过将所述第一程序中的所述模型的数据写入所述第二主程序中,形成第三主程序; 编译模块,用于通过编译所述第三主程序,生成基于C语言的调用模型文件。
7.根据权利要求6所述的装置,其特征在于,还包括: 函数顺序调整模块,用于在所述通过编译所述第三主程序,生成基于C语言的调用模型文件之前,如果所述第三主程序中包括至少两个子函数,则判断所述子函数在所述第三主程序中的顺序是否正确,在所述子函数的顺序不正确的情况下,调整所述子函数的顺序。
8.根据权利要求6或7所述的装置,其特征在于,还包括: 头文件修改模块,用于在所述通过编译所述第三主程序,生成基于C语言的调用模型文件之前,在所述第三主程序中存在无用的头文件的情况下,将所述无用的头文件改为注释类型。
9.根据权利要求8所述的装置,其特征在于,所述增加模块具体包括: 接收单元,用于接收所述用户输入的所述第一主程序的存储路径; 查找单元,用于通过所述存储路径,查找到所述第一主程序; 增加单元,用于在所述第一主程序中增加第一类型的头文件以及第一类型的函数,形成第二主程序。
10.根据权利要求9所述的装置,其特征在于,所述增加模块用于通过在所述第一主程序中增加第一类型的头文件以及第一类型的函数,形成第二主程序包括: 所述增加模块具体用于,通过在所述第一主程序中增加mex.h头文件以及mexfunct1n函数,形成第二主程序; 所述头文件修改模块用于将所述无用的头文件改为注释类型包括: 所述头文件修改模块具体用于,将_private.h文件改为注释类型。
【文档编号】G06F9/44GK104391709SQ201410768212
【公开日】2015年3月4日 申请日期:2014年12月12日 优先权日:2014年12月12日
【发明者】张天宇, 余正宁, 罗喜霜 申请人:北京润科通用技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1