吳曉燕 王飛 吳海坤
【摘要】本文介紹的是數(shù)字糧庫(kù)信息化軟件系統(tǒng)的智能通風(fēng)模塊,系統(tǒng)建設(shè)了一個(gè)綜合性多功能的糧庫(kù)信息化管理網(wǎng)絡(luò)平臺(tái)。平臺(tái)系統(tǒng)基于B/S結(jié)構(gòu),實(shí)現(xiàn)在線業(yè)務(wù)處理、信息發(fā)布、智能控制的目的。其中通風(fēng)模塊的通風(fēng)狀態(tài)檢測(cè),通過(guò)串口發(fā)送指令控制通風(fēng)設(shè)備,接收串口指令顯示通風(fēng)設(shè)備狀態(tài)。系統(tǒng)在Java程序中使用comm.jar開發(fā)包編程實(shí)現(xiàn)串口通信。
【關(guān)鍵詞】智能通風(fēng);狀態(tài)監(jiān)控;Java串口通信
引言
Java由于具有開放性、平臺(tái)無(wú)關(guān)性和面向?qū)ο蟮忍匦?,使之成為一個(gè)理想的軟件開發(fā)平臺(tái)[1]。因此智能通風(fēng)[2]模塊與下位機(jī)的通信方式選擇RS232串口通信。本文使用Java開發(fā)基于B/S結(jié)構(gòu)的智能通風(fēng)狀態(tài)監(jiān)控串口通信程序,具有很強(qiáng)的實(shí)用意義。
1.智能通風(fēng)結(jié)構(gòu)模式
智能通風(fēng)模塊的物理結(jié)構(gòu)為B/S(Browser/Server)模式,即瀏覽器/服務(wù)器模式,用戶可聯(lián)網(wǎng)通過(guò)Web瀏覽器訪問(wèn)系統(tǒng),連接服務(wù)器對(duì)各通風(fēng)設(shè)備進(jìn)行監(jiān)控維護(hù)。
服務(wù)器通過(guò)串口與通風(fēng)設(shè)備進(jìn)行通信,其流程如圖1所示。進(jìn)入頁(yè)面,發(fā)送狀態(tài)查詢數(shù)據(jù)幀查詢通風(fēng)設(shè)備狀態(tài)。若超過(guò)T0時(shí)間則提示響應(yīng)失敗。在T0時(shí)間內(nèi)設(shè)備有響應(yīng)則分析返回?cái)?shù)據(jù)幀顯示各通風(fēng)設(shè)備的狀態(tài)。用戶點(diǎn)擊通風(fēng)設(shè)備圖標(biāo),發(fā)送操作數(shù)據(jù)幀,在T0時(shí)間內(nèi)通風(fēng)設(shè)備進(jìn)行響應(yīng),并返回?cái)?shù)據(jù)。如果通風(fēng)設(shè)備操作成功則提示操作成功,否則提示操作失敗。若超過(guò)T0時(shí)間則提示響應(yīng)失敗。
圖1 程序流程圖
2.通風(fēng)設(shè)備通信協(xié)議
智能通風(fēng)通信協(xié)議[3]以幀為基本單元傳輸?shù)?,每幀由幀頭、裝置地址、報(bào)文命令碼、報(bào)文長(zhǎng)度、正文、累加和及結(jié)束符等組成。每個(gè)域由一定字節(jié)組成。其中讀寫寄存器的通信協(xié)議采用Modbus協(xié)議。其命令幀格式如圖2所示。
圖2 讀寫寄存器幀數(shù)據(jù)格式
3.智能通風(fēng)設(shè)備監(jiān)控
智能通風(fēng)設(shè)備監(jiān)控模塊如圖 3所示,通過(guò)選擇倉(cāng)號(hào)顯示該倉(cāng)號(hào)通風(fēng)設(shè)備的狀態(tài),通風(fēng)設(shè)備有通風(fēng)窗、軸流風(fēng)機(jī)、離心風(fēng)機(jī)和空調(diào)等。點(diǎn)擊圖中通風(fēng)設(shè)備圖標(biāo)可控制設(shè)備的開關(guān)。
4.Java串口通信技術(shù)實(shí)現(xiàn)
Sun的J2SE沒(méi)有直接提供串行通訊協(xié)議的開發(fā)包,而是以獨(dú)立的jar包形式發(fā)布的comm.jar[4],稱之為Java(tm)Communications ?API,是J2SE的標(biāo)準(zhǔn)擴(kuò)展。提供對(duì)RS-232串行端口通訊的支持。
Java讀寫串口過(guò)程主要是調(diào)用Javax.comm包中的comm API函數(shù)。在Javax.comm包中串口的輸入輸出操作是數(shù)據(jù)流形式,在初始化串口波特率和數(shù)據(jù)位的同時(shí),將輸入輸出流和該串口建立一個(gè)映射,串口的輸入輸出操作就直接反映在輸入流和輸出流上。通過(guò)CommPort類的getInputStream()和getOutputStream()方法即可分別取得端口的輸入流和輸出流。
串口操作主要包括初始化串口、讀寫串口和關(guān)閉串口等操作。初始化串口操作SB.Initialize()打開串口并配置串口,如果初始化成功返回1,否則返回-1。打開串口需確定串口號(hào)和打開方式。
首先使用javax.comm. CommPortIdentifier類確定是否有可用的通信端口以及為IO操作打開通信端口。其中g(shù)etPortIdentifier 對(duì)象得到系統(tǒng)端口列表,open方法可以返回一個(gè)CommPort對(duì)象。open方法有兩個(gè)參數(shù),第一個(gè)是String,通常設(shè)置為應(yīng)用程序的名字。第二個(gè)參數(shù)是時(shí)間,即開啟端口超時(shí)的毫秒數(shù)。當(dāng)端口被另外的應(yīng)用程序占用時(shí),將拋出PortInUseException異常。
接著使用setSerialPortParams方法配制串口靜態(tài)成員變量波特率、數(shù)據(jù)位、數(shù)據(jù)停止位和奇偶校驗(yàn)。
讀寫操作使用SB.WritePort(SendMsg)和RevMsg=SB.ReadPortX()函數(shù)中使用in=serialPort.getInputStream()從端口讀取數(shù)據(jù)以及out=serial-
Port.getOutputStream()往端口寫數(shù)據(jù)。
5.結(jié)束語(yǔ)
本文介紹了智能化糧庫(kù)系統(tǒng)中的通風(fēng)模塊,模塊通過(guò)發(fā)送接收串口通信數(shù)據(jù)包進(jìn)行監(jiān)控通風(fēng)設(shè)備狀態(tài)以及控制通風(fēng)設(shè)備開關(guān)閉合。系統(tǒng)使用Java的Comm.jar開發(fā)包實(shí)現(xiàn)串口通信比較簡(jiǎn)單,可移植性好,具有一定的實(shí)用性。
參考文獻(xiàn)
[1]周海濤,高興鎖,江曉峰.基于java數(shù)據(jù)采集串口通信的設(shè)計(jì)和實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2006(4):141-142.
[2]陳德發(fā),秦維平,馬飛.智能通風(fēng)技術(shù)在高大平房倉(cāng)中的應(yīng)用[J].糧油倉(cāng)儲(chǔ)科技通訊,2014,30(1):29-31.
[3]錢偉青,張茂青,宦洪才,彭芳.基于Modbus協(xié)議的智能通風(fēng)系統(tǒng)[J].電氣時(shí)代,2006(8):110-112.
[4]伍祥生,王克宏.javax.comm API規(guī)范及其功能[J].微型機(jī)與應(yīng)用,1999,18(6):38-40.
作者簡(jiǎn)介:吳曉燕(1988—),女,安徽安慶人,碩士,從事Java開發(fā)和雷達(dá)監(jiān)控設(shè)計(jì)工作。