在一行中读取串行数据java

时间:2017-10-25 08:52:24

标签: java serial-port line

我正在制作一个带有rs485模块的项目 每次模块将数据发送到我的com端口时,我都希望捕获该数据 而那个作品,我能抓住它。但是当我抓住它时,我会看到它有多行。

我的数据每次都以*开头,以#结束。

你能帮助我只在一行中捕获数据吗?谢谢 !

public void serialEvent(SerialPortEvent event) {
    //if(event.isRXCHAR() && event.getEventValue() > 0) {
    try {

        String receivedData = serialPort.readString(event.getEventValue());
        while (receivedData.charAt(0) == '#') {
            receivedData = receivedData.substring(1, receivedData.length());
        }
        System.out.println("Received response from port: " + receivedData);
    } catch (SerialPortException ex) {
        System.out.println("Error in receiving response from port: " + ex);
    }
    //}
}

3 个答案:

答案 0 :(得分:0)

你需要阅读,直到你得到最初的*,然后阅读,直到你得到最后的#“:

String ch;
StringBuffer data = new StringBuffer();
while (!(ch = serialPort.readString(1)).equals("*"))
    ;
while (!(ch = serialPort.readString(1)).equals("#"))
    data.append(ch);
return data.toString();

当然,您需要为此添加错误和EOS处理。

答案 1 :(得分:-1)

如果问题是您正在将 receivedData 作为char数组进行迭代,那么您可以这样做

<table>
  <th>Description</th>
  <th>Phase</th>
  <% @statement.indicators.each.do |indicator| %>
    <tr>
      <td><%= indicator.identity.description %></td>
      <td><%= indicator.phase.name %></td>
    </tr>
  <% end %>
</table>

如果要在输入中获取新行字符,请使用

receivedData = receivedData.substring(receivedData.indexOf('*'), receivedData.indexOf('#'));

答案 2 :(得分:-1)

enter image description here

看看这个。 由于您没有在循环中运行 String receivedData = serialPort.readString(event.getEventValue()); ,因此您必须获取字符串。所以我假设你得到的字符串在每个字符后都有 \ n 这个假设是否正确? 还是别的什么?