我在.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
答案 0 :(得分:1)
你忘了说出你期望的输入。在收到的数据中查看问号表示未正确设置SerialPort.Encoding属性。它默认为ASCII,任何值在128到255之间的字节都将变成问号。也许你实际上并不想接收字符,也许你需要字节。使用Read()。
问号的另一种解释是设备的串口配置与机器的串口配置不匹配。波特率不匹配会产生乱码数据,如上所述,可能会变成问号。获得奇偶校验不匹配也会产生问号。
最后但并非最不重要的是,您无法使用Sleep()可靠地将线程与串行端口同步。改为使用DataReceived事件。