gpt4 book ai didi

C# .Net Serial DataReceived 事件响应对于高速数据来说太慢

转载 作者:太空狗 更新时间:2023-10-29 21:11:05 28 4
gpt4 key购买 nike

我在 VS2008 express 中设置了一个 SerialDataReceivedEventHandler,其中包含一个基于表单的程序。我的串口设置如下:

115200, 8N1

启用 Dtr 和 Rts

ReceivedBytesThreshold = 1

我有一个设备,我正在通过蓝牙、USB 转串行连接。 super 终端以任何数据速率都能很好地接收数据。数据以 22 字节长的数据包定期发送。该设备具有可调节的数据发送速率。在 10-20Hz 的低数据速率下,下面的代码运行良好,没有问题。但是,当我将数据速率提高到 25Hz 以上时,一个调用开始接收多个数据包。我的意思是每个传入数据包都应该有一个事件触发器。对于更高的输出速率,我在调用事件时立即测试了缓冲区大小(BytesToRead 命令),然后缓冲区中有多个数据包。我认为事件触发缓慢,当它到达代码时,更多的数据包已经到达缓冲区。我做的一项测试是查看每秒触发事件的次数。在 10Hz 时,我得到 10 个事件触发器,太棒了。在 100Hz,我得到大约 40 个事件触发器,不太好。我的数据速率目标是 100Hz 是可以接受的,200Hz 是首选,300Hz 是最佳的。这应该有效,因为即使在 300Hz,也只有 52800bps,不到设置的 115200 波特率的一半。我有什么要注意的吗?

    public Form1()
{
InitializeComponent();
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
}


private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
this.Invoke(new EventHandler(Display_Results));
}


private void Display_Results(object s, EventArgs e)
{
serialPort1.Read(IMU, 0, serial_Port1.BytesToRead);
}

最佳答案

您是否尝试调整 USB 串行转换器的时间延迟?我在使用 FTDI USB 转串口转换器时遇到了同样的问题。我使用示波器查看来自设备的 IN 和 OUT 数据,我可以看到计算机总是响应缓慢。默认情况下,设备上的时间延迟设置为 16 毫秒。我将其更改为 2 毫秒,这有很大的不同。转到设备管理器中的 USB 串行转换器,然后在高级设置中,将延迟时间更改为 2 毫秒。它应该有效。试试吧。

关于C# .Net Serial DataReceived 事件响应对于高速数据来说太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2947813/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com