簡體   English   中英

循環使用偶數偵聽器從串行端口讀取

[英]read from a serial port using even listener in a loop

我有一種方法可以將文件的內容寫入串行端口,然后等待確認消息。 我正在嘗試使用均勻的偵聽器,但是沒有消息打印回控制台。 但是,當我以慢速手動讀取沒有事件監聽器的消息時,消息又回來了。 這是我的代碼:

public class portConnector {
private static SerialPort SP;


public portConnector(String pName){
    SP = new SerialPort(pName);
}

public static byte[] read(String name) throws IOException{
    File file = new File(name);     
    byte[] bytes = new byte[(int) file.length()];
    FileInputStream inputStream = new FileInputStream(file);
    inputStream.read(bytes);
    inputStream.close();
    return bytes;
}

public void push2rec (File[] LOF){
    try {
        SP.openPort();
        SP.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
        int mask = SerialPort.MASK_RXCHAR;
        SP.setEventsMask(mask); 
        SP.addEventListener(new PortReader(), SerialPort.MASK_RXCHAR);
        for (File f : LOF){
            byte[] rd = read(f.getName());
            SP.writeBytes(rd);
        }
        SP.closePort();
    }
    catch (SerialPortException ex) {System.out.println(ex);} 
    catch (IOException ex) {System.out.println(ex);}
}

private static class PortReader implements SerialPortEventListener {

@Override
public void serialEvent(SerialPortEvent event) {
    if(event.isRXCHAR() && event.getEventValue() == 10) {
        try {
            byte[] buffer = SP.readBytes(10);
            for (byte b : buffer){
                System.out.format("%02X ", b);
            }
            System.out.println("");
        }
        catch (SerialPortException ex) {
            System.out.println("Error in receiving string from COM-port: " + ex);
        }
    }
}}}

的“ addEventListener”位於正確的位置嗎? 誰能幫助我解決這個問題。 任何幫助,將不勝感激。 謝謝。

串行接收事件第一次觸發時,它很可能只有一個字符,因為成千上萬的指令在單個字符時間內執行。

您需要將每個事件的字符捕獲到緩沖區變量中,直到找到所需的10個字符為止。

您還必須將接收事件與發送的第一個字符同步。 這就是為什么大多數串行通信都以CR或某些其他已知字符終止的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM