.net 3.5 -在c#中使用COM端口,不能接收所有发送的数据

本文关键字:不能 数据 端口 COM net | 更新日期: 2023-09-27 18:02:06

只是为了解释,我有一个开发板,在命令下,射击4个字符(字节)。我用来调试的终端程序(RealTerm)看到了所有4个字节。我现在开始编写桌面软件,我的程序只关注发送的4个字节中的1个。为了澄清,我不知道4个字节中的哪一个(第一个,最后一个,中间两个),但我可以找出它是否真的有必要。

起初我以为是SerialPort。DataReceived事件将为接收到的每个字节触发。这不是真的,我不知道是什么原因导致它着火,但它不是接收到一个字节。

所以我尝试在SerialPort上循环。BytesToRead,但这也只获得第一个字节,即使它识别有3个字节读取(为什么不是4??)

在它到达端口的确切时间接收此数据对我来说不是必要的,但显然我不想丢失3/4的数据。然而,它并不总是4字节,这就是它现在所做的。我只想得到所有准备好要读的字节

事件处理程序:

private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            while (comPort.BytesToRead > 0)
            {
                RxString = comPort.ReadExisting();
                RxByte = comPort.ReadByte(); 
                byte[] myByte = new byte[6];
                for (int i = 0; i < 6; i++)
                {
                    myByte[i] = 0000000;
                }
                comPort.Read(myByte, 0, comPort.BytesToRead);
                for (int i=0;i<6;i++)
                {
                    if (myByte[i] != null)
                    {
                        thisBytes.Add(myByte[i]);
                    }
                }
                RxString = RxByte + "";
                try
                {
                    this.Invoke(new EventHandler(dealWithByte));
                }
                catch
                {
                }
            }
        }

private void dealWithByte(object sender, EventArgs e)
        {
            foreach (byte item in thisBytes)
            {
                RxByte = Convert.ToInt16(item);
                string binary = Convert.ToString(RxByte, 2).PadLeft(8, '0');
                //processTime(binary);
            }
      }

.net 3.5 -在c#中使用COM端口,不能接收所有发送的数据

我不是c#的人,但代码很简单,伪代码

    numBytes As Int = SerialPort1.BytesToRead 'get # of bytes available
    buf(numBytes - 1) As Byte 'allocate a buffer
    br As Int = SerialPort1.Read(buf, 0, numBytes) 'read the bytes
    If br <> numBytes {
        Resize(buf, br) 'resize the buffer
    }
此时

将字节存储到一个列表中。然后可以为消息处理此列表。