这是一个奇怪的我无法弄清楚。我真的很感激任何人的任何输入。
我正在尝试从arduino接收温度数据,通过XBEE无线网卡连接到我的PC。接收XBEE直接连接到PC上的COM8串行端口。我有一个非常简单的C#程序,它使用串口类接收数据。首先,它从串口读取一个字符
*private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
//RxString = serialPort1.ReadExisting();
RxRead = serialPort1.ReadChar();
//RxRead = 0x13;
this.Invoke(new EventHandler(DisplayText));
}*
(忽略注释掉的位。它们是其他实验!)。然后,使用RxRead int将我写入的数据传输到一个简单的Web表单上。
private void DisplayText(object sender, EventArgs e)
{
RxString = RxRead.ToString();
textBox1.AppendText(RxString);
textBox1.AppendText(", ");
}
它在网络表单上打印出来。
126,0,125,51,63,0,125,51,63,0,64,63,63,82,63,63,1,49,57,46,48,48,13,10 ,63,
除了上面的125,51流中的两个实例是不正确的。它们应该是十进制19,十六进制13.我知道是这种情况,因为协议定义很好,我可以使用XCTU程序看到来自XBEE的十六进制数据,(见下文)
接收数据包
7E 00 13 90 00 13 A2 00 40 A6 90 52 90 9A 01 31 39 2E 31 32 0D 0A B5
- Start delimiter: 7E
- Length: 00 13 (19)
- Frame type: 90 (Receive Packet)
- 64-bit source address: 00 13 A2 00 40 A6 90 52
- 16-bit source address: 90 9A
- Receive options: 01
- Received data: 31 39 2E 31 32 0D 0A
- Checksum: B5
任何人都可以想到为什么这个程序应该非常高兴地拾取每一个字节,但是每次遇到十六进制13时都会出现异议? (哦,我尝试使用readbyte而不是readchar,它给了我同样的东西。
非常感谢任何想法。
答案 0 :(得分:1)
确保在初始化串行端口时关闭XOn / Xoff流量控制。 0x13对应于XOFF,即“暂停传输”,它将从您收到的流中删除。我对之后发生的事情没有准确的解释,但是如果启用了XOn / Xoff,那么你要做的第一件事就是禁用它。
答案 1 :(得分:1)
我认为您应该使用ReadByte()
而不是ReadChar()
,因为您正在阅读二进制数据。如果切换到该方法,它是否开始打印正确的值?
其他信息:
您是否以8位模式打开串口?