【问题标题】:How to set the ReadBufferSize on .NET serial port如何在 .NET 串口上设置 ReadBufferSize
【发布时间】:2015-12-17 00:11:23
【问题描述】:

所以,我正在创建一个侦听串行端口的 VB.NET 程序。我正在使用这个

Dim WithEvents ptr_SerialPort As System.IO.Ports.SerialPort
...
 ptr_SerialPort = My.Computer.Ports.OpenSerialPort(serialportname, baudrate,parity, databits, stopbits)

在我意识到我超出了我的 SerialPort.ReadBufferSize 属性(即 4096)并丢失了数据之前,它工作得很好:

https://msdn.microsoft.com/en-us/library/system.io.ports.serialport.readbuffersize(v=vs.110).aspx

所以我尝试如下增加缓冲区的大小

ptr_SerialPort = My.Computer.Ports.OpenSerialPort(serialportname, baudrate, parity, databits, stopbits)
ptr_SerialPort.ReadBufferSize = 2000000

但我收到错误“无法在打开时设置缓冲区大小”。这是合理的,所以我尝试了这个:

ptr_SerialPort = New System.IO.Ports.SerialPort(serialportname, baudrate, parity, databits, stopbits)
ptr_SerialPort.ReadBufferSize = 2000000
ptr_SerialPort.Open()

嗯,这会导致一个不接收数据的串行端口...我猜 My.Computer.Ports.OpenSerialPort 所做的不仅仅是实例化它,而我上面所拥有的是一个串行端口对象,它不是连接到我的硬件。所以,我的问题是...如何在我的 PC 上打开一个串行端口,指定 ReadBufferSize 属性??

非常感谢!

【问题讨论】:

  • 更环保的选择是不要全部更改,而是让您的程序一次处理块而不是一个大缓冲区
  • 我觉得“环保”很有趣......但是我只实现了一个事件处理程序,没有那种控制,至少在方法上没有大的改变。我也无法控制发件人(此时),无法分块工作。所以首先我想增加我的缓冲区大小。我应该可以的。
  • 串行通信与 UART 一起工作,并以适当的流控制在块中发送数据,无论是 c# 还是 c++;视窗; DOS 或 good-ol' Dragon 64 计算机。无需修改发件人即可使用块。
  • 也尝试将其增加一个更合理的数量 2000000 有点过分。尝试 1028 的倍数
  • 我正在寻找的是几行代码来设置 ReadBufferSize,仅此而已。

标签: c# vb.net serial-port


【解决方案1】:

嗯,奇怪

ptr_SerialPort = New System.IO.Ports.SerialPort(serialportname, baudrate, parity, databits, stopbits)
ptr_SerialPort.ReadBufferSize = 2000000
ptr_SerialPort.Open()

现在正在工作......所以这就是这样做的方式。一定是另一端的一些间歇性问题愚弄了我。感谢您的回答,抱歉耽误您的时间。

【讨论】:

  • 显然你还没有找到真正的原因,这不是一个答案。设置 Handshake 属性很少是可选的,请使用 RequestToSend。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2019-08-15
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 2021-04-24
  • 1970-01-01
相关资源
最近更新 更多