最近在研究一个东西要用到串口的读写通过读取串口COM获取一个指令然后根据该指令通过配置文件获取其他的信息再通过串口COM进行做下一步的一系列操作
java读写串口要用到的是javax扩展类库javacomm它是一系列的标准该类库在sun的官网上只提供linux版本由于我所应用的平台是win所以找了个win的实现在此过程中遇到了一系列的问题后来终于解决问题并完成了通过读写串口进行通信的功能在此对其java读写串口的情况做个简要说明
首先下载javacomm包然后将其解压解压后需要做的就是配置串口通信相关东西下面是自己使用的时候的配置
把mproperties文件拷贝到Java运行时环境的lib目录中即
C:\Program Files\Java\jdk_\lib\mproperties
C:\Program Files\Java\jdk_\jre\lib\mproperties
把wincomdll拷贝到C:\windows\system\ 和 C:\Program Files\Java\jdk_\jre\bin\下
把commjar放到Java运行时环境的lib目录中即C:\Program Files\Java\jdk_\lib\commjar
在环境变量的CLASSPATH中添加commjar如%JAVA_HOME%\lib\commjar;
然后通过COM的API来实现串口的读写其实API相当简单如下代码
Java代码
CommPortIdentifier serialPortId = CommPortIdentifiergetPortIdentifier(COM);
SerialPort port = (SerialPort) serialPortIdopen(Read );//打开COM串口其中参数是用来设置打开串口的超时时间
portsetSerialPortParams( );//设置COM的波特率数据位停止位校验方式等
//从串口中得到输入输出流了
OutputStream out = portgetOutputStream();
out write(buffer);
out flush();
InputStream in = portgetInputStream();
inread(data);//data是一个byte[]
CommPortIdentifier serialPortId = CommPortIdentifiergetPortIdentifier(COM); SerialPort port = (SerialPort) serialPortIdopen(Read );//打开COM串口其中参数是用来设置打开串口的超时时间 portsetSerialPortParams( );//设置COM的波特率数据位停止位校验方式等 //从串口中得到输入输出流了 OutputStream out = portgetOutputStream(); out write(buffer); out flush(); InputStream in = portgetInputStream(); inread(data);//data是一个byte[]
如果COM通信要求的波特率是而系统默认的波特率是在系统的设备管理器中修改了COM的波特率为那么这个时候修改后程序不报错误但是在串口里获取不到任何信息也就是在设备管理器修改COM的波特率是没有用的必须通过portsetSerialPortParams( )来设置其波特率