基于Java语言虚拟实验表显示程序设计 - 图文

Applet是一种Java的小程序,它通过使用该Applet的HTML文件,由支持Java的网页浏览器下载运行。也可以通过java开发工具的appletviewer来运行。Applet 程序离不开使用它的HTML文件。这个HTML文件中关于Applet的信息至少应包含以下三点:

1)字节码文件名(编译后的Java文件,以.class为后缀) 2)字节码文件的地址

3)在网页上显示Applet的方式。 3.Jfreechart简介

JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。这些不同式样的图表基本上可以满足目前的要求。当在项目中客户需要图标分析时,JFreeChart便是最好的选择,JFreeChart是开源项目,可以方便的从其官方网站上获得其源代码,可以方便的与Swing相结合使用,还可以导入到Web页面中,更是可以方便的利用其工厂方法将图表写入jpeg或者png格式的图片中。

JFreeChart是一个免费的Java图表库,让开发人员开发出专业的图表显示在他

们的应用程序。 JFreeChart的广泛的功能包括:

详实的API,支持各种各样的图表类型;

? 一种灵活的设计,易于扩展,和指标均服务器端和客户端的应用;

? 支持多种类型的输出,包括Swing界面,图像文件(包括PNG和JPEG格式) ,和矢量图形文件格式;

? JFreeChart是“开源” ,或更具体的免费软件 。

?

4. Jfreechart图表绘制

与画曲线图密切相关的几个类:

1)TimeSeriesCollection曲线数据的集合。 2)TimeSeries曲线信息序列。

3)ChartFactory可以利用该类的createTimeSeriesChart方法来创建曲线的JFreeChart对象。

为了观察图表显示效果,编写了一个利用Jfreechart绘制折线图的程序,利用Eclipse运行程序,结果如下图所示:

图 2 折线图绘制

由上图可以看出,我们运用Jfreechart绘制,能够得到比较美观的图表显示界面。

图表能使数据形象直观的表现,给数据统计也提供了方便,JFreeChart目前是最好的java图形解决方案,基本能够解决目前的图形方面的需求。 四.倒立摆控制虚拟仿真的实时图表显示 1.主类InvertedPendulum.class的构成思路 1.1 程序的显示目标

我们编程所显示的图表应该是这样的:

(1)下方是虚拟实验部分,即对小车进行的仿真部分和一些控制按钮; (2)上方是图表显示部分,实时显示的倒立摆仿真实验中的小车的位置和摆杆角度。

1.2 程序的构成思路

(1)对小车仿真部分运用applet中的动画实现,小车各个部分的运动轨迹为所建立的系统模型中传递的参数控制;

(2)获得倒立摆模型中小车的角度和位置实时变化的数据,并利用Jfreechart实现图表显示出来。 2 编写Java程序并结合Jfreechart 显示图表 2.1 运用applet动画模拟小车的运动

(1)画出小车运动时的背景部分程序如下:

