使用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