首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我从串行端口读取的内容与超级终端执行的操作之间的差异

我从串行端口读取的内容与超级终端执行的操作之间的差异
EN

Stack Overflow用户
提问于 2012-10-25 21:42:13
回答 1查看 343关注 0票数 1

我正在使用超级终端读取来自传感器的输入。此传感器发出的字符串格式应为值6位或5位和一个小数点(但它可以是2个空格,然后是3个数字和一个小数)制表符分隔符测量单元(“Ci”、"mCi“等)制表符分隔符字符串例如(F-18或C-11)制表符分隔符制表符CRLF字符串结束标识符。

如果我通过超级终端监视这个输入,它会完美地读取它

代码语言:javascript
复制
0.00  kBq      F-18 2D

然而,当我读它的时候,我大多数时候会得到断掉的字符串片段,有时我会得到正确的字符串,下面显示了我可以恢复的示例。

代码语言:javascript
复制
0.00  k□□□□□□□□□□□□□

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

0.00  kBq      F-18 □□□

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

我使用的代码来自RXTX库。

代码语言:javascript
复制
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);}}  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-25 21:50:09

这是设计好的。假设您将从Read()调用中获得所有字节。这不是它的工作方式,它只会给你到目前为止已经收到的字节数。这在超级终端中也会发生,但你永远不会注意到,因为你的眼睛不是那么快。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13069948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档