有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

ubuntu上用java识别linux串行端口

我正在尝试用Java连接ubuntu上的串行应用程序
在搜索和读取资源之后,我添加了comm.jar和RXTXcomm。在图书馆里
我使用以下代码来标识组件。在我的系统中有三个端口,但在ports.hasMoreElements()方法中显示为false
请查看代码并帮助我

String wantedPortName = "/dev/ttya";
///dev/ttyS0 و /dev/ttyS1 نیز تست شد
Enumeration portIdentifiers = CommPortIdentifier.getPortIdentifiers();
CommPortIdentifier portId = null;  // will be set if port found
while (portIdentifiers.hasMoreElements())
{
    CommPortIdentifier pid = (CommPortIdentifier) portIdentifiers.nextElement();
    if(pid.getPortType() == CommPortIdentifier.PORT_SERIAL &&
      pid.getName().equals(wantedPortName)) 
  {
    portId = pid;
    break;
  }
}
if(portId == null)
{
     System.err.println("Could not find serial port " + wantedPortName);
     System.exit(1);
}    

共 (2) 个答案

  1. # 1 楼答案

    看起来您正在筛选出所需的端口。A/dev/tty是一种特殊字符设备。。。不是串行端口,所以

    if(pid.getPortType() == CommPortIdentifier.PORT_SERIAL &&
      pid.getName().equals(wantedPortName)) 
    

    应该永远不要匹配您的字符串

    要证明这一点,请尝试在可用端口上迭代。我不知道RXTX是否可以检测到tty,但请使用它并让我们知道

    参考: http://rxtx.qbang.org/wiki/index.php/Discovering_available_comm_ports

    编辑: 所以你没有任何串行设备来测试?我所做的就是确保您已正确安装了所有内容,包括此文件中描述的属性文件

    http://rxtx.qbang.org/pub/rxtx/rxtx-2.0-7pre2/INSTALL

    完成后,安装一个空调制解调器模拟器或查找一个串行设备进行测试

  2. # 2 楼答案

    在我的例子中,我使用的是Ubuntu,我的笔记本没有任何串行或并行端口

    因此,您必须模拟这种端口:

    apt-get install socat
    

    运行它:

    socat -d -d pty,raw,echo=0, pty,raw,echo=0
    

    根据输出,注意创建的“设备”:

    2014/02/05 01:04:32 socat[7411] N PTY is /dev/pts/2
    2014/02/05 01:04:32 socat[7411] N PTY is /dev/pts/3
    2014/02/05 01:04:32 socat[7411] N starting data transfer loop with FDs [3,3] and [5,5]
    

    停止socat[CTRL]+[C],并将其符号链接到RXTX将识别为设备的位置,因为前缀为“tty”:

    sudo ln -s /dev/pts/2 /dev/ttyUSB02
    sudo ln -s /dev/pts/3 /dev/ttyUSB03
    

    现在,再次运行socat

    socat -d -d pty,raw,echo=0 pty,raw,echo=0
    

    现在,使用以下代码,您将看到2个虚拟端口:

            Enumeration portList = CommPortIdentifier.getPortIdentifiers();//this line was false
            System.out.println(portList.hasMoreElements());
    
            while(portList.hasMoreElements()){
                System.out.println("Has more elements");
                 CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement();
                   if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                        System.out.println(portId.getName());
                   }
                   else{
                         System.out.println(portId.getName());
                   }
            }
    

    系统。输出:

    true
    Has more elements
    /dev/ttyUSB03
    Has more elements
    /dev/ttyUSB02