java-simple-série-connecteur de lecture/écriture serveur


J'ai modifié l'exemple montré sur https://code.google.com/p/java-simple-serial-connector/wiki/jSSC_examples pour afficher la lecture/écriture à partir du programme java. Je peux exécuter le programme, mais les données que j'envoie en utilisant serialPort.writeString ("HelloWorld"); ne semble pas être lu dans la classe d'événement SerialPortReader. Pouvait-on s'il vous plaît signaler ce qu'est la question ?

 public class SerialReaderWriter {

static SerialPort serialPort;

public static void main(String[] args) {
    serialPort = new SerialPort("COM1"); 
    try {
        serialPort.openPort();
        serialPort.setParams(9600, 8, 1, 0);
        //Preparing a mask. In a mask, we need to specify the types of events that we want to track.
        //Well, for example, we need to know what came some data, thus in the mask must have the
        //following value: MASK_RXCHAR. If we, for example, still need to know about changes in states 
        //of lines CTS and DSR, the mask has to look like this: SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS + SerialPort.MASK_DSR
        int mask = SerialPort.MASK_RXCHAR;
        //Set the prepared mask
        serialPort.setEventsMask(mask);
        //Add an interface through which we will receive information about events
        serialPort.addEventListener(new SerialPortReader());

        serialPort.writeString("HelloWorld");
    }
    catch (SerialPortException ex) {
        System.out.println(ex);
    }
}

static class SerialPortReader implements SerialPortEventListener {

    public void serialEvent(SerialPortEvent event) {
        //Object type SerialPortEvent carries information about which event occurred and a value.
        //For example, if the data came a method event.getEventValue() returns us the number of bytes in the input buffer.
        System.out.println(event.getEventType());
        if(event.isRXCHAR()){
            if(event.getEventValue() == 10){
                try {
                    String data= serialPort.readString();
                    System.out.println(data);
                }
                catch (SerialPortException ex) {
                    System.out.println(ex);
                }
            }
        }
        //If the CTS line status has changed, then the method event.getEventValue() returns 1 if the line is ON and 0 if it is OFF.
        else if(event.isCTS()){
            if(event.getEventValue() == 1){
                System.out.println("CTS - ON");
            }
            else {
                System.out.println("CTS - OFF");
            }
        }
        else if(event.isDSR()){
            if(event.getEventValue() == 1){
                System.out.println("DSR - ON");
            }
            else {
                System.out.println("DSR - OFF");
            }
        }
    }
}

}

Author: Ayub, 2013-04-30

3 answers

Vous ne pouvez pas lire les données du même port où vous écrivez(COM1 ici). J'ai suivi les étapes ci-dessous pour lire et écrire en utilisant JSSC.

Faux votre port série avec SerialPortMonitor.

  1. Envoyer des données de COM2 à partir du périphérique SerialPortMonitor installé. entrez la description de l'image ici

  2. Mode->Spy montrent votre écrit chaîne "HelloWorld" et la Chaîne reçue "OK"entrez la description de l'image ici

Faire les modifications ci-dessous et de vérifier votre code:

serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN |
                                 SerialPort.FLOWCONTROL_RTSCTS_OUT);

serialPort.writeBytes("HelloWorld");//Write data to port
PortReader portReader=new PortReader(serialPort)
serialPort.addEventListener(portReader, SerialPort.MASK_RXCHAR);
int[][] eventArray=serialPort.waitEvents()
for (int i = 0; i < eventArray.length; i++) {
    if ((eventArray[i][0] > 0) ) {
    serialPort.eventListener.serialEvent(new SerialPortEvent("COM1", eventArray[i][0], eventArray[i][1])); // wait for the listener event to complete
        }
    }

La classe port reader: (Il vous manquait l'annotation Override et le passage dans le port série)

public class PortReader implements SerialPortEventListener{
SerialPort serialPort
public PortReader(){}
public PortReader(SerialPort serialPort){this.serialPort=serialPort}
    @Override
    public void serialEvent(SerialPortEvent event) {
    if(event.isRXCHAR() && event.getEventValue() > 0) {
            try {
                String receivedData = this.serialPort.readString(event.getEventValue());
                System.out.println("Received response: " + receivedData);
                this.serialPort.closePort();//Close serial port
            }
            catch (SerialPortException ex) {
                System.out.println("Error in receiving string from COM-port: " + ex);
                this.serialPort.closePort();//Close serial port
            }
        }
    }

}
 1
Author: sandhya murugesan, 2016-02-22 06:14:03

La commande

serialPort.writeString("HelloWorld");

envoie la chaîne

HelloWorld

de COM1. La classe SerialPortReader que vous implémentez amène COM1 à listen pour le type d'événement isRXCHAR (ALIAS lorsque COM1 reçoit un caractère).

Avez-vous un câble série connecté au port série?

Sauf si vous traversez les broches RX et TX de COM1 ou si vous avez un port COM séparé (dont TX et RX sont connectés au RX et TX pins respectivement), le SerialPortReader ne sera jamais activé.

 0
Author: onoitsjon, 2013-05-16 19:07:38

Si votre appareil ne nécessite pas de contrôle de flux RTS/CTS ou vous n'avez pas de câble série entièrement connecté

( seulement RX, TX, GND)

Vous devez éteindre le terminal de données prêt (dtr) signal pour la communication série

Ajouter ce

serialPort.setRTS(false); 
serialPort.setDTR(false);

Après

serialPort.addEventListener(new SerialPortReader());
 0
Author: astral, 2013-08-09 13:18:34