使用com0com0模擬串口通信,以及java的串口讀寫操作


首先放一下我這次使用的工具

鏈接: https://pan.baidu.com/s/1o78lHX4 密碼: vg7w

com0com0是windows內核模式下的虛擬串口驅動程序。可以創建虛擬串口對來連接兩個COM端口

在這里簡單的介紹一下com0com0的使用方法

首先,下載com0com-3.0.0.0-i386-and-x64-unsigned,解壓縮並安裝

接下來我們就可以使用setup command prompt來進行模擬串口對了

在這里首先介紹兩個命令

install  PortName=串口名1 PortName=串口名2

新建兩個虛擬串口,並連接為串口對

list

列出目前所有的虛擬串口

 

如果跳出更新驅動的提示可以暫時無視,不影響后續的操作。

另一個工具setup具有圖形化界面,可以查看目前的串口對

接下來介紹java編程的時候需要用到的兩個jar包

 RXTXcomm.jar

serialPortIO.jar

同時,在使用這兩個jar包進行java編程之前,我們要將mfz-rxtx-2.2-20081207-win-x64壓縮包下的兩個dll文件放到C:\Windows\System32下

然后,這里是一個簡單的串口讀寫的例子

 

import gnu.io.SerialPort;
import serialPort.SerialTool;


public class Read {

    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub
        //以波特率115200打開串口COM12
        SerialPort serialPort = SerialTool.openPort("COM12", 115200);
        SerialTool.addListener(serialPort, new SerialListener(serialPort));
    }

}

 

  

  

import java.util.Scanner;

import gnu.io.SerialPort;
import serialPort.SerialTool;


public class Write {

    public static void main(String[] args) throws Exception {

        Scanner scan = new Scanner(System.in);
        String temp;
        //以波特率115200打開串口COM11
        SerialPort serialPort = SerialTool.openPort("COM11", 115200);
        while(scan.hasNext())
        {
            temp=scan.nextLine();
            SerialTool.sendToPort(serialPort, temp.getBytes());
        }

    }

}
import javax.swing.JOptionPane;

import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import serialPort.SerialTool;


public class SerialListener implements SerialPortEventListener {
    public SerialPort serialPort;
    public SerialListener(SerialPort serialPort)
    {
        this.serialPort=serialPort;
    }
    
    public void serialEvent(SerialPortEvent serialPortEvent) {
        
        switch (serialPortEvent.getEventType()) {

            case SerialPortEvent.BI: // 10 通訊中斷
                System.out.println("與串口設備通訊中斷");
                break;

            case SerialPortEvent.OE: // 7 溢位(溢出)錯誤

            case SerialPortEvent.FE: // 9 幀錯誤

            case SerialPortEvent.PE: // 8 奇偶校驗錯誤

            case SerialPortEvent.CD: // 6 載波檢測

            case SerialPortEvent.CTS: // 3 清除待發送數據

            case SerialPortEvent.DSR: // 4 待發送數據准備好了

            case SerialPortEvent.RI: // 5 振鈴指示

            case SerialPortEvent.OUTPUT_BUFFER_EMPTY: // 2 輸出緩沖區已清空
                break;
            
            case SerialPortEvent.DATA_AVAILABLE: // 1 串口存在可用數據
                
                //System.out.println("found data");
                byte[] data = null;
                
                try {
                    if (serialPort == null) {
                        System.out.println("串口對象為空!監聽失敗");
                    }
                    else {
                        data = SerialTool.readFromPort(serialPort);    //讀取數據,存入字節數組
                        //System.out.println(new String(data));
                        JOptionPane.showInputDialog(new String(data));
                        //String dataOriginal = new String(data);    //將字節數組數據轉換位為保存了原始數據的字符串
                    }                        
                    
                } catch (Exception e) {
                    System.exit(0);
                }    
                
                break;

        }

    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM