Java和串行端口通信

时间:2013-01-18 09:39:37

标签: java serial-port

我对此并不了解,所以这将是一个非常基本的问题。

我有一个漂亮的USB小东西,模仿COM端口。这是一个简单的开关,我可以发送三种不同的信号:ON,OFF和GET STATUS

我使用名为RealTerm的终端程序对其进行了测试。在此,我可以以设置的波特率和其他选项打开端口,然后将bin文件发送到端口。当我得到这个东西时,我还下载了三个不同的.bin文件 - 一个用于ON,一个用于BREAK,一个用于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

我是否应该能够将这些十六进制字符串传递给java程序中的设备,并获取/观察结果?如果是这样,我该怎么办?像上面的writeBytes()或writeString()没有做任何事情。 (当MAKE或BREAK信号有效时,我听到设备发出的咔嗒声。)

或者有没有办法将这些.bin文件传递给端口,就像我在RealTerm中一样?

另外,有没有人确切知道这些.bin文件可能是哪种文件?我从(便宜)购买它的人不是很有信息,并且不想帮助处理事情或回答与设备无直接关系的问题(当然这是可以理解的)。

我不需要深入研究微处理器编程或类似主题,因为我只是想完成一些基本操作。但是,一些见解或概述当然是必要的。

1 个答案:

答案 0 :(得分: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

你必须像字节数组一样发送。它们看起来像十六进制数字,所以尝试这样做:

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();