<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    追隨Java
    簡(jiǎn)單的事情重復(fù)做,就會(huì)產(chǎn)生累積效應(yīng)!
    posts - 260,  comments - 338,  trackbacks - 0
    ?????????????????????????????????關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)?
    ???????????????由于這幾天要通過(guò)java調(diào)用通過(guò)串口或并口連接的硬件資源,所以我就要用到和底層的硬件進(jìn)行通訊。通過(guò)RS-232的通訊協(xié)議,了解電腦和外設(shè)是怎樣進(jìn)行通訊的。在應(yīng)用中我們也可以通過(guò)JNI來(lái)實(shí)現(xiàn)(詳情請(qǐng)見http://m.tkk7.com/hgq0011/archive/2005/09/21/13637.html),這樣的話,就必須知道更多的知識(shí)。由于java已經(jīng)提供我們一個(gè)javacomm20-win32通用的API我們還是實(shí)行 “拿來(lái)主義”吧。我就把整個(gè)應(yīng)用的過(guò)程詳細(xì)的說(shuō)一下,希望給需要的人一點(diǎn)幫助。?
    ????????????我們經(jīng)過(guò)串口和外設(shè)通訊,下面我就以串口為例進(jìn)行解說(shuō)。?
    ????????????1)我們要準(zhǔn)備相應(yīng)的設(shè)備。
    ??????????????????電腦,外設(shè),通過(guò)數(shù)據(jù)線把他們連接起來(lái)。?
    ????????????2)檢驗(yàn)外設(shè)到底是用的那個(gè)COM口和電腦通訊的。
    ??????????????????也就是說(shuō),他們有沒(méi)有真確的連接上。我們可以通過(guò)下載串口通訊口測(cè)試軟件,我用的是"SuperCommTool.exe"的綠色軟件,進(jìn)行測(cè)試的。這軟件很適應(yīng),如果選中的某個(gè)COM已經(jīng)被使用了,它會(huì)給你一個(gè)相應(yīng)的提示(端口以被占用)。如果你不知道到底是使用的那個(gè)端口,那么你可以通過(guò)superCommTool軟件一個(gè)一個(gè)的試,如果正常的話,那么你可以看到有數(shù)據(jù)顯示在數(shù)據(jù)接收窗口。也許,有些主板的串口壞了,那么你就要買一個(gè)轉(zhuǎn)接卡,通過(guò)PCI插口轉(zhuǎn)接。?
    ????????????3)察看外設(shè)使用說(shuō)明書知道外設(shè)的相關(guān)參數(shù)。
    ???????????????比如,波特率,數(shù)據(jù)位,停止位,校驗(yàn)位,等等。只有正確參數(shù),才能顯示正確的數(shù)據(jù)。當(dāng)然,你可以在通訊測(cè)試軟件上調(diào)試這些參數(shù)的。比如:波特率 = 2400,數(shù)據(jù)位 = 8,停止位 = 2 ,校驗(yàn)位 = 1。?
    ????????????4)準(zhǔn)備開發(fā)環(huán)境。
    ????????????最基本的JDK了,你可以使用自己鐘愛的IDE,幫助你開發(fā)。IDE可能自帶了JDK,那么 你要把相應(yīng)的javaComm20-win32放到運(yùn)行時(shí)使用的JDK中。 下載JAVAcomm20-win32。
    ??????????5)了解javaComm20-win32。
    ????????????你必須把win32com.dll復(fù)制到j(luò)ava.home/bin下;把javax.comm.properties 復(fù)制到j(luò)ava.home/lib下;把comm.jar添加到你classPath下。前面兩個(gè)都是非常重要的。?
    ?????????????下面說(shuō)明用到的幾個(gè)類:?
    ??????????????????javax.comm.CommPortIdentifier?
    ?????????????????????通訊端口管理器,CommPortIdentifier是控制訪問(wèn)到通訊端口的中 心類。
    ?????????????????????它包括的方法有:?
    ???????????????????????????a. 通過(guò)驅(qū)動(dòng)決定通訊端口是可用的。?
    ???????????????????????????b. 打開通訊端口為了I/O操作。?
    ???????????????????????????c. 決定端口的擁有者。?
    ???????????????????????????d. 解析端口擁有者的爭(zhēng)奪。?
    ???????????????????????????e. 管理事件顯示在端口擁有者的中的狀態(tài)改變。?
    ?????????????????????一個(gè)應(yīng)用程序首先使用CommPortIdentifier中的方法,通過(guò)相關(guān)的驅(qū)動(dòng)去獲取那些通訊端口是可用的 并且選擇一個(gè)端口便于開始。然后它使用方法在其它類中想CommPort,ParallelPort和SerialPort通過(guò) 這個(gè)端口進(jìn)行通訊。?
    ??????????????????javax.comm.SerialPort?
    ?????????????????????一個(gè)RS-232串口通訊端口。SerialPort 描述底層的接口到一個(gè)串口通訊端口 變得有效的通過(guò)底層的系統(tǒng)。SerialPort定義最小的必需的功能便于串口通訊端口。?
    ??????????????????javax.comm.SerialPortEventListener?
    ?????????????????????串行端口事件傳播。?
    ??????????????????javax.comm.CommDriver?
    ?????????6)代碼的編寫。?
    ???????????????a. 獲取SerialPort sPort對(duì)象的兩種方法。
    ???????????????????1)
    ???????????????????????????System.loadLibrary("win32com");?
    ??????????????????????????????javax.comm.CommDriver?driver?
    =?null;?
    ??????????????????????????????String?driverName?
    =?"com.sun.comm.Win32Driver";?
    ????????????????????????????? SerialPort?sPort?
    =?(SerialPort)?driver.getCommPort("COM4",?CommPortIdentifier.PORT_SERIAL);?
    ??????????????????2)
    ?????????????????????? CommPortIdentifier?portId?=?CommPortIdentifier.getPortIdentifier("COM4");?
    ?????????????????????????? SerialPort?sPort?
    =?(SerialPort)portId.open("shipment",1000);

    ?????????????以上兩種方法都可以。不過(guò)一般都會(huì)采用第二種。方法說(shuō)明我們獲取了對(duì)串行端口(COM4),可以和它進(jìn)行通訊了。?
    ??????????????b. 設(shè)置串行端口通訊參數(shù)。
    sPort.setSerialPortParams(2400,SerialPort.DATABITS_8,SerialPort.STOPBITS_2,SerialPort.PARITY_NONE);?

    ???????????????c. 獲取輸入(出)流。?
    ??????????????????
    ????????????InputStream?is?=?sPort.getInputStream();//從外設(shè)獲取數(shù)據(jù)?
    ?????????????? OutputStream?os?=?sPort.getOutputStream();
    //發(fā)送命令到外設(shè)
    ???????????????d.通過(guò)監(jiān)聽器就可以得到數(shù)據(jù)了。
    ??????????????????
    ?1//Set?notifyOnDataAvailable?to?true?to?allow?event?driven?input.
    ?2????????????sPort.notifyOnDataAvailable(true);
    ?3
    ?4?????????????//?Set?notifyOnBreakInterrup?to?allow?event?driven?break?handling.
    ?5????????????sPort.notifyOnBreakInterrupt(true);
    ?6
    ?7?????????????//?Set?receive?timeout?to?allow?breaking?out?of?polling?loop?during??input?handling.
    ?8????????????sPort.enableReceiveTimeout(30);
    ?9????????????StringBuffer?linkWgt?=?new?StringBuffer();//存放獲取的數(shù)據(jù)
    10????????????sPort.addEventListener(?
    11????????????????new?SerialPortEventListener(){
    12????????????????????public?void?serialEvent(SerialPortEvent?e){
    13????????????????????????int?newData?=?0;
    14????????????????????????//?Determine?type?of?event.
    15????????????????????????switch?(e.getEventType())?{
    16????????????????????????//?Read?data?until?-1?is?returned.?If?\r?is?received?substitute
    17????????????????????????????//?\n?for?correct?newline?handling.
    18????????????????????????????case?SerialPortEvent.DATA_AVAILABLE:
    19????????????????????????????????while?(newData?!=?-1)?{
    20????????????????????????????????????try?{
    21????????????????????????????????????????newData?=?is.read();
    22????????????????????????????????????????if?(newData?==?-1)?{
    23????????????????????????????????????????????break;
    24????????????????????????????????????????}

    25????????????????????????????????????????if?('\r'?==?(char)newData)?{
    26????????????????????????????????????????}
    ?else?{
    27????????????????????????????????????????????linkWgt.append((char)newData);
    28????????????????????????????????????????}

    29????????????????????????????????????}
    ?catch?(IOException?ex)?{
    30????????????????????????????????????????System.err.println(ex);
    31????????????????????????????????????????return;
    32????????????????????????????????????}

    33????????????????????????????????}

    34
    35????????????????????????????//?Append?received?data?to?messageAreaIn.
    36????????????????????????????
    37?????????????????????????????try{
    38????????????????????????????????System.out.println("linkWgt?---------|||||??????????"+Double.valueOf(linkWgt.toString()));
    39????????????????????????????????
    40?????????????????????????????}
    catch(Exception?ew){
    41?????????????????????????????????ew.printStackTrace();
    42?????????????????????????????}
    finally{
    43?????????????????????????????????try{
    44????????????????????????????????????//用完了,記得關(guān)閉端口。
    45?????????????????????????????????????is.close();
    46????????????????????????????????????sPort.close();
    47?????????????????????????????????}
    catch(Exception?c){
    48?????????????????????????????????????c.printStackTrace();
    49?????????????????????????????????}

    50?????????????????????????????}

    51????????????????????????????break;
    52????????????????????????????//?If?break?event?append?BREAK?RECEIVED?message.
    53????????????????????????????case?SerialPortEvent.BI:
    54????????????????????????????????System.out.println("\n---?BREAK?RECEIVED?---\n");
    55????????????????????????}

    56????????????????????}

    57
    58????????????????}

    59????????????);

    ??????????7)常見的異常
    ????????????????a. javax.comm.NoSuchPortException 這個(gè)說(shuō)明你的javax.comm.properties沒(méi)有放到正確的位置。
    ?如果有什么不正確的地方,歡迎批評(píng)指正,謝謝!
    posted on 2007-03-23 09:48 Harryson 閱讀(5961) 評(píng)論(4)  編輯  收藏 所屬分類: Jni--CommunicationJ2SE

    FeedBack:
    # re: 關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
    2007-03-23 12:18 | turbochen
    沒(méi)什么可補(bǔ)充的,有興趣可以參考一下我2004年寫的文章:
    http://blog.csdn.net/turbochen/archive/2004/05/07/8105.aspx
    關(guān)于win32com.dll可以就放在你的應(yīng)用程序(.jar)所在的目錄。不用拔山涉水的放到j(luò)ava.home/bin下,破壞原目錄的內(nèi)容。  回復(fù)  更多評(píng)論
      
    # re: 關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
    2007-03-23 17:15 | Christ Chang
    原來(lái)那篇文章是你寫的,嚴(yán)重頂一下!!  回復(fù)  更多評(píng)論
      
    # re: 關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
    2007-09-21 00:16 | dxr
    頂一下!!!
    不過(guò)我沒(méi)有javax.comm類庫(kù),從網(wǎng)上也下載不了,能給我傳一個(gè)嗎?
    我的郵箱是dxianr@163.com 先謝了!  回復(fù)  更多評(píng)論
      
    # re: 關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
    2013-01-31 12:28 | lsc
    javax.comm.CommDriver driver = null; diver沒(méi)有初始化吧?  回復(fù)  更多評(píng)論
      

    <2013年1月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(10)

    隨筆分類(319)

    AJAX

    Coffee House

    CSS

    Java

    JavaScript

    Open Source

    ProjectManagement

    友情Blog

    最新隨筆

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: **aaaaa毛片免费同男同女| 亚洲午夜无码久久久久小说| 亚洲日本va在线视频观看| 亚洲国产主播精品极品网红| 免费jlzzjlzz在线播放视频| 国产一区二区三区在线免费观看| 尤物永久免费AV无码网站| 国产裸模视频免费区无码| 午夜国产羞羞视频免费网站| 亚洲av区一区二区三| 亚洲精品一级无码鲁丝片 | 无套内射无矿码免费看黄| 美女扒开屁股让男人桶爽免费| 成人婷婷网色偷偷亚洲男人的天堂| WWW国产亚洲精品久久麻豆| 国产精品亚洲AV三区| 色多多A级毛片免费看| 国产人成网在线播放VA免费| 玖玖在线免费视频| 久视频精品免费观看99| 黄瓜视频高清在线看免费下载| 成人毛片18岁女人毛片免费看| 国产精品嫩草影院免费| 免费人成网站7777视频| 日韩亚洲变态另类中文| 亚洲国产综合91精品麻豆| 亚洲日韩乱码久久久久久| 亚洲人xxx日本人18| 久久精品熟女亚洲av麻豆 | 噜噜噜亚洲色成人网站∨| 亚洲国产av一区二区三区丶| 亚洲中文无码亚洲人成影院| 黄页网站在线免费观看| a级毛片免费在线观看| 中国人xxxxx69免费视频| 天天操夜夜操免费视频| 亚洲中久无码不卡永久在线观看| 久久久久久久久亚洲| 国产精品亚洲片在线va| 九九久久国产精品免费热6| 无码一区二区三区免费|