javaeye_hua 发表于 2013-1-28 19:20:35

串口通讯

最近制作串口读取设备数据,跟串口打交道。使用大家都熟悉的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 stubif(event.getEventType() == SerialPortEvent.DATA_AVAILABLE){//数据到达   try {    if(iis != null){   byte[] bts = new byte;   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{;}   } } 
页: [1]
查看完整版本: 串口通讯