Связь через последовательный порт очень медленная
Public Shared Function ReceiveData() As String Dim RXCnt As Integer = 0 Dim RXByte As Byte = 0 Dim reply As String = String.Empty Dim STX As Byte() = {&H2, &HD} Dim hexwrite As String = String.Empty Dim ack As Double = 0 Dim errorCode As String = Nothing Dim strText As String = Nothing Dim RXArray As Char() = New Char(2047) {} Dim errorDescription = String.Empty Dim LookUpTable As String = "0123456789ABCDEF" Do '----- Start of communication protocol handling --------------------------------------------- RXCnt = 0 Do RXByte = COMPort.ReadByte RXArray(RXCnt) = LookUpTable(RXByte >> 4) ' Convert each byte to two hexadecimal characters RXCnt = RXCnt + 1 RXArray(RXCnt) = LookUpTable(RXByte And 15) RXCnt = RXCnt + 1 Loop While Not ((COMPort.BytesToRead = 0)) '----- End of communication protocol handling ------------------------------------------------------------- recievesend = False reply = RXArray(0).ToString & RXArray(1).ToString If reply = "06" Then If readwrite = True Then Try COMPort.Write(STX, 0, STX.Length) Catch ex As TimeoutException errorCodeText = String.Concat(errorCodeText, ex.Message) Catch ex As InvalidOperationException errorCodeText = String.Concat(errorCodeText, ex.Message) Catch ex As UnauthorizedAccessException errorCodeText = String.Concat(errorCodeText, ex.Message) End Try recievesend = True hexwrite = "020D" ElseIf readwrite = False Then If ack < 1 Then ack = ack + 1 Try COMPort.Write(writebytes, 0, writebytes.Length) Catch ex As TimeoutException errorCodeText = String.Concat(errorCodeText, ex.Message) Catch ex As InvalidOperationException errorCodeText = String.Concat(errorCodeText, ex.Message) Catch ex As UnauthorizedAccessException errorCodeText = String.Concat(errorCodeText, ex.Message) End Try recievesend = True hexstring = StringToHex(writedata) Else ack = 0 End If End If ElseIf reply = "15" Then errorCode = RXArray(3).ToString() End If Thread.Sleep(300) 'sleep between incoming bytes Loop While Not ((COMPort.BytesToRead = 0)) strText = New String(RXArray, 0, RXCnt) & vbCrLf Return DecodeHexString(strText) End Function
Что я уже пробовал:
Этот код, который я использую для чтения данных из порта, очень медленный, пожалуйста, помогите мне, если есть какие-то новые варианты, чтобы попытаться ускорить чтение.
0x01AA
У тебя есть Sleep(300)
...
Member 10701091
Да, если я удаляю спящий режим, то устройство читается слишком быстро, что приводит к тому, что оно не читает никаких байтов с устройства.
0x01AA
Я не имею в виду удалить его, но, возможно, сделать его чем-то меньшим, чем 300, то есть 20, чтобы проверить, немного ли это улучшает скорость.
Member 10701091
Он работает, если его больше 200