串行端口侦听器不返回数据 (JSSC)



你好,我有以下代码:

if(!serialPort.isOpened()) {
                // ouverture du port
                serialPort.openPort();
                System.out.println("JSSC -> initPort() : Ouverture du port");
                //config billet
                serialPort.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_7, SerialPort.STOPBITS_1, SerialPort.PARITY_EVEN);
                // on crée une ecoute sur le port pour recuperer la reponse
                serialPort.addEventListener(new SerialPortEventListener() {
                    @Override
                    public void serialEvent(SerialPortEvent event) {
                        if(event.isRXCHAR() && event.getEventValue() > 0) {
                            try {
                                    String dataReceived = serialPort.readHexString(event.getEventValue());
                                    System.out.println("JSSC -> initPort() : Received response hexstring: " + dataReceived);
                                    CashSorterSend.getInstance().renvoyerReponse(dataReceived);
                                    System.out.println("----------------------------------");
                            }
                            catch (SerialPortException ex) {
                                System.out.println("JSSC -> initPort() : Error in receiving string from COM-port: " + ex);
                            }
                        }
                    }
                });
            }

如果我在单击按钮时发送一条消息,则串行端口发送数据答案。但是我,我想无限期地重复一条消息,使用以下代码:

// on declare la tache de fond qui interrogera la compteuse a billet
    taskDetailBillets = new Task<Void>() {
        @Override
        protected Void call() throws Exception {
            while (true) {
                Thread.sleep(300);
                CashSorterSend.getInstance().detailBillets();
            }
        }
    };
    // on demarre notre thread
    threadDetailBillets = new Thread(taskDetailBillets);
    threadDetailBillets.start();

和以下类:

public class DetailBillets implements Runnable {
@Override
public void run() {
    System.out.println("DetailBillets -> run() : Thread DetailBillets");
    try {
        Thread.sleep(600);
        JSSC.getInstance().sendMessage(Constants.COMMAND_HEXA_BILLET_DETAILS, true);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

}

我的问题是端口不发送答案...消息在线程中无限发送,但端口不发送应答...将线程发送到端口答案的速度如此之快??如何循环发送消息?

谢谢,很抱歉错误。

而不是while(true),你可以把代码放在一个Executors.newScheduledThreadPool(1);

目前,我正在查看代码,我想知道 Runnable DetailBillets是如何被触发的。

JSSC.getInstance()引用第一个代码块中使用的相同serialPort实例的单例吗?sendMessage的实现是什么?是否使用 SerialPort 的 writeString 方法?

也许在您的serialPort实例上指定一个flowControlMode?就我而言:SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT

相关内容

  • 没有找到相关文章

最新更新