5 實(shí)例
以一個(gè)交流調速網(wǎng)絡(luò )監控系統為例說(shuō)明網(wǎng)絡(luò )監控軟件的開(kāi)發(fā)。系統組成見(jiàn)圖2。
圖2 交流調速網(wǎng)絡(luò )監控系統
系統采用Java結合C++進(jìn)行系統設計。需要用到Java Socket、JNI、JDBC、Java多線(xiàn)程以及C++ DLL等應用。
(1) 現場(chǎng)端實(shí)現現場(chǎng)數據的收集
① 由JNI調用C++ DLL實(shí)現轉速反饋數據的采集
系統由JNI調用操作數據采集卡的DLL完成實(shí)時(shí)數據的采集。如類(lèi)ACTimingNC.java
public class ACTimingNC
{ ......
public native short inport(short port); //聲明本地方法inport(),
public native void outport(short port,int value); //聲明本地方法outport()
public native float sample(short base,int num);//聲明本地方法sample()
static{ System.loadLibrary("PCL8112.dll");} //調入本地庫
//聲明三種本地方法:inport()用于返回數據采集卡端口號,outport()用于向指定的端口輸出數值,sample()用于啟動(dòng)采樣,返回采集到的數據。
public static void main(String args[])
{ ACTimingNC ACtiming=new ACTimingNC("交流調速網(wǎng)絡(luò )監控現場(chǎng)端");
...... } }
然后在命令提示符下鍵入javac ACTimingNC.java進(jìn)行編譯生成ACTimingNC.class,再運行javah ACTimingNC,得到C++文件ACTimingNC.h,然后編制相應的ACTimingNC.cpp文件實(shí)現對應的本地方法即可,最后編譯形成動(dòng)態(tài)鏈接庫DLL文件,放到應用程序路徑下。運行時(shí)就實(shí)現了Java調用DLL對硬件的操作。
② Java串口包實(shí)現對變頻器的參數查詢(xún)和控制
利用Sun公司提供的串口包,再結合臺達變頻器的控制協(xié)議,就可以實(shí)現雙方的數據交流了。例如控制命令串的發(fā)送代碼如下:
import java.io.*;import java.util.*;import javax.comm.*;
class SerialportIO
{ public static void main(String args[])
{ …… //得到對串口COM1的控制權
try{ serialPort.setSerialPortParams(4800,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_ODD);
//實(shí)施臺達變頻器串口協(xié)議:波特率、數據位、停止位和奇偶校驗位分別為4800、8、1、O(奇校驗)。
}catch(UnsupportedCommOperationException e3){}
try{ String s="......"; //s為控制命令串,具體參照說(shuō)明書(shū)
os.writeUTF(s); }catch(IOException e3){} }}}}}
(2) 由Java Socket實(shí)現數據在現場(chǎng)端和服務(wù)器端的傳輸
例如從現場(chǎng)端向服務(wù)器端傳送數據:由現場(chǎng)端提交監測數據,數據服務(wù)器端接收數據?,F場(chǎng)端部分代碼如下:
public class SceneServer //數據服務(wù)器端
{ public static void main(String args[])
{ try{ Socket socket=new Socket("202.199.133.46",PORT); //與服務(wù)器建立連接
PrintStream os=new PrintStream(wss.getOut- putStream()); //輸出流
DataInputStream is=new DataInputStream(wss.get- InputStream());//輸入流
StringBuffer buf=new StringBuffer(100); //定義數據緩沖區
... ...//進(jìn)行數據發(fā)送
}catch(IOException e) {} } }
在數據服務(wù)器端,考慮到以后系統的擴展,可能有多臺現場(chǎng)端智能設備提出發(fā)送數據請求,所以程序必須實(shí)現多線(xiàn)程。部分代碼如下:
public class DSServer //數據服務(wù)器端
{ public static final PORT=5000; ServerSocket ss=null; Socket s=null;
public static void main(String args[])
{ try{ ss=new ServerSocket(PORT);
while(true) {s=ss.accept(); new ServerThread(s).start(); }
}catch(IOException e1) {} ... ... } }
class ServerThread extends Thread
{ Socket socket=null;
ServerThread(Socket socket)
{ super("ServerThread"); this.socket=socket; }
public void run()
{ ……//接通輸入輸出流,實(shí)現數據傳輸以及操作到庫。 } }
這段程序由兩個(gè)類(lèi)組成,主類(lèi)SceneServer負責建立處理連接請求,線(xiàn)程類(lèi)ServerThread用于創(chuàng )建一個(gè)新的線(xiàn)程,負責處理現場(chǎng)端的輸入輸出請求。反方向的控制信息傳輸只要加入相應代碼即可。
(3) 服務(wù)器端采用JSP結合Java Bean實(shí)現監控
① 由JDBC訪(fǎng)問(wèn)SQL Server2000數據庫
對于本系統,在SQL Server中需建立用戶(hù)表Users、設備表Devices、實(shí)時(shí)數據表RTData、歷史數據表HistoryData。用戶(hù)表用于進(jìn)行身份驗證,不同的用戶(hù)有不同的管理權限;而設備表包括現場(chǎng)設備的清單及其狀態(tài);實(shí)時(shí)數據表保存實(shí)時(shí)數據,如可以保存一天內的實(shí)時(shí)數據,在本系統中主要指轉速反饋、工作電流、工作頻率,然后每天將當天數據挪進(jìn)歷史數據表;歷史數據表用于保存一段時(shí)期中的運行數據。于是Web服務(wù)器可以根據客戶(hù)端的不同請求作出響應,由JDBC操作數據庫。這里數據庫實(shí)際上成為了現場(chǎng)數據上傳和控制信息下達的通信中樞。部分代碼如下:
import java.sql.*;
class DataIO
{ public static void main(String args[])
{ try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //驅動(dòng)器
String url="jdbc:odbc:ACTiming"; //數據源
con=DriverManager.getConnection(url,"",""); //連接數據庫
state=con.createStatement();
String query="select freq,curr,rev from HistoryData where DeviceID=1 and date>20030410 and date<20030412"; //例如查看歷史數據表中1號設備在2003-4-10到2003-4-12號之間頻率、電流、轉速的運行數據。
ResultSet result=statement.executeQuery(query);
... ... //然后可以從結果集中取數據分析或送顯
}catch(Exceptione) ystem.out.println(e.toString());} }
② 系統的登陸
對不同的用戶(hù)登陸給出不同的操作界面。系統管理管理員可以完全操作整個(gè)系統,包括用戶(hù)管理、系統管理;對不同的現場(chǎng)系統的負責人只能監控自己的系統;而對網(wǎng)上演示,允許游客登陸只能觀(guān)看給定的系統,不能控制。登陸界面通過(guò)JSP連接用戶(hù)表進(jìn)行身份驗證,通過(guò)驗證后給出相應界面。
③ 其他,如顯示曲線(xiàn)類(lèi)、數據分析類(lèi)、報表打印類(lèi)等
這些類(lèi)均可以制作成Java Bean,嵌入JSP中實(shí)現。其功能分別實(shí)現接收到數據后的趨勢曲線(xiàn)繪制和顯示,可以采用雙緩沖技術(shù)來(lái)進(jìn)行。數據分析可以實(shí)現一定的智能算法,以便進(jìn)行在線(xiàn)系統分析、故障預測等。報表打印類(lèi)實(shí)現打印報表,包括故障報警記錄、歷史記錄、當天記錄等等。
6 結語(yǔ)
基于Java進(jìn)行網(wǎng)絡(luò )監控軟件的開(kāi)發(fā)可以充分利用Java的網(wǎng)絡(luò )特性,并可以集成C++代碼,實(shí)現本地系統控制與遠程網(wǎng)絡(luò )監控的統一,極大地提高了軟件開(kāi)發(fā)效率。對交流調速網(wǎng)絡(luò )監控軟件的設計過(guò)程以及實(shí)驗室校園網(wǎng)環(huán)境下的調試運行顯示系統性能良好。進(jìn)一步完善軟件系統設計以及進(jìn)行在線(xiàn)算法調整和控制是今后研究中很有意義的課題。