我正在制作一个带有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);
}
//}
}
答案 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)