0

我正在尝试使用 Java 连接 ubuntu 上的串行应用程序
搜索和阅读资源后,我在库中添加了 comm.jar 和 RXTXcomm.jar。
我使用以下代码来识别comports。在我的系统中有三个端口,但它在ports.hasMoreElements()方法中显示为错误。
请查看代码并帮助我。

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);
}    
4

2 回答 2

1

就我而言,我使用的是 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]

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

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
于 2014-02-05T03:15:15.047 回答
0

看起来你正在过滤掉你想要的端口。/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

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

于 2013-09-07T03:52:02.527 回答