在java的web程序中怎么使用串口通讯 java串口通信
在java的web程序中怎么使用串口通讯
最近在做java串口通讯,主要是用个人电脑通过串口从RS485读取数据,并通过crc循环冗余校验,把接收正确的数据解析,插入数据库mysql,并用SSH技术把数据库数据以表格以及图表形式显示
思路:
1.为了从RS485读取数据,由于暂时没有硬件设备,系统是win7,故采用Virtual Serial Port Drive(VSPD)这块虚拟串口软件代替。并下载sscom32.exe模拟串口通信软件。
2. 要想实现串口通信,用Java实现串口通信(windows系统下),需要用到sun提供的串javacomm20-win32.zip。其中要用到三个文件,配置如下:
comm.jar放置到 JAVA_HOME/jre/lib/ext
win32com.dll放置到 JAVA_HOME/bin
javax.comm.properties 两个地方都要放
jre/lib(也就是在JAVA文件夹下的jre),JAVA_HOME/jre/lib下
这个配置在我电脑上测试成功,也许不需要这样麻烦。注意的是,如果你使用myeclipse,因为它自带jre,你需要在它所在的jre相应位置放dll以及properties文件。
是不是感觉这个很麻烦,还有windows的限制。后来我们下载rxtx这款开源包代替了刚才的comm。不仅windows下可以,linux下也可以。使用方法很简单,配置如下:
RXTXcomm.jar放到JAVA_HOME/jre/lib/ext
rxtxSerial.dll放到JAVA_HOME/bin
如果你使用myeclipse工具,你需要把rxtxSerial.dll放到它自带的jre里。
3.新建eclipse工程,添加comm.jar或者RXTXcomm.jar包。因为javacomm20-win32.zip包里有样例SimpleRead.java,可以通过这个例子测试串口是否正确
4.接收数据正确后,根据传送接收双方的协议,采用CRC循环校验,根据传输的一方的校验函数判定是否是正确传输
5.把正确结束的数据解析,查看自己指定的通讯规则,然后解析
6.插入数据库,jdbc插入
7.数据统计,定时统计每小时,每天,每月,每年的平均值,采用quartz服务来实现。
8.建立web工程,采用hibernate3,spring3,dwr技术把数据库数据动态显示,图表采用jfreechart,以及AJAX的运用
java串口通信
java.comm可以在XP下使用,我用JAVA写过串口程序
下载了comm.jar开发包后,与之一起的还有两个重要的文件,win32com.dll和javax.comm.properties。
1 comm.jar提供了通讯用的java API。
2 win32com.dll提供了供comm.jar调用的本地驱动接口。
3 javax.comm.properties是这个驱动的类配置文件。
首先 将comm.jar复制到
接着 将win21com.dll复制到你的RS232应用程序运行的目录,即user.dir。
最后 将javax.comm.properties复制到
我在Eclipse3.2 JDK1.6开发的时候,在项目中包含comm.jar和win32com.dll
java实现串口通信代码
public static void process() { try { Enumeration portList = CommPortIdentifier.getPortIdentifiers() while (portList.hasMoreElements()) { CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement() if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)//如果端口类型是串口则判断名称 { if(portId.getName().equals("COM1")){//如果是COM1端口则退出循环 break }else{ portId=null } } } SerialPort serialPort = (SerialPort)portId.open("Serial_Communication", 1000)//打开串口的超时时间为1000ms serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE)//设置串口速率为9600,数据位8位,停止位1们,奇偶校验无 InputStream in = serialPort.getInputStream()//得到输入流 OutputStream out = serialPort.getOutputStream()//得到输出流 //进行输入输出操作 //操作结束后 in.close() out.close() serialPort.close()//关闭串口 } catch (PortInUseException e) { e.printStackTrace() } catch (UnsupportedCommOperationException e) { e.printStackTrace() } catch (IOException e) { e.printStackTrace() } }
java串口,读取和发送数据
public static void process() {
 try {
  Enumeration portList = CommPortIdentifier.getPortIdentifiers()
  while (portList.hasMoreElements())
  {
   CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement()
      if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)//如果端口类型是串口则判断名称
      {
          if(portId.getName().equals("COM1")){//如果是COM1端口则退出循环
           break
          }else{
           portId=null
          }
      }
  }
  SerialPort serialPort = (SerialPort)portId.open("Serial_Communication", 1000)//打开串口的超时时间为1000ms
  serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE)//设置串口速率为9600,数据位8位,停止位1们,奇偶校验无
  InputStream in = serialPort.getInputStream()//得到输入流
  OutputStream out = serialPort.getOutputStream()//得到输出流
  //进行输入输出操作
//操作结束后
  in.close()
  out.close()
  serialPort.close()//关闭串口
 } catch (PortInUseException e) {
  e.printStackTrace()
 } catch (UnsupportedCommOperationException e) {
  e.printStackTrace()
 } catch (IOException e) {
  e.printStackTrace()
 }
}