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