`
FengShen_Xia
  • 浏览: 272997 次
  • 性别: Icon_minigender_1
  • 来自: 东方水城
社区版块
存档分类
最新评论

Java串口通信总结

    博客分类:
  • Java
阅读更多

         最近在研究一个东西要用到串口的读写,通过读取串口COM2获取一个指令,然后根据该指令通过配置文件获取其他的信息再通过串口COM1进行做下一步的一系列操作。

 

         java读写串口要用到的是javax扩展类库javacomm,它是一系列的标准,该类库在sun的官网上只提供linux版本。由于我所应用的平台是win32,所以找了个win32的实现。在此过程中遇到了一系列的问题,后来终于解决问题并完成了通过读写串口进行通信的功能。在此对其java读写串口的情况做个简要说明:

 

         首先下载javacomm包,然后将其解压,解压后需要做的就是配置串口通信相关东西,下面是自己使用的时候的配置:

         

         1.把javax.comm.properties文件拷贝到Java运行时环境的lib目录中,即:
                C:\Program Files\Java\jdk1.5.0_12\lib\javax.comm.properties
                C:\Program Files\Java\jdk1.5.0_12\jre\lib\javax.comm.properties

         2.把win32com.dll拷贝到C:\windows\system32\ 和 C:\Program Files\Java\jdk1.5.0_12\jre\bin\下

         3.把comm.jar放到Java运行时环境的lib目录中,即C:\Program Files\Java\jdk1.5.0_12\lib\comm.jar

         4.在"环境变量"的CLASSPATH中添加comm.jar,如:%JAVA_HOME%\lib\comm.jar;

 

         然后通过COM的API来实现串口的读写,其实API相当简单,如下代码:

        

CommPortIdentifier serialPortId = CommPortIdentifier.getPortIdentifier(“COM2”);
SerialPort  port = (SerialPort) serialPortId.open(“Read”, 30);//打开COM2串口,其中30参数是用来设置打开串口的超时时间。
port.setSerialPortParams(1200, 8, 1, 0);//设置COM2的波特率,数据位,停止位,校验方式等

//从串口中得到输入输出流了
OutputStream out = port.getOutputStream();
out .write(buffer);
out .flush();

InputStream in = port.getInputStream();
in.read(data);//data是一个byte[]

        

         如果COM1通信要求的波特率是1200,而系统默认的波特率是9600,在系统的设备管理器中修改了COM1的波特率为1200,那么这个时候修改后程序不报错误,但是在串口里获取不到任何信息,也就是在设备管理器修改COM1的波特率是没有用的,必须通过port.setSerialPortParams(1200, 8, 1, 0)来设置其波特率(之前这个问题一直困扰着我,以为在设备管理器修改COM1的波特率就可以了)。

 

 

 

 

分享到:
评论
2 楼 影非弦 2013-07-09  
这个in.read(data);//data是一个byte[] 
得到data后怎么处理,怎么转换成易识别的字符串
1 楼 影非弦 2013-07-09  
这个不详细啊,我弄了一天了,都没弄出来,总是出错,读信息的时候不需要添加监听器吗?

相关推荐

Global site tag (gtag.js) - Google Analytics