基于MATLAB与VC混编的靶弹飞行轨迹设计
2014-08-07倪原,田华
倪 原,田 华
(西安工业大学电子信息工程学院,西安710032)
基于MATLAB与VC混编的靶弹飞行轨迹设计
倪 原,田 华
(西安工业大学电子信息工程学院,西安710032)
某靶弹地面测试系统在参数装订过程中要实现三维轨迹显示,通过分析MATLAB语言与VC++语言的特点,根据MATLAB与VC++之间的接口方案,利用MATCOM将.m文件转换为C++代码,在VC设计的用户界面中嵌入MATLAB图像,实现三维飞行轨迹图像显示。
MATCOM仿真;VC环境;图像显示
1 引 言
为使某靶弹准确的按轨迹飞行,需通过地面测试软件来完成飞行轨迹参数设置,对输入的数据进行仿真和轨迹图形显示工作,检测操作人员输入数据的准确性是非常必要的。本文采用MATLAB和VC混合编程的方法完成这一功能。VC提供功能强大的应用程序框架MFC以及高效的编译器、可视化的集成开发环境。然而,作为一种通用的开发平台,在使用VC开发含有大量图像及数据处理等专业性较强的应用程序时,一些底层开发十分繁琐。MATLAB是由Math Works公司于1984年推出的数值计算及图形处理软件,可以实现数值分析、优化、统计、偏微分方程数值解、自动控制、信号处理、图像处理等若干领域的计算和图形显示功能。因此,将二者结合共用,各献其长,可以为科研工作和工程开发提供方便。
2 Visual C++与Matlab的常用接口简介
2.1 调用Matlab引擎
MATLAB允许用户通过MATLAB引擎调用MATLAB函数,即将MATLAB作为应用程序进行数据计算的引擎。MATLAB提供了一系列操作MATLAB引擎的API函数,通过这些API函数,用户可以充分发挥MATLAB进行计算和图形显示的优势,将应用程序的计算和图像显示功能交给MATLAB引擎完成,而界面部分则可以通过VC采用C++语言来实现。采用这种方法几乎能利用MATLAB的全部功能,但是需要在机器上安装MATLAB软件,而且执行效率低,因此在实际应用中不采用这种方法,在软件开发中也不可行[1]。
2.2 调用MATLAB C++数学库
MATLAB C++数学库包含了约400个常用MATLAB数学函数,并且其调用方式和MATLAB函数的使用习惯极其相似。对于MATLAB使用者来说,采用MATLAB C++数学库,可以使应用程序完全脱离MATLAB的解释环境。对于VC使用者来说,采用MATLAB C++数学库可以充分利用MATLAB已有的矩阵运算数学函数库,虽然用这种方法可以很灵活的调用MATLAB来编写应用程序,但要求读者对C\C++语言比较熟悉,而且使用这种方法调用MATLAB的工具箱函数有一定的困难[4]。
2.3 通过COM组建调用MATLAB程序
COM(Componet Object Model)是以组件为发布单元的对象模型。由于COM是建立在二进制级别上的范畴,所以组件对象之间的交互规范不依赖任何特定的开发语言。利用COM完成不同语言之间的协作开发是非常方便的。COM开发架构是以组件为基础的,可以把组件看做是用于“搭建”软件的积木块,采用这种开发模式,可以在多个不同的软件开发项目中重复利用一个组件等。但是这种方法与调用MATLAB引擎、调用MATLAB C++数学库相比,在VC中调用MATLAB生成的COM组件时客户程序编写的难度较高[5]。
2.4 MATCOM编译器
MATCOM是由Mathtools公司发布的第一个MATLAB与VC混合编程的软件,它的终极版本是MATCOM4.5,它的调试编译环境为MIDEVA。MATCOM的编译方法和MATLAB编译方法相似,通过MATCOM的编译环境将MATLAB的m文件转换为VC可执行文件有以下3种方法:
(1)在MIDEVA中简单设置后,可以将MATLAB生成的m源文件在MIDEVA中转化为C++文件,然后添加到MSVC工程中。
(2)在MIDEVA编译环境下,可以将MATLAB运行后得到的m文件转换为exe文件,在VC++6.0中通过Shell调用exe文件。这种方法简单容易操作,仿真图出来之前还会出现控制台窗口[3]。
(3)利用Visual MATC0M的工具条,运行VC++6.0,选择工具下的定制,然后选择附加项和宏文件(Add-ins(.dll)),这种方法(后面详细介绍)是MATLAB和VC混合编程的一种较简单方法,可以简单快速将MATLAB运行后得到的m文件转换成VC工程中可应用的C/C++应用程序、C、MEX、DLL,而且可以在m源文件上进行修改,同时生成的C/C++文件也将同步修改。因此,本文中根据已知路径点描绘路线仿真将采用这种方法实现。
3 MATCOM和VC联合应用程序设计
3.1 编写程序
在VC的飞行参数装订界面中输入某靶弹飞行参数,并且在界面中显示物体的运动三维轨迹图,Z轴表示高度,Y轴表示物体飞行的水平距离,X轴表示物体偏离Y平面的距离。
编写MATLAB程序[7],程序流程图如图1所示。
图1 MATLAB流程图
将程序保存为pwx2.h,在MATLAB中运行的结果如图2所示。
图2 MATLAB仿真图
在Matcom软件中打开pwx2.h文件,编译文件,选择Save and compile to exe,MIDEVA会提示编译完成,编译后的文件保存在Matcom安装路径下的debug文件中,名字为“pwx2.cpp”。接下来打开Visual C++6.0建立一个基于对话框的工程,调用编译后的文件,完成混合编程。
3.2 创建VC工程“Test”
运行Visual C++6.0并创建Test工程,在Project name编辑框中输入工程名“Test”,创建的应用程序类型选择为基于对话框[2]。
3.3 转换m文件“pwx2.m”
运行Visual C++6.0,改变文件类型为Addills(.d11),选定%MATCOM45%\bin\Mvcide.dll,单击确定。在Visual C++6.0的界面中可以看到关于Visual MATCOM的快捷键,单击Visual MATCOM工具条上的m++图标,选择文件名为pwx2.m的MATLAB文件进行转换。此时在File-View菜单中多了m-files、C++files created from m-files、MATrix<lib>和Extemal Dependencies等文件夹。在相应的文件夹下增加pwx2.m、pwx2.h、pwx2.cpp、v4501v.1ib和matlib.h等文件,这说明pwx2.m文件转换成功。在“pwx2.h”文件中添加头文件#include“matlib.h”。
3.4 创建的对话框界面
创建如图3所示的对话框界面。
图3 对话框界面
(1)添加头文件
#include“pwx2.h”;
#include“matlib.h”;
(2)为IDC_BUTTON1添加响应代码(IDC_ BUTTON1为仿真键的ID号,程序为matcom安装路径下的debug文件中的“pwx2.cpp”)。MATCOM程序流程图如图4所示。
添加键主要完成数据的存储。在对应的编辑控件中输入相应的数据,点击添加键,保存相应的数据并在列表控件中显示。
3.5 创建如图2所示的对话框界面
按一般的c++程序进行编译Test工程,由于pwx2.h函数定义文件是相应的m文件转换生成的,若pwx2.m发生修改,VC++会询问用户是否重新加载这个文件,此时,在重新生成的pwx2.h文件中没有包含“matlib.h”头文件,需手动添加,若没有包含该文件,编译器不能识别 m数据类型而发生错误[8]。
图4 MATCOM流程图
3.6 执行Test.exe
执行Test.exe文件后,得到如图5所示对话框。
图5 仿真结果
4 结束语
利用VC开发软件中VisualMATCOM的快捷键的方法进行程序混编,只要在MATLAB中编写相应的程序,同时利用MATLAB强大绘图功能,是一种简单快捷的图像仿真嵌入的实现方法,对于VC++并不熟练的工程师来说是一个最佳的选择,该程序在VC++6.0和MATLAB 6.5.1下测试通过。
[1]张宜华.精通MATLAB[M].北京:清华大学出版社,1999.
[2]KAETGREGORY.Visual C++开发使用手册[M].北京:机械工业出版社,1998.
[3]苏金明,刘宏,刘波.MATLAB高级编程[M].北京:电子工业出版社,2005.
[4]张志涌.精通MATLAB6.5版[M].北京:北京航空航天大学出版社,2003.
[5]董国维.深入浅出MATLAB混合编程[M].北京:机械工业出版社,2006.
[6]潘林峰,谭立超.MATLAB与VC混合编程的实现[J].武汉化工学院学报,2003,25(4):74-75.
[7]李志明,曹杰.VC++与Matlab的混合编程[J].遥测遥控,1999,20(6):59-61.
[8]李海奎.混合编程时应该注意到几个问题[J].计算机应用研究,2005(1):167-169.
Design on Target Flight Track Based on Matlab and VC Mixed Programm ing
NIYuan,TIAN Hua
(School of Electronics Information Engineering,Xi’an Technological University,Xi'an 710032,China)
In order to achieve the three-dimensional track display in the process of parameter binding in the target-missile ground test system,this paper analyzes the characteristics of the MATLAB and VC++language,according to the scheme of the interface between MATLAB and VC++,by using MATCOM converting tool to convert.m file to C++codes,and realizes the three-dimensional track display by Embedded MATLAB image in the User Interface designed by VC.
MATCOM simulation;VC enviroment;Image display
10.3969/j.issn.1002-2279.2014.04.019
TP311
:A
:1002-2279(2014)04-0059-03
倪原(1955-),男,江苏人,硕士研究生,教授,主研方向:控制领域的研究工作。
2013-12-03