串口通讯
来源:互联网 发布:淘宝禁止发布违背 编辑:程序博客网 时间:2024/04/30 15:25
最近制作串口读取设备数据,跟串口打交道。使用大家都熟悉的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{;} } }