使用c#从串口部分接收消息

2023-12-01

我使用下面的代码使用 C# 接收来自串行端口的消息

    void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        if (comPort.IsOpen == true)
        {
            string msg = comPort.ReadExisting();
            MessageBox.Show(msg.Trim());
        }
    }

问题是,我正在部分地收到消息。就像,如果你发送“你好,你好吗” 我逐字逐句地收到它。我希望一次性完成。我能怎么做 ??

另外,是否可以检索应用程序发送和接收消息的端口名称?


到目前为止,通过串行端口一次性传输固定量数据的最简单方法是在数据前面添加长度标头。使用固定数量的字节作为长度(2-4 就足够了),然后读取length使用同步数据字节Read方法。当然,您也可以异步执行此操作,只需将长度保存在某个成员字段中,并在达到长度后立即执行后处理。

次佳方法是附加停止字符或单词。如果恰好是换行符,那么可以使用同步串行端口.ReadLine方法。否则,将接收到的数据收集在StringBuilder,继续附加到StringBuilder直到您到达停止字符,然后返回该字符的内容StringBuilder直到(但不包括)停止字符。

如果你无法控制源数据,需要读取固定量的数据,and如果事先不知道这个尺寸是多少,那么你的工作将会变得更加困难。我认为真正处理这种情况的唯一方法是等待预定的超时,此时如果您没有收到任何新数据,则假设传输已结束。它不是特别可靠,这就是为什么大多数通信协议都使用上述设计之一的原因。

如果您考虑一下串行端口(或任何端口)的工作方式,只需通过电线推送位,那么很明显,如果无法预测未来,就无法知道传输是否已完成。如果您连接到远程主机(即通过调制解调器),并且该主机在传输完成后断开连接,那么您也许可以使用载波检测,但听起来并非如此。

希望这不是您当前所处的情况,并且您有一定的能力来控制源数据,或者您要连接的设备已经使用长度标头和/或停止模式。如果是的话,一定要使用它。否则,您可能会因使用超时而陷入困境。

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

