- 浏览: 13387 次
- 性别:
- 来自: 杭州
文章分类
最新评论
通过JAVA与串口(RS232)通信实例
文章分类:Java编程 关键字: java com 串口 rs232
最近了解到的需求是需要需激光打刻机进行(RS232)串口通信,
这里使用的是RXTX开源包实现的。
之前并没有用java做过串口通信,而且这方面资料不是很多。
项目实际应用中可能会采用VB开发(这个我就不会了)
只不过用java尝试一下,记个笔记,希望可以对相关开发用些帮助。
下面是实现代码
测试
这里使用的是RXTX开源包实现的。
之前并没有用java做过串口通信,而且这方面资料不是很多。
项目实际应用中可能会采用VB开发(这个我就不会了)
只不过用java尝试一下,记个笔记,希望可以对相关开发用些帮助。
下面是实现代码
- package test;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.util.Date;
- import java.util.Enumeration;
- import java.util.TooManyListenersException;
- import gnu.io.CommPortIdentifier;
- import gnu.io.PortInUseException;
- import gnu.io.SerialPort;
- import gnu.io.SerialPortEvent;
- import gnu.io.SerialPortEventListener;
- import gnu.io.UnsupportedCommOperationException;
- public class CommUtil implements SerialPortEventListener {
- InputStream inputStream; // 从串口来的输入流
- OutputStream outputStream;// 向串口输出的流
- SerialPort serialPort; // 串口的引用
- CommPortIdentifier portId;
- public CommUtil(Enumeration portList, String name) {
- while (portList.hasMoreElements()) {
- CommPortIdentifier temp = (CommPortIdentifier) portList.nextElement();
- if (temp.getPortType() == CommPortIdentifier.PORT_SERIAL) {// 判断如果端口类型是串口
- if (temp.getName().equals(name)) { // 判断如果端口已经启动就连接
- portId = temp;
- }
- }
- }
- try {
- serialPort = (SerialPort) portId.open("My"+name, 2000);
- } catch (PortInUseException e) {
- }
- try {
- inputStream = serialPort.getInputStream();
- outputStream = serialPort.getOutputStream();
- } catch (IOException e) {
- }
- try {
- serialPort.addEventListener(this); // 给当前串口天加一个监听器
- } catch (TooManyListenersException e) {
- }
- serialPort.notifyOnDataAvailable(true); // 当有数据时通知
- try {
- serialPort.setSerialPortParams(2400, SerialPort.DATABITS_8, // 设置串口读写参数
- SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
- } catch (UnsupportedCommOperationException e) {
- }
- }
- public void serialEvent(SerialPortEvent event) {
- switch (event.getEventType()) {
- case SerialPortEvent.BI:
- case SerialPortEvent.OE:
- case SerialPortEvent.FE:
- case SerialPortEvent.PE:
- case SerialPortEvent.CD:
- case SerialPortEvent.CTS:
- case SerialPortEvent.DSR:
- case SerialPortEvent.RI:
- case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
- break;
- case SerialPortEvent.DATA_AVAILABLE:// 当有可用数据时读取数据,并且给串口返回数据
- byte[] readBuffer = new byte[20];
- try {
- while (inputStream.available() > 0) {
- System.out.println(inputStream.available());
- int numBytes = inputStream.read(readBuffer);
- System.out.println(numBytes);
- }
- System.out.println(new String(readBuffer).trim());
- } catch (IOException e) {
- e.printStackTrace();
- }
- break;
- }
- }
- public void send(String content){
- try {
- outputStream.write(content.getBytes());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public void ClosePort() {
- if (serialPort != null) {
- serialPort.close();
- }
- }
- }
package test; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.util.Date; import java.util.Enumeration; import java.util.TooManyListenersException; import gnu.io.CommPortIdentifier; import gnu.io.PortInUseException; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import gnu.io.UnsupportedCommOperationException; public class CommUtil implements SerialPortEventListener { InputStream inputStream; // 从串口来的输入流 OutputStream outputStream;// 向串口输出的流 SerialPort serialPort; // 串口的引用 CommPortIdentifier portId; public CommUtil(Enumeration portList, String name) { while (portList.hasMoreElements()) { CommPortIdentifier temp = (CommPortIdentifier) portList.nextElement(); if (temp.getPortType() == CommPortIdentifier.PORT_SERIAL) {// 判断如果端口类型是串口 if (temp.getName().equals(name)) { // 判断如果端口已经启动就连接 portId = temp; } } } try { serialPort = (SerialPort) portId.open("My"+name, 2000); } catch (PortInUseException e) { } try { inputStream = serialPort.getInputStream(); outputStream = serialPort.getOutputStream(); } catch (IOException e) { } try { serialPort.addEventListener(this); // 给当前串口天加一个监听器 } catch (TooManyListenersException e) { } serialPort.notifyOnDataAvailable(true); // 当有数据时通知 try { serialPort.setSerialPortParams(2400, SerialPort.DATABITS_8, // 设置串口读写参数 SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) { } } public void serialEvent(SerialPortEvent event) { switch (event.getEventType()) { case SerialPortEvent.BI: case SerialPortEvent.OE: case SerialPortEvent.FE: case SerialPortEvent.PE: case SerialPortEvent.CD: case SerialPortEvent.CTS: case SerialPortEvent.DSR: case SerialPortEvent.RI: case SerialPortEvent.OUTPUT_BUFFER_EMPTY: break; case SerialPortEvent.DATA_AVAILABLE:// 当有可用数据时读取数据,并且给串口返回数据 byte[] readBuffer = new byte[20]; try { while (inputStream.available() > 0) { System.out.println(inputStream.available()); int numBytes = inputStream.read(readBuffer); System.out.println(numBytes); } System.out.println(new String(readBuffer).trim()); } catch (IOException e) { e.printStackTrace(); } break; } } public void send(String content){ try { outputStream.write(content.getBytes()); } catch (IOException e) { e.printStackTrace(); } } public void ClosePort() { if (serialPort != null) { serialPort.close(); } } }
测试
- package test;
- import gnu.io.CommPortIdentifier;
- import java.util.Enumeration;
- public class Test {
- public static void main(String[] args) throws InterruptedException {
- Enumeration portList = CommPortIdentifier.getPortIdentifiers(); //得到当前连接上的端口
- CommUtil comm3 = new CommUtil(portList,"COM3");
- int i = 0;
- while(i<5)
- {
- Thread.sleep(3000);
- comm3.send("hello");
- i++;
- }
- comm3.ClosePort();
- }
- }
package test; import gnu.io.CommPortIdentifier; import java.util.Enumeration; public class Test { public static void main(String[] args) throws InterruptedException { Enumeration portList = CommPortIdentifier.getPortIdentifiers(); //得到当前连接上的端口 CommUtil comm3 = new CommUtil(portList,"COM3"); int i = 0; while(i<5) { Thread.sleep(3000); comm3.send("hello"); i++; } comm3.ClosePort(); } }
相关推荐
commapi基础 RS232基础 Win32&Linux;下串口编程的差异 串口实现全双工通讯的Java类库等共8个文件,全面掌握JAVA串口编程
Java串口编程
java串口编程实例 ConnDB.java
这个是一个java串口编程实例,里面的代码写了怎么连接串口,怎么接收数据等等。后面会有文档附上,一块下载下来看看就懂了,一定可以看懂,很简单。
详细的介绍了串口编程的集中模式,并且有详细的例子。
一个很实用的Java串口编程实例 有解说 附加一个Java手机串口短信发送的代码例子
RXTX java串口编程jar包RXTX java串口编程jar包RXTX java串口编程jar包RXTX java串口编程jar包RXTX java串口编程jar包RXTX java串口编程jar包
从最基础的串口通信介绍如何用java去实现,知道了串口通信的原理之后再用代码实现应该就是最简单的事情了吧
Java串口编程 - 介绍java串口实现方法
mac上的java串口编程包(github上也有)
Java串口编程例子(https://blog.csdn.net/wu_boy/article/details/112062071)
java串口编程基本归纳
java串口编程comm.jar 轻松操作串口
串口编程,java串口编程,Shell源码
java 串口编程使用demo,用起来很方便。 1、参考如下网址使用: http://blog.csdn.net/luoduyu/article/details/2182321
java 串口编程Demo,一看就懂。
java串口编程的实现,简单易懂,软件和硬件之间的接口问题
给大家分项下用RXTX库实现JAVA串口编程
JAVA串口编程.txt不知道大家用了这个效果怎么样!大家互相学习帮助!
描述JAVA串口编程时的配置步骤以及使用的相关jar包