Serialport Lesen schreiben in java

Ich habe eine Anwendung, wo ich schreiben müssen einige Daten an der seriellen Schnittstelle und die Antwort von ihm. Jetzt die Sequenz ist wie folgt:

  1. Senden Sie eine Nachricht an den seriellen port.
  2. auf die Reaktion warten
  3. Sobald die Antwort eingegangen ist, habe ich die Nachricht zu verarbeiten und bis dahin soll nichts geschehen, um die Anwendung.

Wie soll ich das brechen dieses problem und es lösen können ? Ich bin nicht gut in die serielle Programmierung. Ich habe einen code, aber meine Anwendung wird angehalten, wenn ich führen Sie die Nachricht senden. Kann sein, weil ich bin nach dem Lesen der Nachricht einfach nach dem senden einer Nachricht. Ich weiß wirklich nicht heißen, einen Ausweg aus diesem problem. Habe ich zu Beginn auf dem port lauschen, während Sie die Anwendung starten ? Muss ich ständig den port offen ? Ist es ok, wenn ich den port öffnen jedes mal muss ich das ? und wie soll ich das machen das Programm warten, um zu reagieren, bis die Antwort-Nachricht gelesen wird, bilden die Schnittstelle ? Bitte helfen Sie mir dieses problem lösen..

--EDIT--

package testConn;  
import forms_helper.global_variables;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.util.logging.Level;  
import java.util.logging.Logger;  
import javax.comm.*;  
import java.util.*; 

/** Check each port to see if it is open. **/  
public class openPort implements SerialPortEventListener {

    static Enumeration portList;
    static CommPortIdentifier portId;
    static String messageString;
    public static SerialPort serialPort;
    static OutputStream outputStream;
    InputStream inputStream;
    static boolean outputBufferEmptyFlag = false;

    public void open() {
        Enumeration port_list = CommPortIdentifier.getPortIdentifiers();

        while (port_list.hasMoreElements()) {
            //Get the list of ports
            CommPortIdentifier port_id = (CommPortIdentifier) port_list.nextElement();
            if (port_id.getName().equals("/dev/ttyS1")) {

                //Attempt to open it
                try {
                    SerialPort port = (SerialPort) port_id.open("PortListOpen", 20);
                    System.out.println("Opened successfully");
                    try {
                        int baudRate = 9600; //
                        port.setSerialPortParams(
                                baudRate,
                                SerialPort.DATABITS_7,
                                SerialPort.STOPBITS_1,
                                SerialPort.PARITY_EVEN);
                        port.setDTR(true);
                       /*

                        port.setFlowControlMode(
                                SerialPort.FLOWCONTROL_NONE);
                        *
                        */
                        System.out.println("properties are set");
                    } catch (UnsupportedCommOperationException e) {
                        System.out.println(e);
                    }
                    try {
                        //input = new SerialReader(in);
                        port.addEventListener(this);
                        System.out.println("listeners attached" + this);
                    } catch (TooManyListenersException e) {
                        System.out.println("too many listeners");
                    }
                    port.notifyOnDataAvailable(true);
                    //port.notifyOnOutputEmpty(true);
                    //sendMessage(port,"@PL");
                    //port.close ();
                    try {
                        inputStream = port.getInputStream();
                        System.out.println("inputstream" + inputStream.available());
                        outputStream = (OutputStream) port.getOutputStream();

                    } catch (IOException e) {
                        System.out.println(e);
                    }

                    //set the created variables to global variables
                    global_variables.port = port;
                    global_variables.inputStream = inputStream;
                    global_variables.outputStream = outputStream;
                } catch (PortInUseException pe) {
                    System.out.println("Open failed");
                    String owner_name = port_id.getCurrentOwner();
                    if (owner_name == null) {
                        System.out.println("Port Owned by unidentified app");
                    } else //The owner name not returned correctly unless it is
                    //a Java program.
                    {
                        System.out.println("  " + owner_name);
                    }
                }
            }
        }
    } 

    public static void sendMessage(SerialPort port, String msg) {
        if (port != null) {
            try {                
                global_variables.outputStream.write(msg.getBytes());
                global_variables.outputStream.flush();
                try {
                    Thread.sleep(2000);  //Be sure data is xferred before closing
                    System.out.println("read called");
                    //SimpleRead read = new SimpleRead();
                    //int read = global_variables.inputStream.read();
                    //System.out.println("read call ended"+read);
                } catch (Exception e) {
                }
            } catch (IOException ex) {
                Logger.getLogger(openPort.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public void serialEvent(SerialPortEvent event) {
        System.out.println(event.getEventType());
        switch (event.getEventType()) {
            /*
            case SerialPortEvent.BI:

            case SerialPortEvent.OE:

            case SerialPortEvent.FE:

            case SerialPortEvent.PE:

            case SerialPortEvent.CD:

            case SerialPortEvent.CTS:

            case SerialPortEvent.DSR:

            case SerialPortEvent.RI:


            case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
            System.out.println("event.getEventType()");
            break;
             *
             */

            case SerialPortEvent.DATA_AVAILABLE:
                System.out.println("inside event handler data available");
                byte[] readBuffer = new byte[20];
                try {
                    while (inputStream.available() > 0) {
                        int numBytes = inputStream.read(readBuffer);
                    }
                    System.out.print(new String(readBuffer));
                    System.exit(1);
                } catch (IOException e) {
                    System.out.println(e);
                }

                break;
        }
    }
}

Was ist falsch an diesem code ? Ich kann nicht sehen, die Antwort vom terminal angeschlossen serialport, wenn ich senden eines polling-Nachricht. Ich bin dem öffnen der Verbindung auf meine Anwendung starten und ich bin die die Nachricht sendet, wenn eine Taste in meine Anwendung klicken. Wie löse ich das problem ??

InformationsquelleAutor Deepak | 2011-04-28

Schreibe einen Kommentar