使用java接收RS-232C设备的数据

时间:2012-11-05 17:49:40

标签: java serial-port rxtx

我最近购买了USB条形码扫描仪。它有3种不同的界面选择选项:

  1. RS-232C
  2. USB
  3. 魔杖仿真
  4. 要求仅在Java(Rxtx API)的帮助下使用RS-232C接口接收扫描的条形码。 据我所知,我需要在RXTX中定义一个COM端口以开始与设备交互

    但问题是我在RS-232C接口使用时无法找到其COM端口。

    在通信RS-232C端口时是否有任何遗漏,如何找到端口号。

    请帮助我。

    更新:根据建议,我使用以下代码扫描了系统中的所有串口(使用JSSC

     import jssc.SerialPortList;
    
    public class Main {
    
    public static void main(String[] args) {
        String[] portNames = SerialPortList.getPortNames();
        for(int i = 0; i < portNames.length; i++){
            System.out.println(portNames[i]);
        }
    }
    }
    

    有一点需要注意:当我连接条形码扫描仪并移除扫描仪时,上述代码获得的端口列表没有变化。

    输出: COM3 COM11 COM18 COM32 COM33 COM34 COM35 COM36 COM37 COM38 COM39 COM40 COM42 COM45 COM52 COM53 COM59 COM60 COM61 COM62 COM63

    在输出之后,我尝试使用以下代码逐个侦听上述每个端口:

    import jssc.SerialPort;    import jssc.SerialPortException;

    public class Main {

    public static void main(String[] args) {
        SerialPort serialPort = new SerialPort("COM63"); //manually setting all the ports above one by one
        try {
            serialPort.openPort();//Open serial port
            byte[] buffer = serialPort.readBytes(10);
            System.out.println(buffer.toString());
            serialPort.closePort();//Close serial port
        }
        catch (SerialPortException ex) {
            System.out.println(ex);
        }
    }
    }
    

    我得到了端口忙或没有输出(同时我继续用条码扫描器扫描)

2 个答案:

答案 0 :(得分:0)

Here's a solution发布在StackOverflow上的其他地方。基本上,您需要从操作系统中循环可用的组件并显示/选择预期的组件。如果您遇到问题,请发布一些代码供我们审核。

答案 1 :(得分:0)

我不熟悉这些API,但对COM端口的电气端非常熟悉。与USB端口不同,没有自动“握手”指示设备是否连接。但是,界面中存在多个状态行。

除了TD / RD信号(传输数据/接收数据)之外,还有RTS / CTS - 请求发送和清除发送。 RTS和CTS是这样的,当没有任何连接时它们会“没有准备好”。

通常的协议是设备断言RTS然后另一端返回CTS以指示一切准备就绪。然而,由于计算机可以显示为“设备”或“调制解调器”(RS-232只知道两件事),因此这一点变得复杂。结果是您可以有几种不同的引脚和信号配置,具体取决于两个部分的假设模式。 (如果你很幸运,扫描仪文档会描述其中的一部分。)

更复杂的是DSR / DTR信号 - 数据集(调制解调器)就绪和数据终端就绪。在大多数PC配置中,这些都被忽略,但并非总是如此。

所以,如果您的扫描很快就没有运气,您可能需要查看pinouts并使用电压表和一些跳线将您的物理端口设置为扫描仪会找到的状态。然后将进行进一步的实验,以确定如何设置状态信号以使扫描仪进行通话。