串口通訊

来源:http://www.cnblogs.com/Mr-kevin/archive/2016/08/16/5776353.html
-Advertisement-
Play Games

一. 準備工作 1. 點擊此下載java串口通訊相關工具 2. 將RXTXcomm.jar放到 %JAVA_HOME%\jre\lib\ext\ 目錄下,工程中引入該jar包 3. 將rxtxSerial.dll放到 %JAVA_HOME%\jre\bin\ 目錄下 二. 串口相關類 1. 串口類: ...


一. 準備工作

  1. 點擊此下載java串口通訊相關工具

  2. 將RXTXcomm.jar放到  %JAVA_HOME%\jre\lib\ext\  目錄下,工程中引入該jar包

  3. 將rxtxSerial.dll放到  %JAVA_HOME%\jre\bin\  目錄下

 

二. 串口相關類

  1. 串口類:CommPort.class

 1 public class CommPort {
 2     /**
 3      * 串口名稱,如:COM1、COM2
 4      */
 5     private String commPortName="";           
 6     
 7     /**
 8      * 串口所有者名稱,一般為應用程式的名稱
 9      */
10     private String ownerName;                 
11     
12     /**
13      * 波特率
14      */
15     private String baudRate="";               
16     
17     /**
18      * 數據位
19      */
20     private String dataBit="";                
21     
22     /**
23      * 校驗位
24      */
25     private String partityBit="";             
26     
27     /**
28      * 停止位
29      */
30     private String stopBit="";                
31     
32     public String getCommPortName() {
33         return commPortName;
34     }
35 
36     public void setCommPortName(String commPortName) {
37         this.commPortName = commPortName;
38     }
39 
40     public String getOwnerName() {
41         return ownerName;
42     }
43 
44     public void setOwnerName(String ownerName) {
45         this.ownerName = ownerName;
46     }
47 
48     public String getBaudRate() {
49         return baudRate;
50     }
51 
52     public void setBaudRate(String baudRate) {
53         this.baudRate = baudRate;
54     }
55 
56     public String getDataBit() {
57         return dataBit;
58     }
59 
60     public void setDataBit(String dataBit) {
61         this.dataBit = dataBit;
62     }
63 
64     public String getPartityBit() {
65         return partityBit;
66     }
67 
68     public void setPartityBit(String partityBit) {
69         this.partityBit = partityBit;
70     }
71 
72     public String getStopBit() {
73         return stopBit;
74     }
75 
76     public void setStopBit(String stopBit) {
77         this.stopBit = stopBit;
78     }
79     
80 }
View Code


  2. 串口管理員類:CommPortManager.class

  1 import gnu.io.CommPortIdentifier;
  2 import gnu.io.SerialPort;
  3 
  4 import java.io.BufferedReader;
  5 import java.io.BufferedWriter;
  6 import java.io.DataInputStream;
  7 import java.io.DataOutputStream;
  8 import java.io.InputStream;
  9 import java.io.InputStreamReader;
 10 import java.io.OutputStream;
 11 import java.io.OutputStreamWriter;
 12 import java.util.Enumeration;
 13 
 14 import com.erp.common.ConfigHolder;
 15 
 16 public class CommPortManager {
 17     /**
 18      * 串口定義
 19      */
 20     private CommPort commPort;         
 21     
 22     /**
 23      * 串口對象
 24      */
 25     private SerialPort serialPort;     
 26     
 27     /**
 28      * 位元組輸入
 29      */
 30     private InputStream in;               
 31     
 32     /**
 33      * 位元組輸出
 34      */
 35     private OutputStream out;          
 36     
 37     /**
 38      * 字元輸入
 39      */
 40     private BufferedReader bufReader;  
 41     
 42     /**
 43      * 字元輸出
 44      */
 45     private BufferedWriter bufWriter;  
 46     
 47     /**
 48      * 數據輸入
 49      */
 50     private DataInputStream dataIn;    
 51     
 52     /**
 53      * 數據輸出
 54      */
 55     private DataOutputStream dataOut;  
 56     
 57     /**
 58      * 串口是否在使用
 59      */
 60     private boolean isUse;             
 61     
 62     public CommPortManager(CommPort commPort){
 63         this.commPort = commPort;
 64     }
 65     
 66     /**
 67      * 打開串口
 68      * @throws Exception
 69      */
 70     public void open() throws Exception{
 71         CommPortIdentifier commPortId = CommPortIdentifier.getPortIdentifier(commPort.getCommPortName());
 72         
 73         // 第一個參數:通常設置為你的應用程式的名字;第二個參數:開啟埠超時的毫秒數
 74         serialPort = (SerialPort)commPortId.open(commPort.getOwnerName(), 5000);
 75         serialPort.setOutputBufferSize(Integer.valueOf(ConfigHolder.getValue("comm.buffersize")));
 76         
 77         in = serialPort.getInputStream();
 78         out = serialPort.getOutputStream();        
 79         
 80         bufReader = new BufferedReader(new InputStreamReader(in, "Unicode"));
 81         bufWriter = new BufferedWriter(new OutputStreamWriter(out));
 82         
 83         dataIn = new DataInputStream(in);
 84         dataOut = new DataOutputStream(out);
 85         
 86         // 設置串口參數
 87         serialPort.setSerialPortParams(Integer.valueOf(commPort.getBaudRate()), Integer.valueOf(commPort.getDataBit()), 
 88                 Integer.valueOf(commPort.getStopBit()), Integer.valueOf(commPort.getPartityBit()));
 89     }
 90     
 91     /**
 92      * 判斷串口是否可用
 93      */
 94     public boolean commPortEnable(){    
 95         boolean result = false;
 96         Enumeration en = CommPortIdentifier.getPortIdentifiers();
 97         while (en.hasMoreElements()) {             
 98             CommPortIdentifier portId = (CommPortIdentifier) en.nextElement();
 99             if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL
100                     && portId.getName().equalsIgnoreCase(commPort.getCommPortName())) {
101                 result = true;
102             }
103         }
104         return result;
105     }
106 
107     /**
108      * 設置串口接收超時時間
109      * @param timeout 超時時間,單位秒
110      * @throws Exception
111      */
112     public void setReceiveTimeout(int timeout) throws Exception{
113         getSerialPort().enableReceiveTimeout(timeout*1000);
114     }
115     
116     public CommPort getCommPort() {
117         return commPort;
118     }
119 
120     public SerialPort getSerialPort() {
121         return serialPort;
122     }
123 
124     public InputStream getIn() {
125         return in;
126     }
127 
128     public OutputStream getOut() {
129         return out;
130     }
131 
132     public BufferedReader getBufReader() {
133         return bufReader;
134     }
135 
136     public BufferedWriter getBufWriter() {
137         return bufWriter;
138     }
139 
140     public DataInputStream getDataIn() {
141         return dataIn;
142     }
143 
144     public DataOutputStream getDataOut() {
145         return dataOut;
146     }
147 
148     public boolean isUse() {
149         return isUse;
150     }
151 
152     public void setUse(boolean isUse) {
153         this.isUse = isUse;
154     }
155 }
View Code

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 之前是打算寫一篇文章叫:Taurus.MVC 從入門到精通,一篇完事篇!後來轉指一念,還是把教程集在這個企業站項目上吧,之前發過一個幫師妹寫的企業站:“最近花了幾個夜晚幫師妹整了一個企業網站”技術風格是:文本資料庫(txt)+WebForm 這次轉型風格:文本資料庫(txt)+Taurus.MVC ...
  • 今天做了一個讀取PE文件導出表的小程式,用來學習。 參考了《Windows PE權威指南》一書。 首先, PE文件的全稱是Portable Executable,可移植的可執行的文件,常見的EXE、DLL、OCX、SYS、COM都是PE文件。 我們知道,一個Windows程式,它所實現的所有功能最終 ...
  • 本篇文章講解了電腦的原碼, 反碼和補碼. 並且進行了深入探求了為何要使用反碼和補碼, 以及更進一步的論證了為何可以用反碼, 補碼的加法計算原碼的減法. 論證部分如有不對的地方請各位牛人幫忙指正! 希望本文對大家學習電腦基礎有所幫助! ...
  • 本文主要參考了C Primer Plus (5th & 6th Edition) 您可以選擇本文的部分內容來讀,有些內容對於不熟悉MS-DOS的讀者可能過於晦澀難懂。 C語言文件基本知識 文件通常是在磁碟或固態硬碟上的一段已命名的存儲區。所有的文件內容都以二進位形式儲存。文件分為文本文件和二進位文件 ...
  • 後臺列印出的錯: 2016-08-16 13:42:52.652 WARN org.apache.struts2.json.JSONWriter - JavaScript doesn't support non-String keys, using toString() on java.lang.L ...
  • 問題描述:同事從svn上導入的一個項目,jdk都設置好了以後,java、xml、html等文件都能打開,唯獨jsp文件打不開,並且顯示Failed to create the part's controls,但有小部分jsp是可以打開的。 解決過程:我在網上搜索了Failed to create t ...
  • HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服務端組件、客戶端組件和 Agent 組件,廣泛適用於各種不同應用場景的 TCP/UDP 通信系統,提供 C/C++、C#、Delphi、E(易語言)、Java、Python 等編程語言介面。HP-Socket 對通信層實現完全封... ...
  • DevExpress VCL v16.1.3發佈,本次更新有兩個API(PDFViewer 和 RichEdit Control)有重大變化,請註意更新代碼 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...