【问题标题】:c# serial port flushing for small data chunksc# 串行端口刷新小数据块
【发布时间】:2011-06-11 23:39:37
【问题描述】:

我正在使用以下内容编写一个包含两个字节的小字节数组:

int bytes_to_write = 2;
port.Write(byte_buffer, buffer_offset, bytes_to_write);

似乎底层库在将数据写入端口之前正在等待更多数据通过。这是正确的行为吗,我可以强制它立即写入小块吗?一些论坛说使用:

port.BaseStream.Flush(); 

会导致正确的行为,但其他人说这不起作用。我已经进行了几次测试,但它似乎对我不起作用。

干杯, 理查德

【问题讨论】:

    标签: c# serial-port flush


    【解决方案1】:

    这将在没有任何额外帮助的情况下被写入串行端口驱动程序传输缓冲区。不需要冲洗。如果它没有进入设备,那么你可能遇到了握手问题。一个典型的错误是将其设置为 None 而没有将 DtrEnable 和 RtsEnable 属性设置为 true。

    也可能是接线问题,请使用 HyperTerminal 或 Putty 等其他程序解决此问题。最后但同样重要的是:在调试代码时,很难让使用超时的设备保持满意。

    【讨论】:

      【解决方案2】:

      确定数据没有写入端口吗?我已经广泛处理了SerialPort 模块,并且已经很好地写入了单个字节。应该没有必要打电话给Flush()

      在调用port.Write 后使用调试器设置断点并检查port 对象。 BytesToWrite 属性是 > 0 吗?

      编辑:另外,请确保您的 buffer_offset 参数是 0

      【讨论】:

      • 我正在使用 PortMon 观看它,它正在被写出,但还有下一批数据 - 是否有任何设置可以让它等待?
      • 您是说在Write() 之前添加延迟吗?您可以为此使用Thread.Sleep
      • 我正在从数据流中读取数据并将其写入串行端口。端口上的硬件需要 2 个字节并超时。我正在与端口 mon 一起查看发生了什么,似乎下一批数据正在出现。
      • 你能详细说明一下吗?两个字节是否被写入,但硬件以四个字节或更多字节的块显示数据?您可能需要更改波特率,或在每个 Write() 之前添加 Thread.Sleep() 延迟。
      【解决方案3】:

      我有一个非常相似的情况。我尝试在从 c# 到 Arduino 板的串行端口上写入。 我可以写入串行端口,但只有在关闭并打开端口后才能最终发送数据。我尝试了几种设置,可能对你有帮助。 DtrEnable 无疑是最重要的一项。

      port.Handshake = Handshake.None;
      port.Open();
      port.DiscardInBuffer();
      port.DiscardOutBuffer();
      port.DtrEnable = true;                
      

      【讨论】:

      • 你帮帮我。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 2010-11-13
      • 1970-01-01
      • 2011-08-02
      • 2014-01-27
      • 2016-11-25
      相关资源
      最近更新 更多