我从串口读取的内容与Hyperterminal的内容之间存在差异

时间:2012-10-25 13:42:13

标签: serial-port hyperterminal

我正在使用Hyperterminal来读取传感器的输入。 该传感器发出一个应该在表格中的字符串 值6位数或5位数和小数点(但它可以是2个空格,然后是3个数字和1个小数) 标签分隔符 测量单位(“Ci”,“mCi”等) 标签分隔符 字符串例如(F-18或C-11) 标签分隔符 tab CRLF字符串结束标识符。

如果我通过Hyper终端监听此输入它完全读取

0.00  kBq      F-18 2D

然而,当我读到它时,我大部分时间都会得到字符串的断段,有时我会得到正确的字符串,我可以得到的一个例子如下所示。

0.00  k□□□□□□□□□□□□□

Bq      F-18 2D□□□□□□□□□

0.00  kBq      F-18 □□□

0.002D
□□□□□□□□□□

我使用的代码来自RXTX库。

public void serialEvent (SerialPortEvent event){  
    if (event.getEventType()== SerialPortEvent.DATA_AVAILABLE){  
       byte[] readBuffer = new byte[19];  
       try{  
            while (inputStream.available() > 0){  
                int numBytes = inputStream.read(readBuffer);  
                }
       catch (IOException e) {}  
       input_line = new String (readBuffer);  
       inter.update(input_line);}}  

1 个答案:

答案 0 :(得分:1)

这是设计的。您假设您将从Read()调用中获得所有字节。这不是它的工作原理,它只会给你到目前为止收到的字节数。这也发生在Hyperterminal,但是你从来没有注意到,因为你的眼睛不那么快。

您需要在方法之外移动readBuffer并逐步填充它,直到您收到完整的响应。然后处理它。

如果设备只发送简单的ASCII文本和行终止符,这是常见的,那么调用SerialPort.ReadLine()是确保获得响应中所有字符的好方法。如有必要,请调整NewLine属性。