使用c#从串口部分接收消息 的相关文章

  • 创建文件并使用内存流保存到其中

    如何创建文件并使用内存流写入文件 我需要使用内存流来防止其他线程尝试访问该文件 我试图保存到文件的数据是 html 如何才能做到这一点 假设您的意思是如何将文件的内容复制到内存流 如果您使用的是框架4 var memoryStream ne
  • 进入嵌入式[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 c11 标准和 clang 来使用 strcpy_s

    我正在运行 OS X Sierra 并尝试编译一个使用的 c 程序strcpy s 但是我安装的 clang 编译器使用的是 c99 标准 但是据我读到的 https embeddedgurus com barr code 2017 08
  • 使用 R.Net 版本 1.5.5 创建 REngine 实例

    我正在尝试创建一个 Hello World 示例R Language using R Net版本1 5 5 从 NuGet 加载 不幸的是 我见过的在线示例都不起作用 这就是我所做的 已安装Microsoft R Open 3 2 4 增强
  • 缓存友好的矩阵移位功能

    我想将二维方阵的第一行移到最后一行 所以如果我有一个像A这样的矩阵 我想要得到B 我可以使用两个简单的 for 循环来做到这一点 例如 void shift int M int N int A M N int i j temp for i
  • 有没有办法使用 ews c# 确定电子邮件是否是回复/响应?

    我正在编写一个支持系统 这是我第一次使用 EWS 到目前为止 我已经相当成功了 我可以提取我需要的信息 发送电子邮件 一切正常 我确实有点头疼 有没有办法判断电子邮件是否实际上是回复 该应用程序的基本思想是有人发送电子邮件 我们回复并给他们
  • ASP.NET MVC 数据注释属性 Range 从另一个属性值设置

    您好 我的 Asp net MVc 模型中有以下内容 测试模型 cs public class TestModel public double OpeningAmount get set Required ErrorMessage Requ
  • Image.FromStream() 方法返回 Invalid Argument 异常

    我正在从智能相机成像器捕获图像 并通过套接字编程从相机接收字节数组 NET 应用程序是客户端 相机是服务器 问题是我在运行时收到 System InvalidArgument 异常 private Image byteArrayToImag
  • 使用 C# 启动 Outlook

    我可以让 C 在代码中启动 Outlook 吗 在 VB6 中 我们使用对象 Outlook Application 并编写 Set oOutlook CreateObject Outlook Application Set oNameSp
  • std::string substr 方法问题

    你好 我正在写这个方法 我希望它从给定缓冲区中提取给定位置的一部分 我有一个像这样的字符串something one something two我想要得到 一个 这是我的想法 static std string Utils getHeade
  • 如何转换 UTF-8 <-> UTF16 可移植

    有没有一种简单 可移植的方法 至少是 win32 linux 将 UTF 16 转换为 UTF 8 并返回 最好使用升压 谢谢你的帮助 托比亚斯 Both libiconv http www gnu org software libicon
  • 不使用 DAO 压缩 Microsoft Access 数据库

    我用CDatabase类开一个ACCDB访问数据库 司机是 T Microsoft Access Driver mdb accdb 我可以打开并使用数据库 已经这样做很多年了 if DatabaseExist m strMDBPath AJ
  • 使用 itextSharp 5.3.3 对 Pdf 文档进行数字签名和验证

    我正在尝试使用 iTextSharp 5 3 3 在服务器 c 上进行数字签名和验证 pdf 文档 我使用 DigiSign 在线工具 生成了 Pfx 文件 然后使用 Windows 生成证书 cer 文件
  • ASP Net Core 属性路由和双正斜杠

    正如所指出的here https stackoverflow com a 20524044 3129340 URL 中包含双斜杠是有效的 我有一个使用属性路由的 ASP Net Core 项目 一个名为GroupController用于处理
  • 在 Windows 上构建 MLT 框架时出错

    我一直在遵循官方提供的构建指南here http www mltframework org bin view MLT WindowsBuild 我需要 MLT 来创建视频播放器 并且我选择仅安装前 4 个库 如指南中所述 FFmpeg SD
  • 使用 System.Windows.Forms.Timer.Start()/Stop() 与 Enabled = true/false

    假设我们在 Net 应用程序中使用 System Windows Forms Timer 在计时器上使用 Start 和 Stop 方法与使用 Enabled 属性之间有什么有意义的区别吗 例如 如果我们希望在进行某些处理时暂停计时器 我们
  • nVidia 和 ATI 之间的 OpenGL 渲染差异

    最近 我将 ATI 驱动程序 我使用的是 HD7970 更新为最新版本 但我的 OpenGL 项目的一些对象停止工作 更重要的是 他们适用于 nVidia 最新驱动程序 在 960m 上测试 ATI 和 nVidia 渲染管道之间有什么我应
  • TransactionScope 在某些机器上自动升级到 MSDTC?

    在我们的项目中 我们使用 TransactionScope 来确保我们的数据访问层在事务中执行其操作 我们的目标是not要求在我们的最终用户的计算机上启用 MSDTC 服务 问题是 在我们一半的开发人员机器上 我们可以在禁用 MSDTC 的
  • C# p/Invoke 如何使用 DirectX 游戏的 SendInput 模拟 keyPRESS 事件

    我经常为各种机器人或其他 GUI 自动化程序模拟键盘按下事件而苦苦挣扎 我已经成功地使用以下方法模拟按键事件 INPUT kInput new INPUT 1 kInput j type SendInputEventType InputKe
  • 从 C# 应用程序调用 ASP.net Web 服务

    我有个问题 我如何调用 Web 服务并从 C 桌面应用程序获取结果 我正在制作一个桌面应用程序 我希望它能够连接到我的在线 ASP net Web 服务 这怎么可能 在 解决方案资源管理器 中 右键单击项目节点并选择 添加 Service参

随机推荐

  • h264 idea 比特流是如何组织的? / 标头起始码

    我试图通过使用十六进制编辑器查看视频文件的比特流来了解一些有关 h264 的知识 我发现here视频对象平面 0x000001b6 和 i 帧 0x000001b600 的起始码 但我在视频文件中找不到很多这样的字节 大多数情况下 这些起始
  • 使用 Android Studio 构建未签名的 APK 文件

    我正在使用 Android 开发者工具开发 Android 应用程序 现在我尝试了新的Android Studio 如果将我的智能手机与PC连接并直接在Android Studio中运行程序 一切正常 但现在我想用其他智能手机测试该程序 而
  • 用于动态 HTML 表生成的 Javascript 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我一直在寻找一个不错的 javascript 库来动态创建 html 表 有相当多的 javascript 工具可以 美化 和 功能化 现有的表格 这只是我所追求的部分目的 我正在寻
  • 使用 OpenTK 在 C# 中绘制图形 (x = y)?

    如何使用 OpenTK 在 C 中绘制简单的图形 x y 在 Windws 表单应用程序和控制台应用程序中 使用什么方法来绘制该图 我是这个工具的新手 所以一个好的链接或教程会对我有很大帮助 你应该从15 分钟内学习 OpenTK 对于简单
  • 从带有专辑封面的 ffmpeg 进行管道传输时,mp3 中的元数据不起作用

    在我的程序中 我将 webm 从流传输到 ffmpeg 然后将输出传输到 http 请求 该过程的一部分是添加 mp3 的元数据 到目前为止 这效果很好 然而 在添加图像作为专辑封面后 它开始表现出意想不到的效果 首先 这是我在程序中使用的
  • 我应该使用多个正则表达式属性吗

    更新8 该问题有一个新标题 希望它能帮助其他人避免耗时的错误 我有以下代码 您需要引用 System ComponentModel DataAnnotations using System using System Collections
  • 带有 expss 包的复杂表

    你好 所有的 expss 专家 Gregory Demin 如果你读过这条消息 在发现这个包几天后 我取得了不错的成绩 但在使用 tab 系列函数创建复杂的交叉表时仍然有点困难 尤其是创建组合具有显着性检验 让我们从参考手册中给出的示例开始
  • 索引到数组字典时出现无法识别的选择器错误

    我有一个数组字典导致 NSCFDictionary objectAtIndex errors 有人能告诉我为什么吗 字典显然在错误发生时至少有 1 个数组 NSError error responseString NSString allo
  • jQuery 插件公共方法/函数

    我正在尝试实现类似以下的目标 但不知道出了什么问题 a function some logic here function abc id alert test id a abc 1 我尝试使用返回函数 但这似乎也不起作用 有人可以帮忙吗 感
  • Python 中的简单 URL GET/POST 函数

    我似乎无法谷歌它 但我想要一个执行此操作的函数 接受 3 个参数 或更多 无论如何 URL 参数字典 发布或获取 返回结果和响应代码 有一个片段可以做到这一点吗 requests https github com kennethreitz
  • 前往时间对比

    我正在尝试创建简单的函数 只是为了将一个时间的时区更改为另一个时间 假设 UTC 为 0700 WIB Here是源代码 我有两个功能 首先GenerateWIB这只会将您的时区更改为具有相同日期时间的 0700 WIB 其次是Genera
  • Postgres bytea 列返回字符串(字符数组)而不是字节数组

    我一直在使用 C 为我们的产品针对不同数据库编写具体的提供程序实现 无需深入了解细节 其中一列是字节数组类型 postgres 中的 bytea 由于优先选择 bytea 而不是 blob 唯一的问题是它返回的值与插入的值不同 当我插入 I
  • Logistics_sgd模块,在哪里可以找到它?

    正在做深度学习教程 但我的 python 找不到该模块 from logistic sgd import LogisticRegression load data ImportError No module named logistic s
  • 包括 *.so 库 Android Studio tess-two (tesseract)

    我今天一直在尝试将 Tesseract 库包含到我的 Android 项目中 根据我的发现 我做了以下事情 1 从google git下载tess two 2 使用NDK构建 3 将 so 文件 armeabi v7 x86 mips 放入
  • spring带有responsebody的prefixjson

    当控制器方法返回是 responsebody 时 即使我把
  • 在 Step Functions 中创建任务时使用整数而不是字符串

    如何使用整数输入类型而不是字符串创建任务 例如说我想启动状态机 SomeStage Comment Getting busy with Foo Bar Type Task Resource arn aws states states sta
  • Windows Server 2008 是否支持 Office 2003 互操作?

    我尝试在 Windows Server 2008 上运行互操作相关程序时遇到以下错误 但在 Win Server 2003 和 XP 上运行良好 System Runtime InteropServices COMException 0x8
  • Dojo:如何从值中删除逗号

    我有这个 Dijit 数字旋转器 div class extra field hide on load form action fy div
  • 使用 matplotlib 绘制时间序列 pandas 数据框时标签错误

    我正在处理包含 1 周数据的数据框 y ds 2017 08 31 10 15 00 1 000000 2017 08 31 10 20 00 1 049107 2017 08 31 10 25 00 1 098214 2017 09 07
  • 使用c#从串口部分接收消息

    我使用下面的代码使用 C 接收来自串行端口的消息 void comPort DataReceived object sender SerialDataReceivedEventArgs e if comPort IsOpen true st