鲍聪 孙祥娥 王文松 郭益凤 李文婷
关键词: COM; Matlab; Com Builder; 虚拟演示; 直观显示; 窗体属性; 维数转变
中图分类号: TN915.5?34; TP391.9 文献标识码: A 文章编号: 1004?373X(2019)02?0089?05
Virtual demonstration platform of Com Builder under COM object
BAO Cong, SUN Xiange, WANG Wensong, GUO Yifeng, LI Wenting
(Oil and Gas Signal and Information Processing Research Center, School of Electronic Information, Yangtze University, Jingzhou 434023, China)
Abstract: The traditional demonstrational Matlab graphic windows using CORBA and JNI technologies has many disadvantages, while the virtual demonstration of Com Builder under the COM object can make the Matlab graphic window display independently and visually, and retain the original window attributes, such as acquirement of horizontal and vertical coordinates of a point, graph scaling, and dimension change, and setting of line and window attribute. Its key technology is to apply the Com Builder under the COM object to convert the M file in the Matlab into the Java class, and utilize the WebFigure tags in JSP to realize the virtual demonstration function. Combining with the instance demonstration, the superiority of the virtual demonstration over the traditional demonstration and the feasibility of the technology were verified. The results show that the virtual demonstration can make students deepen the graphic effect analysis of relevant knowledge points and the understanding of relevant concepts and theories in the class.
Keywords: COM; Matlab; Com Builder; virtual demonstration; visual display; window attribute; dimension variation
Com Builder也可叫作Matlab Builder for Java[1?2],其能使程序设计的流程更加灵活,替代了传统的通过古老CGI [3]方式工作的Matlab Web Server组件[4]。之前所研究的演示主要实现了图形的网页端的显示,大多采用CORBA,JNI技术实现图形嵌套于网页端显示,而应用COM对象下Com Builder技术设计的虚拟演示平台,实现了图形窗体非嵌套于网页而从网页端弹出、能直接获取某点的对应值、修改背景色彩、图形的放大和缩小以及旋转,二维图形转变为三维立体图,以及保留了原有的窗体属性及一系列的可编辑等功能。以验证周期信号的简洁型傅里叶级数为例,证明Com Builder技术的可实现性以及与前人相比所增加的一系列功能,用于开发与Matlab提供支持的相关课程的虚拟演示平台[5]。
针对Java程序访问Matlab,Com Builder方法比传统CORBA,JNI具有许多优点,具体论证如下:
1) 传统技术。CORBA指的是公共对象代理结构,CORBA通过桥梁C++ ,即可完成Java对Matlab的方法调用[6]。JNI是指本地编程接口,Java通过调用Matlab Engine(Matlab引擎函数)来实现对Matlab的访问[7?8]。
2) Com Builder技术访问。利用Matlab中的Com Builder完成从Matlab算法到COM[9]的转换,生成COM对象,从而使基于COM+的Java应用程序能够使用COM对象。其访问流程是在Matlab的编辑器中编写好要使用的M文件,将Matlab环境下的M文件转换生成Java环境中的jar[10]文件,Java应用COM对象使Java调用Matlab,从而这些被转换的jar文件可以被集成到Java 程序开发中,实现了混合编程[11]。然而这些被集成的程序可以部署到装有免费Matlab Compiler Runtime (MCR)的Web服务器中,故无需安装Matlab。
由于本方法是基于Java Web,在Web应用中使用WebFigure能够在网页中调用Matlab环境下的图形,所以客户端只需使用标准的Internet 浏览器就可以展现和操作实验的全过程,具体访问过程见图1。
因此与传统的方法相比,利用Com Builder技术访问,更易实现Java调用Matlab,在提高运算速度的同时可操作性也明显增强。
2.1 平台的运行环境及流程
在整个流程中,采用Win64位的Windows 10操作系统、Java(jdk1.7.0_67)、Eclipse、Matlab 2016b,检查Java运行环境和Matlab环境,使Matlab能正确读取环境变量Java_HOME的值,保证环境变量设置成功,使Java运行环境和Matlab环境相兼容,从而完成Matlab Builderfor Java的环境配置,为虚拟平台有条不紊的进行打下基础,具体运行流程见图2。
2.2 编写相關M文件
开发者需要编写与演示相关的Matlab的M文件,编写可以展示相关的原理、概念,以及理论的Matlab程序,M文件主要用于处理输入页面中用户请求的各种变量、函数及数据等。其中M文件中涉及的数据主要有两部分:一部分是从输入页面提取出来的数据;另一部分是经过运算后反馈给用户的数据[1] ,以新建M文件Waving.m为例。
2.3 将M文件打包生成jar文件
在Matlab的命令窗口输入“deploytool”命令,启动Deployment Project对话框,输入编译工程名MathplotWaving.prj,并在Type列表框中选择编译类型为Java Package,在页面中,添加类和编写好的M文件,命名文件名为Waving,如图3所示,通过Package完成编译后,即可在编译项目所在的目录打包两个文件夹: for_testing文件夹的作用是存放编译好的Waving.jar文件;for_redistribution _files_only文件夹内放置的是Java 包中类的代码文件。
2.4 Java编程实现Matlab程序在网页端的运行
客户端采用JSP作为视图来显示用户请求的响应结果,Matlab 生成的图形通过Servlet访问获得,而JSP和Servlet两者之间的通信连接是采用Servlet中的session实现。实现该模块功能的具体步骤如下。
2.4.1 在Java中导入Matlab生成的jar文件
在Java开发工具Eclipse 中新建一个Dynamic Web Project工程,输入工程名Java web,再新建一个JSP文件。在Java web里通过Build path中的Configure Build Path的路径为工程添加jar文件。在Java Build path的libraries下通过Add External JARS添加Matlab生成的Waving.jar文件和Matlab安装文件下的Javabuilder.jar文件,如图4所示。其中Javabuilder.jar是Matlab builder组件所必须的,导入了Javabuilder.jar则可保证在当前Java 项目内可以访问到Java 包中的类。同时将这两个jar文件复制到Java web\WEB?INF\lib目录中,以及将显示Matlab图形所必须的文件webfigures.tld标签库拷贝Java web到WEB?INF文件夹下。
2.4.2 为JSP文件中的头部添加相应引用项
1) 在JSP文件的头部声明引用webfigures.tld文件,定义标签页
<%@ taglib prefix="wf"uri="/WEB?INF/webfigures.tld"%>
2) 引用com.mathworks.toolbox.javabuilder.*,其中包含WebFigure库、Erros定义以及编译生成的Java的类和Combuilder接口的定义。具体为:
<%@page import="com.mathworks.toolbox.javabuilder.webfigures.WebFigure"%> //引用WebFigure库
<%@page import="com.mathworks.toolbox.javabuilder.*"%>
//引用Combuilder接口定义
<%@page import="com.mathworks.toolbox.javabuilder.internal.*"%> //內部Erros定义
<%@page import="Waving.Mathwaving"%>
//引用编译生成的Java类
2.4.3 JSP实例的关键代码
WebFigure webFigure=(WebFigure) //引用标签
{(MWJavaObjectRef)func. Plotwaving (1)[0]).get();
//转化对象进行参数传递
request.getSession().setAttribute("MyFigure",webFigure);
//请求访问Seession
}
Plotwaving是Matlab中M文件定义的函数,而在Servlet中,由于实参不能直接和在M文件中生成Java 类的函数的形参进行传递,则需要通过MWNumericArray对象作为实参传递。将返回的对象类型强制转化成MWJavaObjectRef类型的对象,通过访问Session、共享Session属性来实现Servlet和Jsp之间通信。
2.4.4 配置文件以实现网页端的显示
配置web.xml文件需要对Javabuilder.jar中所使用到的WebFigures Servlet进行配置。在web?app标签中加入如下代码:
//配置WebFigures Servlet
com.mathworks.toolbox.javabuilder.webfigures.WebFiguresServlet //引用jar文件
3.1 验证周期信号的傅里叶级数展开式
求图5周期信号f(t)的简洁三角型傅里叶级数[12]。周期为[T0]的周期信号f(t),满足狄里利赫利(Dirichlet)条件,可将其展开为简洁三角型傅里叶级数,即:
[ft=A0+n=1∞Ancosnω0t+φn] (1)
式中:[ω0]为基波频率;[An=a2n+b2n,an与bn]为傅里叶系数。在[T0]内周期内:
[a0=1T0-T02T02ftdt]
[an=2T0-T02T02ftcosnω0tdt, n=1,2,…] (2)
[bn=2T0-T02T02ftsinnω0tdt, n=1,2,…] (3)
图5中周期[T0]=[π],基波频率[ω0=2πT0]=2 rad/s,则:
[A0=a0=1π0πe-t2dt]=0.504,[an=]0.504[8n1+16n2],
[bn=0.5048n1+16n2An]=[0.504?21+16n2,]
[φn]=[-arctan4n],则简洁傅里叶级数为:
[ft= 0.5041+n=1∞21+16n2cos2nt-arctan-4n]
An(幅度)和[φn](度)的具体数值见表1。
下面进行Matlab程序验证其傅里叶级数(取前10项系数)。
3.2 实验源程序
%计算傅里叶系数并画频谱图
syms t n
a0=1/pi*int(sum(′exp(?t/2)′),0,pi);
a_0=subs(a0);
an=2/pi*int(seem(′exp(?t/2)*cos(2*n*t)′),0,pi);
bn=2/pi*int(sum(′exp(?t/2)*sin(2*n*t)′),0,pi);
n=1:10;
a_n=subs(an);b_n=subs(bn);
A_n=sqrt(a_n.^2+b_n.^2);
p_n=atan2(?b_n,a_n)*180/pi;
n=[0,n];A_n=[a_0,A_n];p_n=[0,p_n];
subplot(2,1,1);stem(n,A_n,′fill′);ylabel(′An′);
xlabel(′n′)
subplot(2,1,2);stem(n,p_n,′fill′);ylabel(′\phi_n(度)′);
xlabel(′n′)
disp(′n An(幅度) 相位(度)′);
disp([num2str([n′,A_n′,p_n′])])
3.3 周期信号的实验结果分析与对比
部署项目到tomcat,启动tomcat,在浏览器网址栏中输入http://localhost:8080/couse.jsp。运行后,即可将An(幅度)、[φn](度)结果在虚拟实验中心显现。点击实验结果按钮,跳转到新的页面,即为想要的虚拟演示结果。
实验结果如图6所示,具体实验分析如下:
图6a)为CORBA,JNI技术下传统演示的Matlab图形窗体是嵌套于网页中,仅有图形并无其他功能。
图6b)是COM对象下Com Builder的Matlab实验图形。该窗体是从网页中弹出,独立于网页显示,并有Matlab图形窗体的一系列工具栏,能直接获取某点横纵坐标(如n=1,An=0.244 6)。调整图中图形、背景颜色,使学生在课堂上就能加深对抽象理论知识的理解。
图6c)在COM对象下实现了图形的旋转和缩放,能更进一步加深对图形的效果分析。
图6d)实现了图形从二维转变成三维立体效果图,增强了其感染力和效果。
通过实验验证了周期信号的傅里叶级数与理论数学推导所得的结果一致。图6b)~图6d)通过缩放图形,设置线条及颜色,多维度转换图形。与传统演示图6a)相比展现了Com Builder下图形效果的优越性,可直接从图上获取横纵坐标,与数学推导表1的系数相对比,实验结果更直观、方便,使相关课堂演示更加生动鲜明。
利用COM对象下Com Builder技术实现了Matlab图形窗体脱离网页端而非嵌套的独立呈现,从而最大程度地保留了Matlab图形界面控件的丰富性。不仅能够实现图形的缩放、旋转,而且能够获取横纵坐标、调整图形、背景颜色、维数转换及设置线条属性的可编辑等诸多功能,且具有操作简单、使用方便等特点。实现了可视化环境,降低了演示对用户端系统环境的要求,使教师、学生只要通过网页就能访问,可以避免安装Matlab软件及复杂的调试和输入程序,既方便教师课堂上的教学,同时对不具备Matlab相关知识的学生也可轻松操作。
注:本文通讯作者为孙祥娥。
參考文献
[1] 庄思发.利用Matlab Web Server实现在线作图[J].计算机系统应用,2010,19(6):223?225.
ZHUANG Sifa. Online plot using the Matlab Web Server [J]. Computer systems & applications, 2010, 19(6): 223?225.
[2] 蔡云鹭.基于Java Web和Matlab Builder JA的远程数学实验教学系统设计[J].实验技术与管理,2012,29(1):83?85.
CAI Yunlu. Design of distance education system for mathematics based on Java Web and Matlab Builder JA [J]. Experimental technology and management, 2012, 29(1): 83?85.
[3] 苏耀峰.混合编程方法在网络运维效能评估中的应用[J].软件导刊,2016,15(5):145?147.
SU Yaofeng. Application of hybrid programming method in network operation and maintenance efficiency evaluation [J]. Software guide, 2016, 15(5): 145?147.
[4] 黄银娟.基于Matlab Web Server的远程数值分析虚拟系统设计[J].广西民族大学学报(自然科学版),2009,15(2):99?102.
HUANG Yinjuan. Remote numerical analysis virtual system based on Matlab Web Server [J]. Journal of Guangxi University for Nationalities (Natural science edition), 2009, 15(2): 99?102.
[5] 廖云伢,王建新,盛羽.基于Java与Matlab集成的虚拟实验平台的设计与实现[J].计算机应用,2007,27(2):394?396.
LIAO Yunya, WANG Jianxin, SHENG Yu. Design and implementation of virtual lab platform based on integration of Java and Matlab [J]. Computer applications, 2007, 27(2): 394?396.
[6] 王建新,莫秋菊.基于Internet的通信系统虚拟实验环境设计与实现[J].中南大学学报(自然科学版),2006,37(2):330?335.
WANG Jianxin, MO Qiuju. Design and implementation of communication system virtual environment based on Internet [J]. Journal of Central South University (Science and technology), 2006, 37(2): 330?335.
[7] 周小娟.Java?Matlab混合编程的研究[J].电子设计工程,2013,21(2):16?18.
ZHOU Xiaojuan. Research of Java?Matlab mixed programming methodology [J]. Electronic design engineering, 2013, 21(2): 16?18.
[8] 王薇,杨丽萍.Java和Matlab混合编程及其应用[J].长春大学学报,2012,22(10):1186?1189.
WANG Wei, YANG Liping. Mixed programming of Java and Matlab and its application [J]. Journal of Changchun University, 2012, 22(10): 1186?1189.
[9] 尹莉丽,初学导.基于COM技术实现C++Builder与Matlab混合编程及其在模糊自整定PID控制中的应用[J].计算机与现代化,2006(1):34?37.
YIN Lili, CHU Xuedao. Joint programming of C++ Builder and Matlab with COM and its application in self?turning fuzzy PID control [J]. Computer and modernization, 2006(1): 34?37.
[10] 张宏立.基于Matlab的Web实验平台开发[J].计算机应用与软件,2005,22(2):142?144.
ZHANG Hongli. Exploitation of web experimental platform based on Matlab [J]. Computer applications and software, 2005, 22(2): 142?144.
[11] 曾威,杨建东,凌宇.基于Java和Matlab混合编程的水泵水轮机全特性构造系统[J].大电机技术,2014(4):55?58.
ZENG Wei, YANG Jiandong, LING Yu. The generation of pump?turbine characteristics based on hybrid programming between Java with Matlab [J]. Large electric machine and hydraulic turbine, 2014(4): 55?58.
[12] 金波.信号与系统[M].武汉:华中科技大学出版社,2015.
JIN Bo. Signals and systems [M]. Wuhan: Huazhong University of Science and Technology Press, 2015.