我尝试向设备发送命令并通过串口读回数据,但它给了我一个奇怪的行为。我必须发送几次(最多两次)sendData()来获取数据。我不想使用writeLine,我不在我的代码中写一个循环(我已经想到了)。我的架构就是这样的。我将ReceivedByteThreshold设置为1,这样每次从设备接收数据时,都会触发ReceivedData事件处理程序。我一次读一个字节。当它读取其ascii为13的CR时,我在标签上显示数据,但我必须多次发送数据(* idn?)(有时可以一次完成但不一致)。参见图片以供参考。我不确定为什么会这样。提前谢谢
Private Sub DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort.DataReceived
Dim ret As Integer
ret = SerialPort.ReadByte()
If ((ret <> 13) And (ret <> 10)) Then
str &= System.Convert.ToChar(ret)
End If
If ret = 13 Then
ret = SerialPort.ReadByte()
If ret = 10 Then
Me.Label2.Text = str
str = ""
End If
End If
End Sub
Sub SendData(ByVal data As String)
Try
SerialPort.Write(data)
Catch ex As Exception
MsgBox("fail to send data")
End Try
End Sub
[更新]
我改变了方法。我刚刚使用了Do循环但结果仍然不一致。我选择不再使用计时器,只是使用ReceiveData事件处理程序。
Private Sub DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort.DataReceived
Dim ret As Integer
Do
ret = SerialPort.ReadByte()
str &= System.Convert.ToChar(ret)
If ret = 13 Then
ret = SerialPort.ReadByte()
If ret = 10 Then
Exit Do
End If
End If
Loop
Me.Label2.Text = str
str = ""
End Sub
我使用Docklight来测试我的代码,你可以告诉它有时会在重新获取数据之前连续发送两次。如果涉及竞争条件问题我不是,谢谢。