java串口通信
??Java提供了?CommunicationAPI(包含于javax.comm包中)用于通過與機器無關的方式,控制各種外部設備。Communications?API,是標準的Java的擴展部分,它在JavaAPI中是沒有附帶的。因此,必須先在SUN公司網站的Java站點(www.java.sun.com)上下載這個擴展類庫。
1.1Communications?API?簡介
?Communications?API?的核心是抽象的CommPort類及其兩個子類:SerialPort類和ParallePort類。其中,SerialPort類是用于串口通信的類,ParallePort類是用于并行口通信的類。CommPort類還提供了常規的通信模式和方法,例如:getInputStream(?)方法和getOutputStream(?)方法,專用于與端口上的設備進行通信。
然而,這些類的構造方法都被有意的設置為非公有的(non-public)。所以,不能直接構造對象,而是先通過靜態的CommPortIdentifer.getPortIdentifiers()獲得端口列表;再從這個端口列表中選擇所需要的端口,并調用CommPortIdentifer對象的Open(?)方法,這樣,就能得到一個CommPort對象。當然,還要將這個CommPort對象的類型轉換為某個非抽象的子類,表明是特定的通訊設備。該子類可以是SerialPort類和ParallePort類中的一個。下面將分別對CommPort類,CommPortIdentifier類,串口類SerialPort進行詳細的介紹。
1.2?CommPortIdentifier類
CommPortIdentifier類的方法如下:
方法?說明
addPortName(String,?int,?CommDriver)?添加端口名到端口列表里
addPortOwnershipListener(CommPortOwnershipListener)?添加端口擁有的監聽器
removePortOwnershipListener(CommPortOwnershipListener)?移除端口擁有的監聽器
getCurrentOwner()?得到當前占有端口的對象或應用程序
getName()?得到端口名稱
getPortIdentifier(CommPort)?得到參數打開的端口的CommPortIdentifier類型對象
getPortIdentifier(String)?得到以參數命名的端口的CommPortIdentifier類型對象
getPortIdentifiers()?得到系統中的端口列表
getPortType()?得到端口的類型
isCurrentlyOwned()?判斷當前端口是否被占用
open(FileDescriptor)?用文件描述的類型打開端口
open(String,?int)?打開端口,兩個參數:程序名稱,延遲時間(毫秒數)
1.3?SerialPort類
SerialPort關于串口參數的靜態成員變量
成員變量?說明?成員變量?說明?成員變量?說明
DATABITS_5?數據位為5?STOPBITS_2?停止位為2?PARITY_ODD?奇檢驗
DATABITS_6?數據位為6?STOPBITS_1?停止位為1?PARITY_MARK?標記檢驗
DATABITS_7?數據位為7?STOPBITS_1_5?停止為1.5?PARITY_NONE?空格檢驗
DATABITS_8?數據位為8?PARITY_EVEN?偶檢驗?PARITY_SPACE?無檢驗
SerialPort對象的關于串口參數的函數
方法?說明?方法?說明
getBaudRate()?得到波特率?getParity()?得到檢驗類型
getDataBits()?得到數據位數?getStopBits()?得到停止位數
setSerialPortParams(int,?int,?int,?int)?設置串口參數依次為(波特率,數據位,停止位,奇偶檢驗)
SerialPort關于事件的靜態成員變量
成員變量?說明?成員變量?說明
BI?Break?interrupt中斷?FE?Framing?error錯誤
CD?Carrier?detect載波偵聽?OE?Overrun?error錯誤
CTS?Clear?to?send清除以傳送?PE?Parity?error奇偶檢驗錯誤
DSR?Data?set?ready數據備妥?RI?Ring?indicator響鈴偵測
DATA_AVAILABLE?串口中的可用數據?OUTPUT_BUFFER_EMPTY?輸出緩沖區空
SerialPort中關于事件的方法
方法?說明?方法?說明?方法?說明
isCD()?是否有載波?isCTS()?是否清除以傳送?isDSR()?數據是否備妥
isDTR()?是否數據端備妥?isRI()?是否響鈴偵測?isRTS()??是否要求傳送
addEventListener(SerialPortEventListener)???向SerialPort對象中添加串口事件監聽器
removeEventListener()?移除SerialPort對象中的串口事件監聽器
notifyOnBreakInterrupt(boolean)?設置中斷事件true有效,false無效
notifyOnCarrierDetect(boolean)?設置載波監聽事件true有效,false無效
notifyOnCTS(boolean)?設置清除發送事件true有效,false無效
notifyOnDataAvailable(boolean)?設置串口有數據的事件true有效,false無效
notifyOnDSR(boolean)?設置數據備妥事件true有效,false無效
notifyOnFramingError(boolean)?設置發生錯誤事件true有效,false無效
notifyOnOutputEmpty(boolean)?設置發送緩沖區為空事件true有效,false無效
notifyOnParityError(boolean)?設置發生奇偶檢驗錯誤事件true有效,false無效
notifyOnRingIndicator(boolean)?設置響鈴偵測事件true有效,false無效
getEventType()?得到發生的事件類型返回值為int型
sendBreak(int)?設置中斷過程的時間,參數為毫秒值
setRTS(boolean)?設置或清除RTS位
setDTR(boolean)?設置或清除DTR位
SerialPort中的其他常用方法
方法?說明
close()?關閉串口
getOutputStream()?得到OutputStream類型的輸出流
getInputStream()?得到InputStream類型的輸入流
posted on 2007-02-01 14:39
OMG 閱讀(1786)
評論(0) 編輯 收藏 所屬分類:
JavaX