Java串口通信总结

来源:互联网 发布:澳新网络 编辑:程序博客网 时间:2024/05/05 11:14

http://blog.csdn.net/zfinch/article/details/5863004


最近在研究一个东西要用到串口的读写,通过读取串口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相当简单,如下代码:

Java代码

    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)来设置其波特率。


原创粉丝点击