1.window7 64位操作系统的话 要使用java 64位的串口通信包:http://download.csdn.net/detail/likekobe2012/9149871

将里面的三个文件分别放到这里 <JAVA_HOME>代表你的jdk安装目录,比如我的是C:\Program Files (x86)\Java\jdk1.6.0_31

Copy RXTXcomm.jar —> <JAVA_HOME>/jre/lib/ext
Copy rxtxSerial.dll —> <JAVA_HOME>/jre/lib/i386/
Copy rxtxParallel.dll —> <JAVA_HOME>/jre/lib/i386/

2.再把rxtxSerial.dll、rxtxParallel.dll复制到C:\Windows\System32文件夹下

3.开启MyEclipse新建项目,BuildPath导入RXTXcomm.jar

4.利用虚拟串口工具建立一个虚拟串口对,http://download.csdn.net/detail/likekobe2012/9149879,这里将COM2、COM5建立串口对

5.利用串口调试工具,开启两个,进行测试,com2、com5是可以通信的,http://download.csdn.net/detail/likekobe2012/9149929

6.代码

package com;

import gnu.io.CommPortIdentifier;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.TooManyListenersException;

/**
*

  • 串口工具的调试

  • <功能详细描述>

  • @author like

  • @version [版本号, 2015-9-30]

  • @see [相关类/方法]

  • @since [产品/模块版本]
    */
    public class CommTest implements Runnable, SerialPortEventListener
    {
    private String m_sAppName = “串口测试工具Like”;

    /**

    • 端口的等待时间
      */
      private int m_iWaitTime = 2000;

    /**

    • 线程时间
      */
      private int m_iThreadTime = 0;

    private CommPortIdentifier m_commPort;

    private SerialPort m_serialPort;

    private InputStream m_inputStream;

    private OutputStream m_outputStream;

    /**

    • 列出所有端口

    • <功能详细描述>

    • @see [类、类#方法、类#成员]
      */
      @SuppressWarnings(“rawtypes”)
      public void listPort()
      {
      CommPortIdentifier commPortIdentifier;
      Enumeration enumeration = CommPortIdentifier.getPortIdentifiers();
      System.out.println(“现在列出所有PC端口:” + enumeration);

      while (enumeration.hasMoreElements())
      {
      commPortIdentifier = (CommPortIdentifier)enumeration.nextElement();
      if (commPortIdentifier.getPortType() == CommPortIdentifier.PORT_SERIAL)
      {
      System.out.println(commPortIdentifier.getName() + “,” + commPortIdentifier.getCurrentOwner());
      }
      }
      }

    /**

    • 根据端口名选中端口

    • <功能详细描述>

    • @param sPortName

    • @see [类、类#方法、类#成员]
      */
      @SuppressWarnings(“rawtypes”)
      public void selectPort(String sPortName)
      {
      m_commPort = null;
      CommPortIdentifier commPortIdentifier;
      Enumeration enumeration = CommPortIdentifier.getPortIdentifiers();

      while (enumeration.hasMoreElements())
      {
      commPortIdentifier = (CommPortIdentifier)enumeration.nextElement();

       if (commPortIdentifier.getPortType() == CommPortIdentifier.PORT_SERIAL&& commPortIdentifier.getName().equals(sPortName)){m_commPort = commPortIdentifier;openPort();break;}
      

      }
      }

    /**

    • 打开端口

    • <功能详细描述>

    • @see [类、类#方法、类#成员]
      */
      public void openPort()
      {
      if (m_commPort == null)
      {
      log(String.format(“无法找到名字为’%1$s’的串口”, m_commPort.getName()));

      }
      else
      {
      log(“端口选择成功,当前端口:” + m_commPort.getName() + “,现在实例化 serialPort:”);

       try{m_serialPort = (SerialPort)m_commPort.open(m_sAppName, m_iWaitTime);log("实例化 serialPort成功!");}catch (PortInUseException e){throw new RuntimeException(String.format("端口'%1$s'正在使用中!", m_commPort.getName()));}
      

      }
      }

    /**

    • 检查端口是否正确连接

    • <功能详细描述>

    • @see [类、类#方法、类#成员]
      */
      public void checkPort()
      {
      if (m_commPort == null)
      {
      throw new RuntimeException(“没有选择端口,请使用 selectPort(string sPortName)方法选择端口”);
      }
      if (m_serialPort == null)
      {
      throw new RuntimeException(“serialPort对象为null”);

      }
      }

    /**

    • 向端口发送数据

    • <功能详细描述>

    • @param sMessage

    • @see [类、类#方法、类#成员]
      */
      public void write(String sMessage)
      {
      checkPort();
      try
      {
      m_outputStream = new BufferedOutputStream(m_serialPort.getOutputStream());
      }
      catch (IOException e)
      {
      throw new RuntimeException(“获取端口的OutputStream出错” + e.getMessage());
      }

      try
      {
      m_outputStream.write(sMessage.getBytes());
      log(“向端口发送信息成功:” + sMessage);
      }
      catch (IOException e)
      {
      throw new RuntimeException(“向端口发送信息时出错:” + e.getMessage());
      }
      finally
      {
      try
      {
      m_outputStream.close();
      }
      catch (Exception e)
      {

       }
      

      }
      }

    /**

    • 开始监听从端口中接收的数据

    • <功能详细描述>

    • @param iTime

    • @see [类、类#方法、类#成员]
      */
      public void startRead(int iTime)
      {
      checkPort();
      try
      {
      m_inputStream = new BufferedInputStream(m_serialPort.getInputStream());
      }
      catch (IOException e)
      {
      throw new RuntimeException(“获取端口的InputStream出错:” + e.getMessage());
      }

      try
      {
      m_serialPort.addEventListener(this);
      }
      catch (TooManyListenersException e)
      {
      throw new RuntimeException(e.getMessage());
      }

      m_serialPort.notifyOnDataAvailable(true);

      log(String.format(“开始监听来自’%1KaTeX parse error: Expected '}', got 'EOF' at end of input: …ormat("监听程序将在%1d秒后关闭”, m_iThreadTime));
      }
      }

    public void close()
    {
    m_serialPort.close();
    m_serialPort = null;
    m_commPort = null;
    }

    /**

    • 记录日志
    • <功能详细描述>
    • @param sMessage 日志信息
    • @see [类、类#方法、类#成员]
      */
      public void log(String sMessage)
      {
      System.out.println(m_sAppName + “–>” + sMessage);
      }

    @Override
    public void run()
    {
    try
    {
    Thread.sleep(m_iThreadTime);
    m_serialPort.close();
    log(String.format(“端口’%1$s’监听关闭了!”, m_commPort.getName()));
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }
    }

    @Override
    public void serialEvent(SerialPortEvent arg0)
    {
    switch (arg0.getEventType())
    {
    case SerialPortEvent.BI?Break interrupt,通讯中断/
    case SerialPortEvent.OE:/Overrun error,溢位错误/
    case SerialPortEvent.FE:/Framing error,传帧错误/
    case SerialPortEvent.PE?Parity error,校验错误/
    case SerialPortEvent.CD?Carrier detect,载波检测/
    case SerialPortEvent.CTS:/Clear to send,清除发送/
    case SerialPortEvent.DSR:/Data set ready,数据设备就绪/
    case SerialPortEvent.RI:/Ring indicator,响铃指示/
    case SerialPortEvent.OUTPUT_BUFFER_EMPTY:/Output buffer is empty,输出缓冲区清空/
    break;
    case SerialPortEvent.DATA_AVAILABLE:/Data available at the serial port,端口有可用数据。读到缓冲数组,输出到终端/
    byte[] readBuffer = new byte[1024];
    String readStr = “”;
    String s2 = “”;

             try{while (m_inputStream.available() > 0){m_inputStream.read(readBuffer);readStr += new String(readBuffer).trim();}s2 = new String(readBuffer).trim();log("接收到端口返回数据(长度为" + readStr.length() + "):" + readStr);log(s2);}catch (IOException e){}}
    

    }

}

7.由于com2、com5是连接的,我们测试的时候,向com2写数据,串口调试助手com5里面是可以接收到数据的

package com;

public class CommUseTest
{
public static void main(String[] args)
throws InstantiationException, IllegalAccessException
{
CommTest com = new CommTest();

    com.listPort();com.selectPort("COM2");com.write("Too young Too simple,sometimes naive!!!");com.startRead(10);
}

}

8.利用java程序接收从串口调试助手发来的信息,串口调试助手利用com5发送数据

package com;

public class CommUseTest
{
public static void main(String[] args)
throws InstantiationException, IllegalAccessException
{
CommTest com = new CommTest();

    com.listPort();com.selectPort("COM2");//com.write("Too young Too simple,sometimes naive!!!");com.startRead(100);
}

}


作者:奚学长又装死
来源:CSDN
原文:https://blog.csdn.net/likekobe2012/article/details/48828619
版权声明:转载 奚学长又装死 的博客

modbus串口调试相关推荐

  1. Modbus RS485 设备的串口调试

    Modbus RS485 设备的串口调试 准备 Modbus功能码 二.使用步骤 1.接线 2.串口调试 温湿度的计算 准备 硬件设备: 电脑 RS485 温湿度传感器 RS485 土壤温湿度传感器 ...

  2. C#串口上位机软件--IOT串口调试精灵

    最近用业余时间用C#写了一款适合自己目前岗位工作用的串口软件,"串口调试"板块的功能99.99%基本完成,后续会持续更新预留的功能或新增功能.欢迎下载使用本串口软件,"网 ...

  3. 变频器怎么设置_如何利用串口调试软件与变频器通信?

     西门子博途的全套视频教程下载!  西门子S7-1500内部培训PPT下载! 每一个做工控的都必须要会利用串口调试软件来和我们的外围设备来做通讯测试.今天我们就来学习怎么用串口调试软件控制台达的这款变 ...

  4. ubuntu 串口调试工具推荐_串口调试能有多便捷?——FUR组件的应用

    就是最近忙着做项目,忽然发现有3个项目都需要用到串口调试,这让我感觉到有一个方便快捷的调试工具是非常重要的.虽然类似的功能有很多现成的.功能强大的开源协议,比如MODBUS.但是我看过之后,总觉得不够 ...

  5. 怎么做串口调试软件?

    嗯 ~~~ 说一下我自己写的串口助手吧, 名字叫 Bittly, 样子呢长下面这个样子 Bittly 指令调试界面 1. 需求确认 一开始使用的是类似于XCOM或者SSCOM之类的串口调试助手,他们的 ...

  6. FX3U系列PLC的Modbus串口通信简单吗?

    你能不能搞定PLC和其它设备之间的串口通信?会不会网上查了一大堆的资料还是模模糊糊的不太理解?为什么别人能搞懂RS485通讯你就是不会?如果不懂最起码的485通讯,哪个老板敢把项目交给你来做呢? 实际 ...

  7. QT Modbus RTU调试助手(包含算法实现CRC MODBUS16校验)

    QT Modbus RTU调试助手 在类构造函数中将UI初始化和串口对象定义以及查找串口 串口设置 串口接受 QT延时函数 CRC校验 发送串口数据函数 总结 在类构造函数中将UI初始化和串口对象定义 ...

  8. 串口调试助手c语言程序,串口调试助手C语言源程序

    串口调试助手C语言源程序 串口调试助手源程序 及编程详细过程 作者:龚建伟 2001.6.20 可以任意转载,但必须注明作者和说明来自http://doc.xuehai.net,不得作为商用 目次: ...

  9. Android BLE开发(一):串口调试

    由于之前做的蓝牙检测功能有点久远,没有做好备份.重新再做相类似工程时,有些遗漏,特意在此做总结. 一.Android端 二.蓝牙硬件设备 使用蓝牙模块为TI公司CC2541,CC dubugger,两 ...

最新文章

  1. 牌类游戏使用微服务重构笔记(四): micro框架使用经验
  2. 企业真的要培养员工?
  3. 2020互联网校招薪资列表及谈薪注意事项
  4. 手把手教你C语言静态库的开发
  5. Xcode8.0 删除插件路径
  6. Linux 基础 (1) - 在Win10上使用Hyper-v虚拟机安装CentOS7
  7. 一次事故,我对MySQL时间戳存char(10)还是int(10)有了全新的认识
  8. django 坑~~
  9. ERROR org.hibernate.hql.internal.ast.ErrorCounter unexpected token: form 异常解决
  10. Linux操作系统基础命令
  11. 网易云信 NIM_duilib 源码分析
  12. 仿酒仙网的一款jQuery侧栏弹出导航栏特效
  13. Biu+生态大会三路出击,苏宁小Biu露出“实战派”面目?
  14. 面试突击51:为什么单例一定要加 volatile?
  15. 【LaTeX】子图和图片并排
  16. css画三角形、梯形
  17. HTML5+Downloader文件下载
  18. signature=fd1093c9205f8af457ccc5f1d3251c78,An FDTD method for ELFE propagation in seawater.
  19. Yolov5训练日记~如何用Yolov5训练识别自己想要的模型~
  20. docker - 端口占用

热门文章

  1. 一个笼子里面关了鸡和兔子(鸡有2 只脚,兔子有4 只脚,没有任何例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。
  2. 笔记本电脑计算机无法启动怎么办,联想笔记本开不了机怎么办 电脑开机进不了系统怎么办...
  3. 520,看看AI大牛吴恩达和姚期智如何撩妹
  4. tvs管参数数解读_浅析TVS管的特性及参数
  5. 公有继承,私有继承,保护继承的区别
  6. Oracle Advanced Queuing 触发器入列和异步通知消息出列
  7. ZZULIOJ1075: 聚餐人数统计
  8. vue el-table 动态添加行、删除行
  9. 推荐1个java快速开发项目,让你接私活不用愁
  10. 数据库系统概论实验三——创建及管理数据表