通过JAVA与串口(RS232)通信实例

  • 博客分类:
  • J2SE
JavaVBthread 
最近了解到的需求是需要需激光打刻机进行(RS232)串口通信, 
这里使用的是RXTX开源包实现的。 
之前并没有用java做过串口通信,而且这方面资料不是很多。 
项目实际应用中可能会采用VB开发(这个我就不会了)

只不过用java尝试一下,记个笔记,希望可以对相关开发用些帮助。

下面是实现代码

Java代码  
  1. package test;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStream;
  6. import java.util.Date;
  7. import java.util.Enumeration;
  8. import java.util.TooManyListenersException;
  9. import gnu.io.CommPortIdentifier;
  10. import gnu.io.PortInUseException;
  11. import gnu.io.SerialPort;
  12. import gnu.io.SerialPortEvent;
  13. import gnu.io.SerialPortEventListener;
  14. import gnu.io.UnsupportedCommOperationException;
  15. public class CommUtil implements SerialPortEventListener {
  16. InputStream inputStream; // 从串口来的输入流
  17. OutputStream outputStream;// 向串口输出的流
  18. SerialPort serialPort; // 串口的引用
  19. CommPortIdentifier portId;
  20. public CommUtil(Enumeration portList, String name) {
  21. while (portList.hasMoreElements()) {
  22. CommPortIdentifier temp = (CommPortIdentifier) portList.nextElement();
  23. if (temp.getPortType() == CommPortIdentifier.PORT_SERIAL) {// 判断如果端口类型是串口
  24. if (temp.getName().equals(name)) { // 判断如果端口已经启动就连接
  25. portId = temp;
  26. }
  27. }
  28. }
  29. try {
  30. serialPort = (SerialPort) portId.open("My"+name, 2000);
  31. } catch (PortInUseException e) {
  32. }
  33. try {
  34. inputStream = serialPort.getInputStream();
  35. outputStream = serialPort.getOutputStream();
  36. } catch (IOException e) {
  37. }
  38. try {
  39. serialPort.addEventListener(this); // 给当前串口天加一个监听器
  40. } catch (TooManyListenersException e) {
  41. }
  42. serialPort.notifyOnDataAvailable(true); // 当有数据时通知
  43. try {
  44. serialPort.setSerialPortParams(2400, SerialPort.DATABITS_8, // 设置串口读写参数
  45. SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
  46. } catch (UnsupportedCommOperationException e) {
  47. }
  48. }
  49. public void serialEvent(SerialPortEvent event) {
  50. switch (event.getEventType()) {
  51. case SerialPortEvent.BI:
  52. case SerialPortEvent.OE:
  53. case SerialPortEvent.FE:
  54. case SerialPortEvent.PE:
  55. case SerialPortEvent.CD:
  56. case SerialPortEvent.CTS:
  57. case SerialPortEvent.DSR:
  58. case SerialPortEvent.RI:
  59. case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
  60. break;
  61. case SerialPortEvent.DATA_AVAILABLE:// 当有可用数据时读取数据,并且给串口返回数据
  62. byte[] readBuffer = new byte[20];
  63. try {
  64. while (inputStream.available() > 0) {
  65. System.out.println(inputStream.available());
  66. int numBytes = inputStream.read(readBuffer);
  67. System.out.println(numBytes);
  68. }
  69. System.out.println(new String(readBuffer).trim());
  70. } catch (IOException e) {
  71. e.printStackTrace();
  72. }
  73. break;
  74. }
  75. }
  76. public void send(String content){
  77. try {
  78. outputStream.write(content.getBytes());
  79. } catch (IOException e) {
  80. e.printStackTrace();
  81. }
  82. }
  83. public void ClosePort() {
  84. if (serialPort != null) {
  85. serialPort.close();
  86. }
  87. }
  88. }

测试

Java代码  
  1. package test;
  2. import gnu.io.CommPortIdentifier;
  3. import java.util.Enumeration;
  4. public class Test {
  5. public static void main(String[] args) throws InterruptedException {
  6. Enumeration portList = CommPortIdentifier.getPortIdentifiers(); //得到当前连接上的端口
  7. CommUtil comm3 = new CommUtil(portList,"COM3");
  8. int i = 0;
  9. while(i<5)
  10. {
  11. Thread.sleep(3000);
  12. comm3.send("hello");
  13. i++;
  14. }
  15. comm3.ClosePort();
  16. }
  17. }
  • rxtx-2.1-7-bins-r2.zip (596 KB)

通过JAVA与串口(RS232)通信实例相关推荐

  1. java串口发送十六进制数,本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下1.介绍使用Java实现的串口通信程序,支持十六进制数据的发送与接收。 源码:...

    本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下 1.介绍 使用Java实现的串口通信程序,支持十六进制数据的发送与接收. 源码:SerialPortDemo 效果图如下: ...

  2. java 蓝牙读取数据格式,单片机与安卓手机通过蓝牙串口模块利用JSON数据格式通信实例...

    原标题:单片机与安卓手机通过蓝牙串口模块利用JSON数据格式通信实例 JSON 指的是 Java 对象表示法(Java Object Notation),JSON 是轻量级的文本数据交换格式,JSON ...

  3. Android串口通信实例分析【附源码】

    Android 串口通信实例分析,用的时开源的android-serialport-api 这个是用android ndk实现的串口通信,我把他做了一个简化,适合于一般的程序的串口通信移植,欢迎拍砖- ...

  4. 51单片机串口通信模板_深入理解51单片机串口通信及通信实例

    串口通信的原理 串口通信(SerialCommunications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一 ...

  5. 基于java的串口通讯(附带实例+说明文档+测试工具)

    在步入正题前,发个牢骚. 前天总公司的一个技术经理下达一个任务,实现java程序与串口的通信.半天做出来了(见附件),经理看了,在电话里说是直接从网上下载的,颇为不屑. 说实话,当时真TM火大!虽然现 ...

  6. java linux 串口_Linux Java 串口通信 | 学步园

    费了好大的劲搞定Linux系统上用Java写串口通信的问题. jdk中没有原生的串口api,网上找了半天的资料,大概知道了:Linux系统上用Java写串口程序,有两个包比较常用,一个是当年sun官方 ...

  7. Java实现串口通信的小样例

    用Java实现串口通信(windows系统下),须要用到sun提供的串口包 javacomm20-win32.zip.当中要用到三个文件,配置例如以下: 1.comm.jar放置到 JAVA_HOME ...

  8. java socket发送定长报文_一个基于TCP协议的Socket通信实例

    原标题:一个基于TCP协议的Socket通信实例 1. 前言 一般接口对接多以http/https或webservice的方式,socket方式的对接比较少并且会有一些难度.正好前段时间完成了一个so ...

  9. Java 网络实例三(获取URL响应头的日期信息、获取URL响应头信息、解析URL、ServerSocket和Socket通信实例)

    获取 URL响应头的日期信息 以下实例演示了如何使用 HttpURLConnection 的 httpCon.getDate() 方法来获取 URL响应头的日期信息: import java.net. ...

最新文章

  1. iphone:UISplitView
  2. lamp wordpress
  3. matlab电话拨号音的合成与识别代码,实验报告 电话拨号音的合成与识别
  4. 单链表按顺序插入节点
  5. 计算机网络基础必备(三次握手,四次握手,以及HTTP协议相关)
  6. 电线之间:采访Microsoft Edge性能PM Nolan Lawson
  7. java虚拟机工作原理_Java虚拟机工作原理具体解释
  8. Spring Boot 集成 Ehcache 缓存,三步搞定!
  9. JAVA毕设项目vue架构云餐厅美食订餐系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)
  10. 【DJ-ZBS2 DH-70L两档切换漏电继电器】
  11. XML 教程(一文彻底搞懂XML)
  12. Linux内核ncsi驱动源码分析(二)
  13. 罗马数字转化为阿拉伯数字
  14. 阿里 P6 到底应该具备哪些核心能力?
  15. IDEA重置配置设定
  16. GTX1060安装gpu版tensorflow经验分享
  17. Python-随机生成20位数字
  18. 赛门铁克Symantec SSL证书产品及服务
  19. poi画饼图、折线图等图表和设置颜色字体等
  20. [单片机框架] [kv_sys] 实现一个简易KV键值系统(升级版)

热门文章

  1. win10小课堂:如何解除宽带限速?
  2. cannot start service 由于登录失败而无法启动服务
  3. RISC-V 与 ARM的区别和比较
  4. Excel批量给字符加上双引号
  5. zxing 修改聚焦时间,取景框大小设置
  6. 修理堵头的3d打印机
  7. DeepFakes深度造假,AI换脸的技术原理是什么?
  8. C语言学习笔记2【C primer plus】
  9. 免费在线markdown转pdf
  10. [实验三]LZW 编解码算法实现与分析