Public void Clear Plot (Graphics g) {

offScrGC = offScrImage.getGraphics();//获得画布

offScrGC.clipRect(0, 0, size().width, size().height - controlPanel.size().height);//画布的尺寸,它定义为控制

面板以上的区域 g = offScrGC; xSize = size().width; YSize = size ().height; PlotX = plotY = border; plotW = xSize - 2 * border; plotH = (ySize - 2 * border - 3)/2; PicX = border; picY = border +plotH;

picW = xSize - 2 * border;//球杆框的宽度 picH = (ySize - 2 * border - 3)/2;//球杆框的高度 }

(2)绘制小车的部分程序如下: g.clipRect(picX, picY, picW, picH);//做球杆所在的框

g.setColor(Color.white);

g.fillRect(oldrect[0] - 30, oldrect[1] - 30, oldrect[2] + 50, oldrect[3] + 50 + 200);//框变大 y = picX + (int) (((-yMinScale + data [0]) * (double) plotW) / (yMaxScale - yMinScale)) +80; g.setColor(Color.blue); //画轮子

g.fillOval(y-12, (picY + (3*picH)/4) +45, 8, 8); g.setColor(Color.blue);//画轮子

g.fillOval(y+4, (picY + (3*picH)/4)+45, 8, 8); g.setColor(Color.darkGray);//画轨道

g.drawLine(plotX, (picY + (3*picH)/4)+58-5, plotX+plotW, (picY+(3*picH)/4)+53); g.drawLine(plotX, (picY + (3*picH)/4)+58-5, plotX+plotW, (picY+(3*picH)/4)+59-5); g.setColor(Color.gray); //画出小车 g.fillRect(y - 15, (picY + (3 * picH) / 4)+32, 30, 15);

2.2 小车运动轨迹的控制

根据所建立的系统模型来仿真小车运动,可见小车各个部分的运动轨迹为所建立的系统模型传递的参数控制。

小车框的坐标和大小与oldrect[]有关: oldrect[0] y或y+车面杆投影长,取其小者

oldrect[1] 一横值或横值加杆到杆低的垂直位移,取其小者 oldrect[2] 杆投影长

oldrect[3] 杆到杆底的垂直距离

if(Math.abs(40D * Math.sin(data[1])) <= 40D)

{ g.drawLine(y, (5 + picY + (3 * picH) / 4) +33, y + (int) (scale * Math. Sin (data[1])), (5 + picY + (3 * picH) / 4) - (int)(scale * Math.cos(data [1])) - 10); g.setColor (Color. Red);

g.fillOval ((y + (int) (scale * Math.sin (data [1]))) - 5, (5 + picY + (3 * picH) / 4) - (int) (scale * Math.cos (data [1])) - 15, 10, 10);

Oldrect [0] = Math.min(y, y + (int) (scale * Math.sin (data [1]))); Oldrect [1] = Math.min ((5 + picY + (3 * picH) / 4) - 10, (5 + picY + (3 * picH) / 4) - (int) (scale * Math.cos (data [1])) - 10);

Oldrect [2] = Math.abs ((int) (scale * Math.sin (data [1]))); Oldrect [3] = Math.abs ((int) (scale * Math.cos (data [1]))); } else

{ Oldrect [0] = y;

Oldrect [1] = (5 + picY + (3 * picH) / 4) - 10; Oldrect [2] = 0; Oldrect [3] = 0; }

2.3 用Jfreechart显示图表

仔细观察我们在上面贴出来的那个图表就会发现,它的横轴是时间系列,用来表示时间的进度,而不是表示固定不变的几个坐标,它不是静止的,是动态的。这里的两条曲线的任意点的取值是符合某种运动控制规律的,需要配合倒立摆模型的数据来完成。

设计思路:在applet中绘制实时曲线图比较复杂,由于applet的坐标系定义是左上角为零,顺屏幕向右、向下建立坐标轴,这与我们一般坐标建立相悖。利用jfreechart的time series chart可以建立时序图,利用后台线程产生需要的曲线数据,这里可采用timer类实现。利用timeseries类可以产生chart需要的数据形式。

由于使用jfreechart的自带类库,chart还可动态完成图表形式的改变给图表增加了实用的附加功能:利用功能菜单可以对坐标轴、背景色、字体等进行动态改变,还可利用鼠标关联,显示任意时刻的图表数据。程序仿真结果如图3所示:

图3 倒立摆仿真实验表

从上面结果我们可以看到,并不是所有的数据都是我们需要的。我们可以

这样进行改进,当鼠标放置在折线上时才显示我们想要的数据。改进后的显示图表如图4所示:

图4 改进后仿真实验表

五.总结

本文以单级倒立摆为对象研究采用虚拟图表来显示自控实验的各种数据,目

的是通过虚拟实验表能够直观地反映出实验过程中各种参数的变化对整个实验过程的影响。通过仿真实验可以观察到随着小车来回的运动,运动参数可以自动显示在生成的虚拟图表上,以便于对实验结果的分析研究。

参考文献

[1] Graham C. Goodwin, Stefan F.Graebe, Mario E. Salgado. Control system design. [2] 文福安 王昀 基于JAVA技术的虚拟仪器元件库设计与实现,计算机应用技术,

2010,26-30.

[3] 马幼捷 安小东 虚拟实验技术的应用研究 天津理工大学电力系统及其自动化,2008,40-46.

[4] 吕正 虚拟仿真实验在实验室中的应用 华北电力大学 大学物理实验 [5] 杨世勇 徐莉苹 王培进 单级倒立摆的PID控制 控制工程 2007

[6] 邵丽萍 邵光亚 张后杨.Java语言程序设计 清华大学出版社 2004 附注:

作者简介:张彦军:(1960-),男,教授,硕士研究生导师,研究方向:过程控制和自动化装置的研究。

马法平,男,(1988-),研究生,过程控制和自动化装置的研究,青岛科技大学

通讯地址:山东青岛四方区郑州路53号青岛科技大学自动化与电子工程学院,邮编:266042 联系电话:15854288531 mfp_1988@163.com

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4