1

我是整个 modbus 和串行通信概念的新手,所以即使这是一个真正的菜鸟问题,请多多包涵!

好的,所以我正在尝试使用 modbus 协议和 RS 232 端口读取存储在寄存器上的值。我已经写了这段代码,但它没有找到串口"COM 4"。我究竟做错了什么?

String wantedPortName = "COM 4" ;

Enumeration portIdentifiers = CommPortIdentifier.getPortIdentifiers();

CommPortIdentifier portId = null;  
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

3

看起来不错,尝试在 WantedPortName 中不留空白:

String wantedPortName = "COM4" ;

[编辑]

你可以试试这个:

final CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM1");
System.err.println(portId.getName());

?

于 2013-02-09T09:10:40.923 回答
1

在这种情况下,“equals()”只会在引用相同的情况下返回 true。由于您正在测试两个不同的字符串对象,它总是会失败。您必须改用“compareTo()”:

if (pid.getPortType() == CommPortIdentifier.PORT_SERIAL
        && (pid.getName().compareTO(wantedPortName)==0) ) {
    portId = pid;
    break;
}
于 2013-02-09T20:25:25.380 回答