【发布时间】:2013-02-05 12:51:44
【问题描述】:
让我解释一下场景:给我带来数据(字符串)的串口,如下例:
02051014 0009 M 0 741 30041105 2632 0 30041105
我尝试过各种读取(读取、读取字节、读取字符、读取行、读取现有)。我试图更改new line,但数据一直重复。看看上面的例子,现在看看数据是怎么来的:
0220510114 00009 M 0 741 300441105 2632 0 300411055
有人知道我该如何解决这个问题吗?
代码:
[...]
try
{
this.serialPort = new SerialPort("COM1", 2400, Parity.None, 7, StopBits.One);
this.serialPort.DataReceived += new SerialDataReceivedEventHandler(portaSerial_DataReceived);
this.serialPort.Handshake = Handshake.XOnXOff;
this.serialPort.Encoding = Encoding.ASCII;
this.serialPort.Open();
}
[...]
private void portaSerial_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
var invalidValuesToBreakLine = new int[] { 13, 10, 0 };
int data;
while (this.serialPort.BytesToRead > 0)
{
data = this.serialPort.ReadChar();
if (invalidValuesToBreakLine.Contains(data))
{
if (!this.breakLineWasPerformed)
{
this.breakLineWasPerformed = true;
this.dataList.Add(this.temporaryString);
this.temporaryString = string.Empty;
}
}
else
{
if (this.breakLineWasPerformed)
{
this.breakLineWasPerformed = false;
}
this.temporaryString += (char)data;
}
}
[...]
【问题讨论】:
-
您是否正确设置了波特率、奇偶校验等?可能是连接有问题并尝试重新发送?
-
我没有看到重复的数据。您确实了解串行数据的传输方式吗? 发布您的代码。
-
@Ramhound:请进一步解释一下为什么字符串末尾的双倍
2和双倍5是正常的? -
@ThorstenDittmar - 显然作者得到的值是错误的,它不正常,但它不是重复的数据。出于某种原因,正在重新发送一个字节。我怀疑处理字节读取方式的代码。 由于我高度怀疑您知道答案,所以我会让您回答您自己的问题。我厌倦了在我对自己的投反对票提供反馈后,人们在这个社区中投反对票。
-
@Ramhound:我明白了,我虽然你没有在消息中看到额外的 2 和 5:-D
标签: c# .net serial-port