首页 > 解决方案 > SerialPort.Write 信号量超时期限已过

问题描述

我正在做一个项目,我用 Teensy Arduino 板控制大量 RGB LED 灯条。我已经用一部分板子对其进行了测试,一切似乎都很好,直到我将它们全部连接起来并开始将我的字节数组发送到串行端口。作为基础,我使用 teensy 固件中的 OctoWS2811 库来处理 LED(https://www.pjrc.com/teensy/td_libs_OctoWS2811.html)。并使用 C# 应用程序发送我的字节数组数据。

我一直在测试 2 个 USB 集线器,每个集线器都有 6 个 Teensy 板。另外,一切似乎都正常。但是一旦我连接了两个 USB 集线器。我不断收到信号量超时异常

System.IO.IOException: The semaphore timeout period has expired.
    at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
    at System.IO.Ports.SerialStream.EndWrite(IAsyncResult asyncResult)
    at System.IO.Ports.SerialStream.Write(Byte[] array, Int32 offset, Int32 count, Int32 timeout)
    at System.IO.Ports.SerialPort.Write(Byte[] buffer, Int32 offset, Int32 count)

乍一看,在它开始向几个 Teensy 抛出这些信号量异常之后,我似乎能够成功发送几个帧。

关于我可以尝试防止这种情况的任何建议。

似乎减少发送到 Teensy 的字节数组的大小可以提高可靠性,但是,但不是很多。所以这只能是巧合。

看起来确实有几帧确实设法发送了,但不久之后一切都开始分崩离析。

预先感谢您的帮助。

亲切的问候

标签: c#arduinoserial-portsemaphoreteensy

解决方案


推荐阅读