1

私はこれについてあまり知らないので、これはかなり基本的な質問になるでしょう。

COMポートをエミュレートする気の利いた小さなUSBのものがあります。これは単純なスイッチで、ON、OFF、GET STATUS の 3 つの異なる信号を送信できます。

RealTerm という端末プログラムを使用してテストしました。これで、設定されたボーレートとその他のオプションでポートを開き、bin ファイルをポートに送信できます。入手したとき、3 つの異なる .bin ファイルもダウンロードしました。1 つは ON 用、もう 1 つは BREAK 用、もう 1 つは GET STATUS 用です。これは魅力のように機能し、ポートは対応するコードなどを返します。

今、これを Java で試してみたいと思います (最初に、次におそらく C/C++)。そこで、JSSC (v0.9) というライブラリを入手しました。これにより、これが非常に簡単になります。これが私がすることです:

public static void main(String[] args) {
    String[] portNames = SerialPortList.getPortNames();

    for(int i = 0; i < portNames.length; i++){
        System.out.println(portNames[i]);
    }

    SerialPort serialPort = new SerialPort("COM10");

    try {
        serialPort.openPort();//Open serial port
        serialPort.setParams(SerialPort.BAUDRATE_9600, 
                             SerialPort.DATABITS_8,
                             SerialPort.STOPBITS_1,
                             SerialPort.PARITY_NONE);

        serialPort.writeBytes("0x55 01 01 02 00 00 00 59".getBytes());
        serialPort.closePort();
    }
    catch (SerialPortException ex) {
        System.out.println(ex);
    }
}

ボーレート、データ、およびストップ ビットは正しいものです。デバイスを接続すると、system.out.prinln にポートが一覧表示されるので、デバイスが検出されたように見えます。

現在、デバイスには次のコードワードがあります。

Make:         0x55 01 01 02 00 00 00 59
Break:        0x55 01 01 01 00 00 00 58
Check status: 0x55 01 01 00 00 00 00 57

次に、これらの 16 進文字列を Java プログラムのデバイスに渡し、結果を取得/観察できるようにする必要がありますか? もしそうなら、どうすればいいですか?上記のように writeBytes() または writeString() だけでは何もしません。(MAKE または BREAK 信号が機能すると、デバイスからクリック音が聞こえます)。

または、RealTerm で行っているように、これらの .bin ファイルをポートに渡す方法はありますか?

また、これらの .bin ファイルがどのような種類のファイルであるかを正確に知っている人はいますか? 私が (安く) 購入した人は、あまり有益ではなく、デバイスに直接関係のないことを手伝ったり、質問に答えたりしたくありません (もちろん、これは理解できます)。

ここでは、基本的な操作を実行しようとしているだけなので、マイクロプロセッサ プログラミングや同様のトピックについて詳しく説明する必要はありません。しかし、もちろんある程度の洞察や概観は必要です。

4

1 に答える 1

1

これらのコードは次のように思われます。

Make:         0x55 01 01 02 00 00 00 59
Break:        0x55 01 01 01 00 00 00 58
Check status: 0x55 01 01 00 00 00 00 57

バイト配列のように送信する必要があります。これらは 16 進数のように見えるので、次のようにしてみてください。

byte[] mike = new byte[]{0x55, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x59};
serialPort.writeBytes(mike);
serialPort.flush(); // is this method available? I think you should invoke it, if it is present
serialPort.closePort();
于 2013-01-18T09:47:33.880 に答える