使用SerialPort.ReadExisting()从串行端口接收无效数据

时间:2010-01-15 09:25:58

标签: vb.net windows-mobile bluetooth

我在.NET中编写了一个程序,用于侦听特定的串行端口并处理正在接收的数据。我使用serialport控件编写了一个测试程序,我的程序运行正常。 当我使用原始设备在 Windows Mobile 中运行我们的程序时,收到的数据是乱码。与PC连接时,相同的设备产生了所需的输出。

在移动设备中,我将设备与蓝牙连接 我记下下面的乱码:"?09?D0??6D?
我使用了以下代码:

 Dim WithEvents port1 As SerialPort = _
  New SerialPort("Com2", 19200, Parity.Even, 7, StopBits.One)

 port1.Open()
        port1.Open()
        strcmd="09RD00000123"
        port1.Write(strcmd, 0, strcmd.Length)
        System.Threading.Thread.Sleep(70)
        strReadSegment0 = port1.ReadExisting

1 个答案:

答案 0 :(得分:1)

你忘了说出你期望的输入。在收到的数据中查看问号表示未正确设置SerialPort.Encoding属性。它默认为ASCII,任何值在128到255之间的字节都将变成问号。也许你实际上并不想接收字符,也许你需要字节。使用Read()。

问号的另一种解释是设备的串口配置与机器的串口配置不匹配。波特率不匹配会产生乱码数据,如上所述,可能会变成问号。获得奇偶校验不匹配也会产生问号。

最后但并非最不重要的是,您无法使用Sleep()可靠地将线程与串行端口同步。改为使用DataReceived事件。