我是整个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);
}
答案 0 :(得分:3)
看起来不错,在wantedPortName中尝试没有空白:
String wantedPortName = "COM4" ;
[EDITED]
你能试试这个:
final CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM1");
System.err.println(portId.getName());
答案 1 :(得分:1)
在这种情况下,“equals()”仅在引用相同时才返回true。由于您正在测试两个不同的字符串对象,因此它总是会失败。您必须改为使用“compareTo()”:
if (pid.getPortType() == CommPortIdentifier.PORT_SERIAL
&& (pid.getName().compareTO(wantedPortName)==0) ) {
portId = pid;
break;
}