C# c语言中的额外和错误串行接收数据#
我无法从串行端口接收数据。每次将发送12个字节,我想读取每个字节并将其放入数组中,然后在richtextbox中显示它们(每个字节将显示在单独的一行中)。但有一个问题:当数据连续发送时,我会得到一些额外的0,这些0根本不相关,并且在终端程序中我不会接收到。 这是我的密码,如果你能帮助我,我将不胜感激C# c语言中的额外和错误串行接收数据#,c#,serial-port,C#,Serial Port,我无法从串行端口接收数据。每次将发送12个字节,我想读取每个字节并将其放入数组中,然后在richtextbox中显示它们(每个字节将显示在单独的一行中)。但有一个问题:当数据连续发送时,我会得到一些额外的0,这些0根本不相关,并且在终端程序中我不会接收到。 这是我的密码,如果你能帮助我,我将不胜感激 private void data_received(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) {
private void data_received(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
richTextBox1.Invoke(new EventHandler(ReadFromPort));
}
private void ReadFromPort(object sender, EventArgs e)
{
int bytes = 0;
label2.Text = "";
bytes = serialPort1.BytesToRead;
label2.Text = bytes.ToString();
byte[] buffer = new byte[12];
for (int k = 0; k < bytes; k++)
{
buffer[k] = 0;
}
serialPort1.Read(buffer, 0, bytes);
for (int i = 0; i < buffer.Length ; i++)
{
richTextBox1.AppendText(buffer[i].ToString() + Environment.NewLine);
}
private void data\u已接收(对象发送方,System.IO.Ports.SerialDataReceivedEventArgs e)
{
调用(新的EventHandler(ReadFromPort));
}
私有void ReadFromPort(对象发送方,事件参数e)
{
int字节=0;
标签2.Text=“”;
bytes=serialPort1.BytesToRead;
label2.Text=bytes.ToString();
字节[]缓冲区=新字节[12];
for(int k=0;k
}您正在将N个字节读入缓冲区,但无论读入多少字节,都会显示整个缓冲区。有时候你不能得到12个字节,但是更少。但您仍然显示所有12个 将(int i=0;i
更改为(int i=0;i
当您使用SerialPort.Read时,显然:
如果计数大于输入缓冲区中的字节数,则读取的字节数将减少
返回值指示实际从端口读取的数据量。然后仅显示阵列中的字节数:
int bytesRead = serialPort1.Read(buffer, 0, bytes);
for (int i = 0; i < bytesRead; i++)
{ … }
int bytesRead=serialPort1.Read(缓冲区,0,字节);
for(int i=0;i
buffer.Length
在创建数组时设置为12
,而不是新字节。另外,newbyte[]
返回一个归零的数组,您不需要将值设置为零。此外,将值设置为零也没有意义,因为您将在下一行中覆盖它们。serialPort1.Read将返回实际读取的字节数,可能小于12。您的代码似乎假定它总是返回12字节是的,没错,因为我确信总是发送12字节。终端程序也证实了这一点。现在的问题是,为什么有时我会得到不应该存在的零。@srt终端可能发送12个字节,但您正在读取一个缓冲区-缓冲区可以包含任意数量的字节。@PhillipH对于终端,我指的是另一个用于发送和接收的程序。数据是从另一台设备发送的,我用这个终端程序测试了接收,一切都很好。现在我比较终端程序和我的程序的输出。