串口通讯

本文介绍了一种使用comm.jar进行串口通信的方法,包括加载DLL文件、开启和读写串口等关键步骤,并提供了具体的Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近制作串口读取设备数据,跟串口打交道。使用大家都熟悉的comm.jar开发。

下面简单介绍下自己的心得,希望对大家有所帮助

1. *.java加载dll文件,可运行的jar文件,调用时需要受到加载dll文件,方式如下:

/** 加载win32com.dll***************/
  String driverName = "com.sun.comm.Win32Driver";//javax.comm.properties中Driver的值
  CommDriver driver = null;
  try {
   System.loadLibrary("win32com");//dll名称
   driver = (CommDriver) Class.forName(driverName).newInstance();
   driver.initialize();
  } catch (InstantiationException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  } catch (IllegalAccessException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  } catch (ClassNotFoundException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }finally{;}
  /** ************** */

2. comm.jar使用

其中,openComm(int commInterval)所在类需要实现接口:SerialPortEventListener

/**
  * @return 开启串口 false:开启失败、true:开启成功
  */
 public boolean openComm(int commInterval){
  try {
   CommPortIdentifier identifier = CommPortIdentifier.getPortIdentifier(this.com);
   if(identifier == null){
    return isOpen;
   }
   this.commInterval = commInterval;
   serialPort = (SerialPort) identifier.open("serialPort", commInterval);
   serialPort.setSerialPortParams(this.burdate, this.databits, this.stopbits, this.parity);
   serialPort.addEventListener(this);
   serialPort.notifyOnDataAvailable(true);
   serialPort.notifyOnOutputEmpty(true);
   //读串口线程
   //ReadFromCommuThread read = new ReadFromCommuThread(serialPort);
   //read.start();
   isOpen = true;
   log.info("打开串口" + this.com + "成功!");
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   log.error("打开串口" + this.com + "失败!\n" + e.getMessage());
   isOpen = false;
  }finally{;}
  
  return isOpen;
 }
 
 /**
  * @param str
  * @return 向串口发送信息
  */
 public boolean sendToComm(byte[]sender){
  boolean isSended = false;
  if(sender != null){
   try {
    if(!isOpen){//打开串口
     this.openComm(this.commInterval);
    }
    OutputStream os = serialPort.getOutputStream();
    os.write(sender);
    os.flush();
    os.close();
    isSended = true;
   } catch (IOException e) {
    // TODO Auto-generated catch block
    log.error(e.getMessage());
   }finally{;}
  }
  return isSended;
 }
 /**
  * @return 读取串口
  */
 public void readFromComm(){
  if(serialPort != null){
   try {
    iis = serialPort.getInputStream();

    Thread.sleep(this.commInterval);
    
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    log.error("@@读取串口信息出错!!");
   }finally{;}
  }
 }
 /* (non-Javadoc)
  * @see javax.comm.SerialPortEventListener#serialEvent(javax.comm.SerialPortEvent)
  */
 public void serialEvent(SerialPortEvent event) {
  // TODO Auto-generated method stub
  if(event.getEventType() == SerialPortEvent.DATA_AVAILABLE){//数据到达
   try {
    if(iis != null){
     byte[] bts = new byte[1];
     while(iis.available() > 0){
      iis.read(bts);
      messageBak.append(CommuUtil.Bytes2HexString(bts));
     }
    }
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    log.error("@@读取数据出错!!");
   }finally{;} 
  }
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值