Получение неверных данных из последовательного порта с использованием SerialPort.ReadExisting () - PullRequest
0 голосов
/ 16 января 2010

Недавно мы подключили одно устройство Bluetooth, которое получает данные от нашего последовательного устройства. Устройство bluetooth далее передает эти данные в Windows Mobile, который поддерживает Bluetooth. Скорость передачи всей системы составляет 19200 с 7 битами данных и 1 стоповым битом. Когда мы отправляем команду на последовательное устройство через устройство Bluetooth, она принимает команду и отвечает соответственно. но некоторые данные байта строки обозначаются как вопросительный знак (?).

Но если мы подключаем последовательное устройство напрямую к ПК, полученная строка верна.

Код программы vb.net, которую я запускаю в Windows Mobile, приведен ниже:

Imports System
Imports System.IO.Ports
Imports System.Windows.Forms.TextBox

Public Class frmSelectComPort


Dim WithEvent port1 as serialport = _
New SerialPort(“Com2”,19200,Parity.Even, 7, StopBits.One)

 Private Sub MnuConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MnuConnect.Click

    If port1.IsOpen Then
        port1.Close()
    End If
    port1.DtrEnable = True
    port1.RtsEnable = True
    port1.ReceivedBytesThreshold = 1
    port1.Open()

    Dim str1,strcmd,strReadSegment0 As String
    Str1="09RD000001"
    strchksum=23
    strcmd = New String(Chr(2) + str1 + Chr(3) + strchksum) + Chr(0)
    Delay(5000)
    port1.Write(strcmd, 0, strcmd.Length)
    System.Threading.Thread.Sleep(70)
    Delay(2000)
    strReadSegment0 = port1.ReadExisting
   ‘here I receive the following string "?09?D03?A D?

End Sub


Private Sub Delay(ByVal num As Double)
    Dim i As Double
    For i = 0 To num
    Next
End Sub

End Class

Команде, данной последовательному порту, является "09RD000001 23

Ответ от последовательного порта: «? 09? D03? A D?

Но я ожидаю следующий вход от последовательного порта: "09RD033A DA

Просьба предоставить решение как можно скорее

1 Ответ

0 голосов
/ 16 января 2010

Вы пробовали 8 бит данных, без проверки четности, 1 стоповый бит? Пока оба конца установлены одинаково ...

? может указывать, что кодировка должна быть установлена.

Dim myEnc As Encoding = Encoding.GetEncoding("Windows-1252")
port1.encoding=myEnc
...