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