我正在尝试将ubuntu上的串行应用程序与Java连接
搜索和读取资源后,我在库中添加了comm.jar和RXTXcomm.jar
我使用以下代码来识别comports。在我的系统中有三个端口,但它在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);
}
答案 0 :(得分: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]
停止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());
}
}
的System.out:
true
Has more elements
/dev/ttyUSB03
Has more elements
/dev/ttyUSB02
答案 1 :(得分: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
完成后,安装一个零调制解调器仿真器或找一个要测试的串行设备。