邱占芝,于曉龍
(大連交通大學(xué) 軟件學(xué)院,遼寧 大連 116208)
汽車衡稱重系統(tǒng)廣泛應(yīng)用于煤炭、冶金、石油、化工、港口、倉儲等行業(yè)領(lǐng)域,完成物料的計量與統(tǒng)計功能,為相應(yīng)行業(yè)的企業(yè)生產(chǎn)、調(diào)度、指揮提供可靠的決策依據(jù).隨著科學(xué)技術(shù)的高速發(fā)展和計算機(jī)與電子設(shè)備性能價格比的不斷提高,汽車衡稱重系統(tǒng)也從人工記數(shù)、人工統(tǒng)計與匯總,發(fā)展到今天的自動稱重、自動存儲、自動統(tǒng)計與匯總.在當(dāng)今的網(wǎng)絡(luò)時代,更要求汽車衡稱重系統(tǒng)不僅能夠?qū)崿F(xiàn)自動稱重、存儲、統(tǒng)計與匯總,而且要實現(xiàn)網(wǎng)絡(luò)化管理和數(shù)據(jù)共享,實現(xiàn)稱重數(shù)據(jù)的數(shù)據(jù)庫存儲.企業(yè)管理者需要在任意時間、任意地點(diǎn)、進(jìn)行物料稱重數(shù)據(jù)的查詢、匯總和統(tǒng)計分析,以便及時調(diào)度和決策.同時,還需要杜絕稱重系統(tǒng)的認(rèn)為作弊現(xiàn)象的發(fā)生,保證稱重數(shù)據(jù)的客觀性和準(zhǔn)確性.目前,傳統(tǒng)的汽車衡稱重管理系統(tǒng)大多采用 VB、Delphi、C/C++等語言,而采用 JAVA語言實現(xiàn)衡器自動稱重的方法還不多見.JAVA語言是一種面向?qū)ο?、分布式、解釋型、健壯安全、結(jié)構(gòu)中立、可移植、性能優(yōu)異、多線程的動態(tài)語言,其無比的健壯性、可靠性和平臺無關(guān)性,使得采用JAVA語言的應(yīng)用系統(tǒng)開發(fā)與維護(hù)成本低、多平臺信息傳遞信息塊,并且其豐富的類庫使其廣泛應(yīng)用于網(wǎng)絡(luò)化系統(tǒng)的開發(fā)與實現(xiàn)中.
本文針對汽車衡稱重系統(tǒng)的網(wǎng)絡(luò)化需求,研究基于JAVA的網(wǎng)絡(luò)化汽車衡稱重管理系統(tǒng)的方案設(shè)計和關(guān)鍵技術(shù)實現(xiàn)問題,討論汽車衡自動稱重數(shù)據(jù)的采集與自動存儲JAVA方法,并通過某大型企業(yè)的汽車衡稱重系統(tǒng)的研發(fā)實例,驗證其方案的可行性和有效性.
網(wǎng)絡(luò)化汽車衡稱重管理系統(tǒng),總體結(jié)構(gòu)如圖1所示.
圖1 系統(tǒng)總體結(jié)構(gòu)圖
統(tǒng)體系結(jié)構(gòu)分為3層:稱重現(xiàn)場、數(shù)據(jù)中心、網(wǎng)絡(luò)節(jié)點(diǎn)終端(企業(yè)管理各部門、計劃調(diào)度等).根據(jù)系統(tǒng)功能與技術(shù)實現(xiàn)的需求,系統(tǒng)采用C/S與B/S結(jié)合的運(yùn)行方案.稱重現(xiàn)場,即汽車衡稱重數(shù)據(jù)的采集與自動存儲采用C/S模式.利用Intranet技術(shù),組成本地局域網(wǎng),計算機(jī)采集汽車衡稱重數(shù)據(jù)并自動存儲本地服務(wù)器,同時通過網(wǎng)絡(luò),同步存儲于數(shù)據(jù)中心服務(wù)器,以便于進(jìn)行遠(yuǎn)程數(shù)據(jù)瀏覽、查詢和統(tǒng)計.數(shù)據(jù)采集端采用C/S模式,可保證響應(yīng)速度快、處理復(fù)雜事物邏輯能力強(qiáng)、數(shù)據(jù)存取準(zhǔn)確、可靠等要求.稱重數(shù)現(xiàn)場外的其余部分,采用B/S 模式.采用基于 J2EE[1]平臺的 Struts[2]架構(gòu),設(shè)計網(wǎng)絡(luò)化稱重管理系統(tǒng),實現(xiàn)網(wǎng)絡(luò)遠(yuǎn)程訪問和數(shù)據(jù)查詢與統(tǒng)計.B/S模式的稱重管理系統(tǒng),可實現(xiàn)分布式數(shù)據(jù)查詢與管理,具有可移植性強(qiáng)、重用性好、易于維護(hù)、可伸縮性強(qiáng)等諸多優(yōu)勢.
汽車衡稱重現(xiàn)場系統(tǒng)結(jié)構(gòu)如圖2所示.
圖2 汽車衡稱重現(xiàn)場系統(tǒng)結(jié)構(gòu)
系統(tǒng)軟件分為C/S端軟件和B/S端軟件兩個部分.
C/S端軟件的主要功能是日常稱重數(shù)據(jù)處理,包括:稱重數(shù)據(jù)的采集;顯示與存儲;參數(shù)設(shè)置(串口參數(shù)配置、計量單位配置、儀表選型等)等.
B/S端軟件的主要功能是稱重數(shù)據(jù)的管理,包括:用戶權(quán)限控制與管理;基礎(chǔ)數(shù)據(jù)(用戶數(shù)據(jù)、車輛信息、稱重計劃等)維護(hù);數(shù)據(jù)傳輸(本地服務(wù)器與數(shù)據(jù)中心服務(wù)器數(shù)據(jù)同步);數(shù)據(jù)查詢;統(tǒng)計分析;報表打印等.
網(wǎng)絡(luò)化汽車衡稱重管理系統(tǒng)功能結(jié)構(gòu)如圖3所示.
圖3 汽車衡稱重管理系統(tǒng)功能框圖
稱重數(shù)據(jù)采集是稱重現(xiàn)場端的關(guān)鍵技術(shù).計算機(jī)必須準(zhǔn)確監(jiān)控和接收汽車衡稱重數(shù)據(jù),同時同步存儲于本地服務(wù)器和數(shù)據(jù)中心服務(wù)器.數(shù)據(jù)采集端程序的開發(fā)可以采用VB、Delphi、C/C++等任一種高級語言.JAVA由于具有開放性、平臺無關(guān)性和面向?qū)ο蟮忍匦裕蛊涑蔀橐粋€理想的網(wǎng)絡(luò)化系統(tǒng)軟件開發(fā)工具.利用JAVA串口通信API開發(fā)了一個用于串口通信的JAVA程序,大大簡化了對串口進(jìn)行操作的過程[3-6].
Sun的J2SE中沒有直接提供串行通訊協(xié)議的開發(fā)包,而是以獨(dú)立的jar包形式發(fā)布在java.sun.com網(wǎng)站上,稱之為Java(tm)Communications API,它是J2SE的標(biāo)準(zhǔn)擴(kuò)展.Comm.jar提供了對RS-232串行端口通訊的支持,Java通過該類庫能夠極大地簡化對串口的操作過程.
Javax.comm類庫通過SerialPort對象來對串口事件進(jìn)行控制,通過getInputStream()方法讀取串口的數(shù)據(jù),getOutputStream()方法向串口寫數(shù)據(jù);通過setSerialPortParams()方法設(shè)置串口的通信協(xié)議.
與comm.jar開發(fā)包一起的還有兩個重要的文件,win32com.dll和 javax.comm.Properties.comm.jar提供了通信用的 java API,win32com.dll提供了供comm.jar調(diào)用的本地驅(qū)動接口,Javax.comm.properties是這個驅(qū)動的類配置文件.
Javax.comm類庫的安裝方法如下:
(1)將Sun公司提供的Javax.comm類庫包java.comm.win32.zip(可從 http://java.sun.com下載)解壓;
(2)將win32com.dll文件拷貝至<JDK>in目錄下;
(3)將comm.jar、javax.comm.properties文件拷貝至<JDK>lib目錄下;
(4)將comm.jar文件添加到classpath環(huán)境變量中.
串口讀寫的軟件實現(xiàn)源碼(略).
將上述系統(tǒng)方案和技術(shù)應(yīng)用于某大型礦業(yè)公司的網(wǎng)絡(luò)化運(yùn)銷控制與管理系統(tǒng),網(wǎng)絡(luò)操作系統(tǒng)采用Windows 2003 Server,數(shù)據(jù)庫管理系統(tǒng)采用SQL Server 2005,Web 服務(wù)器采用 Apache Tomcat.以型號為XK3190-A9的汽車衡為例,其輸出的稱重數(shù)據(jù)通過串口與計算機(jī)通信,所有數(shù)據(jù)均為ASCⅡ碼,每組數(shù)據(jù)有10位組成,第1位為起始位,第10位為停止位,中間8位為數(shù)據(jù)位.通信方式分為連續(xù)方式和指令方,其連續(xù)通信方式為:
所傳送數(shù)據(jù)為儀表顯示的當(dāng)前稱量(毛重或凈重).每幀數(shù)據(jù)由12組數(shù)據(jù)組成,格式如附表.
附表 通信數(shù)據(jù)格式
根據(jù)用戶需求,計算機(jī)采集的稱重數(shù)據(jù)顯示于“稱重過衡單”,結(jié)果如圖4所示.
圖4 地衡稱重記錄單
經(jīng)過調(diào)試與運(yùn)行表明:基于JAVA的串口通信不僅簡化了程序?qū)τ诖诘牟僮?,而且由于JAVA多線程機(jī)制使程序具有并行性和高可靠性,并且可以節(jié)省系統(tǒng)資源.由于JAVA的平臺無關(guān)性,可以使JAVA程序在不同的平臺進(jìn)行方便的移植.
本文給出了基于C/S和B/S相結(jié)合模式的汽車衡稱重系統(tǒng)的總體結(jié)構(gòu)設(shè)計并給出實現(xiàn)數(shù)據(jù)采集部分的關(guān)鍵JAVA代碼.系統(tǒng)可使管理人員有效監(jiān)督稱重過程,使稱重過程公開、透明,杜絕人為因素的干擾,防止了舞弊情況的發(fā)生,實現(xiàn)實時多任務(wù)監(jiān)督控制及多級管理,同時降低成本,提高效益,有利于企業(yè)對進(jìn)出物資的稱重計量過程進(jìn)行有效監(jiān)控和科學(xué)管理,具有顯著的社會效益和經(jīng)濟(jì)效益.
[1]JAVA 2 Enterprise Edition,J2EE TM Connector Architecture Specification,V1.0C copyright 2001,Rahul Sharma,Sun Microsystems,Inc.http://JAVA.sun.com/products August 22,2001.
[2]Govind Seshadri,Understanding JavaServer Pages Model 2 architecture[EB/OL].http://www.javaworld.com/javaworld/jw-12-1999/jw-12-ssj-jspmvc.html.
[3]BERRYC A.J2EE Design Pattern Applied[M].New York:Wrox Press,2002.
[4]李良 朱善安.基于java的串口通信[J].電子器件,2007,30(2):714-720.
[5]周海濤,高興鎖,江曉峰.基于JAVA數(shù)據(jù)采集串口通訊的設(shè)計和實現(xiàn)[J].測控自動化,2006,22(2-1):141-142.
[6]馬海平.基于嵌入式Linux的動態(tài)汽車衡的設(shè)計與實現(xiàn)[D].太原:太原理工大學(xué),2007.