六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 44|回复: 0

串口通讯

[复制链接]

升级  10%

15

主题

15

主题

15

主题

秀才

Rank: 2

积分
65
 楼主| 发表于 2013-1-15 02:50:58 | 显示全部楼层 |阅读模式
最近制作串口读取设备数据,跟串口打交道。使用大家都熟悉的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{;}   } } 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表