Java JSSC rs232 aucun événement
J'essaie d'obtenir des valeurs de rs232 (lecteur de carte Roger prt66lt) avec un simple connetor série java (jssc) mais il semble que je ne démarre aucun événement. J'utilise l'exemple de code. Le lecteur de carte est configuré pour envoyer le numéro de carte lorsqu'il le lit. Mais je ne reçois aucun événement commencé parce que je ne vois pas l'événement de ce système.hors. Je suis, y compris jssc.bocal (à partir de la version 2.5.0) et sa connexion à divice. Est-ce que cette version de jssc n'en a pas besoin .dll ? Je pense que c'est inclus dans celui-ci ? Le code similaire à celui-ci, mais avec la bibliothèque RXTX, fonctionne bien mais je dois inclure la bibliothèque dll attahed.
Lecteur de carte m'envoyer HEX valeur: 02, 10 caractères DONNÉES, 0D, 0A, 03
Code:
import jssc.SerialPort;
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
import jssc.SerialPortException;
public class Main {
static SerialPort serialPort;
public static void main(String[] args) {
serialPort = new SerialPort("COM4");
try {
serialPort.openPort();//Open port
serialPort.setParams(9600, 8, 1, 0);//Set params
int mask = SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS + SerialPort.MASK_DSR;//Prepare mask
serialPort.setEventsMask(mask);//Set mask
serialPort.addEventListener(new SerialPortReader());//Add SerialPortEventListener
}
catch (SerialPortException ex) {
System.out.println(ex);
}
}
static class SerialPortReader implements SerialPortEventListener {
public void serialEvent(SerialPortEvent event) {
System.out.println("Event started");
if(event.isRXCHAR()){//If data is available
if(event.getEventValue() == 10){//Check bytes count in the input buffer
//Read data, if 10 bytes available
try {
byte buffer[] = serialPort.readBytes(10);
}
catch (SerialPortException ex) {
System.out.println(ex);
}
}
}
else if(event.isCTS()){//If CTS line has changed state
if(event.getEventValue() == 1){//If line is ON
System.out.println("CTS - ON");
}
else {
System.out.println("CTS - OFF");
}
}
else if(event.isDSR()){///If DSR line has changed state
if(event.getEventValue() == 1){//If line is ON
System.out.println("DSR - ON");
}
else {
System.out.println("DSR - OFF");
}
}
}
}
}
1 answers
Le problème était que le paramètre par défaut de la ligne RTS et DTR est élevé, je dois donc utiliser une autre méthode setParams et définir la ligne RTS sur false selon les besoins du périphérique.
Solution:
serialPort.setParams(9600, 8, 1, 0, false, true);