2017-01-26 2 views
0

Hallo Ich habe den folgenden Code:Serielle Schnittstelle Zuhörer nicht zurück Daten (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); 
          } 
         } 
        } 
       }); 
      } 

Die Serial Port Daten Antwort senden, wenn ich eine Nachricht senden, wenn ich auf einen Knopf klicken. Aber ich würde Ich mag eine Nachricht wiederholen indefiny, mit dem folgenden Code:

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

und die folgenden Klasse:

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

}

Meine Probleme ist, dass die Port nicht Antwort senden ... Nachrichten werden unendlich im Thread gesendet, aber der Port sendet keine Antwort ... Es ist so schnell das Senden in einem Thread an den Port Antwort? Wie geloopte Nachrichten senden?

Danke und Entschuldigung für Fehler.

Antwort

0

Statt eines while(true), könnten Sie den Code innerhalb einer Zeit Executors.newScheduledThreadPool(1);

setzen, ich bin Blick auf den Code und ich frage mich, wie ist die DetailBillets Runnable gefeuert wird.

Ist JSSC.getInstance() ein Singleton, der dieselbe Instanz von serialPort referenziert, die in Ihrem ersten Codeblock verwendet wird? Was ist die Implementierung von sendMessage? Verwendet es die WriteString-Methode von SerialPort?

Vielleicht geben Sie eine flowControlMode auf Ihrer serialPort Instanz? In meinem Fall: SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT

Verwandte Themen