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 を返します。2 つの異なる文字列オブジェクトをテストしているため、常に失敗します。代わりに「compareTo()」を使用する必要があります。

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