Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c语言中的额外和错误串行接收数据#_C#_Serial Port - Fatal编程技术网

C# c语言中的额外和错误串行接收数据#

C# c语言中的额外和错误串行接收数据#,c#,serial-port,C#,Serial Port,我无法从串行端口接收数据。每次将发送12个字节,我想读取每个字节并将其放入数组中,然后在richtextbox中显示它们(每个字节将显示在单独的一行中)。但有一个问题:当数据连续发送时,我会得到一些额外的0,这些0根本不相关,并且在终端程序中我不会接收到。 这是我的密码,如果你能帮助我,我将不胜感激 private void data_received(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) {

我无法从串行端口接收数据。每次将发送12个字节,我想读取每个字节并将其放入数组中,然后在richtextbox中显示它们(每个字节将显示在单独的一行中)。但有一个问题:当数据连续发送时,我会得到一些额外的0,这些0根本不相关,并且在终端程序中我不会接收到。 这是我的密码,如果你能帮助我,我将不胜感激

 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对于终端,我指的是另一个用于发送和接收的程序。数据是从另一台设备发送的,我用这个终端程序测试了接收,一切都很好。现在我比较终端程序和我的程序的输出。