串行端口数据丢失 - C#

2024-02-21

我正在开发一个串行端口应用程序,其中一个非常简单的部分给我带来了问题。我只是想从端口读取恒定的数据流,并将其写入二进制文件。问题似乎是速度:我的代码在我的 9600 波特率测试设备上运行良好,但是当转移到115200bps 的实时设备,我似乎正在丢失数据。发生的情况是,经过一段可变的时间后,我丢失了 1 个字节,导致其余数据丢失。我尝试过一些事情:

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    bwLogger.Write((byte)serialPort1.ReadByte());
}

or

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    byte[] inc = new byte[serialPort1.BytesToRead];
    serialPort1.Read(inc, 0, inc.Length);

    bwLogger.Write(inc);
}

和一些变化。我无法使用 ReadLine(),因为我正在处理恒定的数据流(对吗?)。我尝试调整缓冲区大小(serialPort1.ReadBufferSize 和硬件 FIFO 缓冲区)。理想情况下,出于可用性目的,我会在软件方面处理此问题,而不是让用户必须更改 Windows 驱动程序设置。

有任何想法吗?


如果问题似乎是您无法足够快地处理数据,您可以尝试对数据进行双缓冲。

1) 允许一个线程将串口读入一个缓冲区。这可能涉及将数据从端口复制到缓冲区(我对 .NET 不太熟悉)。

2)当您准备好处理传入数据时,(在不同的线程上)让您的程序读入第二个缓冲区,当发生这种情况时,您应该将第一个缓冲区写入磁盘。

3)当第一个缓冲区写入磁盘时,将其交换回串口缓冲区,并将第二个缓冲区写入磁盘。重复该过程,不断交换缓冲区。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

串行端口数据丢失 - C# 的相关文章

随机推荐

  • 最终瞬态字段的序列化/反序列化

    In this https stackoverflow com questions 2968876 final transient fields and serialization问题说final transient序列化后字段不能设置为任
  • 检测数组中作为复杂多边形顶点的一组点是否按顺时针或逆时针顺序定义?

    编辑 我更新了program http colekito com ProgrammingProjects Science 20Fair 有了答案 效果很好 我正在做一个program http colekito com Programmin
  • 如何让 SQLAlchemy 覆盖 MySQL“更新 CURRENT_TIMESTAMP”

    我继承了一个较旧的数据库 该数据库设置为 更新时 CURRENT TIMESTAMP 该字段放在一个仅应该描述项目创建的字段上 使用 PHP 我一直在 UPDATE 子句上使用 timestamp timestamp 但在 SQLAlche
  • C++ system() 函数 — 如何收集发出的命令的输出?

    我正在使用 C 运行一些命令system 功能 int system const char command 如何从发出的命令中收集标准输出 具体来说 我想收集发出的命令的输出 例如 发出命令的输出的目录列表 dir命令 您是否正在寻找执行命
  • 测量 ASP.NET Core 中异步代码与同步代码的性能

    我正在尝试使用 SQL Server Express 和 EF Core 3 1 3 来衡量 ASP NET Core 3 1 中异步与同步的性能 并且有两个完全相同的函数 除了一个是异步的 一个是同步的 HttpGet search de
  • 我们如何根据索引更新dynamodb表(而不是基于主键和范围键)

    我们如何基于索引 而不是基于主键和范围键 更新dynamodb表 我有一个按名称创建的索引key id index哈希值是asset id范围是hit id 我想根据以下内容更新表格key id index因为我在更新时不知道这些 var
  • 我获得了客户端中间件,但如何保护 S3 上的用户资源?

    我得到了客户端中间件 但我不希望出现用户意外或恶意删除其他用户的资源的情况 如何保护 S3 上的资源 以便用户只能删除自己的资源 而不能删除任何其他用户的资源 非常感谢 我不希望出现用户意外或恶意删除其他用户资源的情况 当您设置 S3 存储
  • Webpack hmr:__webpack_hmr 404 未找到

    我正在使用 webpack dev server 进行热模块替换 它工作得很好 但是这个错误每隔几秒钟就会出现在控制台中 GET http mysite 8080 webpack hmr 404 Not Found 这是我的 webpack
  • JSON Patch 规范的解释

    我有一个关于 JSON Patch 的解释的问题 RFC 6902 https www rfc editor org rfc rfc6902 假设我有一个如下所示的资源 type assembly uri http example com
  • useMemo 与 useEffect + useState

    使用有什么好处吗useMemo 例如 对于密集的函数调用 而不是使用组合useEffect and useState 这里有两个定制的钩子 乍一看它们的工作原理完全相同 此外useMemo的返回值为null在第一次渲染时 useEffect
  • 简单就地离散傅立叶变换 (DFT)

    我正在编写一个非常简单的就地 DFT 我正在使用此处显示的公式 http en wikipedia org wiki Discrete Fourier transform Definition http en wikipedia org w
  • 如何配置 IPython 以与普通 Python REPL 相同的方式执行单元块?

    普通 Python REPL gt gt gt na na gt gt gt for i in range 4 f else batman nana nananana nananananananana nananananananananan
  • 追踪在页面加载时应用内联样式的 JavaScript

    我正在管理一个 DNN 网站 并试图找到应用于主页上某些元素的 width 100 内联样式的来源 DNN 中包含一大堆难以手动解析的 JS 库 但我打开了 Chrome 开发者工具 并在 源 选项卡中搜索了页面上加载的每个 JS 文件 以
  • 将内联样式动画恢复到初始状态

    我已经实现了一个 CSS 解决方案来为与内联设置的样式设置动画CSS Tricks 的指导 https css tricks com animate to an inline style 还用过SO的帮助 https stackoverfl
  • SQL Server 相当于 ORACLE INSTR

    我想知道在 SQL Server 中是否有相当于 Oracle 的INSTR功能 我知道有CHARINDEX and PATINDEX 但在 Oracle 版本中 我还可以指定我要查找的字符的第 N 次出现 Oracle INSTR ins
  • JUnit 中的注释列表

    最近在学习并实现JUnit框架 因此 我知道 JUnit 中使用的注释很少 Test Before After Ignore BeforeClass AfterClass Runwith Suite class SuiteClasses P
  • 如何删除多个 UTF-8 BOM 序列

    使用 PHP5 cgi 从文件系统输出模板文件 但在输出原始 HTML 时遇到问题 private function fetch name path this gt j gt config template path name html i
  • 在 Rails 应用程序的 Haml 视图中使用 AngularJS

    我有一个带有 Haml 视图的 Rails 应用程序 现在我想将 AngularJS 添加到应用程序的某些部分 但问题是 Haml 视图是在服务器端渲染的 而 AngularJS 代码不起作用 因为它是在客户端渲染的 假设我的 index
  • 如何以编程方式在android中打开短信窗口?

    在我的应用程序中 我想以编程方式为我的应用程序打开 Android SMS 创建窗口 怎么做 这可能有帮助 也可能没有帮助 LAUNCH SMS EVENT HANDLER final Button buttonLaunchSMS Butt
  • 串行端口数据丢失 - C#

    我正在开发一个串行端口应用程序 其中一个非常简单的部分给我带来了问题 我只是想从端口读取恒定的数据流 并将其写入二进制文件 问题似乎是速度 我的代码在我的 9600 波特率测试设备上运行良好 但是当转移到115200bps 的实时设备 我似