C# - 从串口缓冲区读取

2024-04-07

我正在尝试从 RS-232 端口读取数据。有谁有一个例子说明我如何从端口/缓冲区获取数据并确保我拥有所有数据,因为它可以是多行数据。

我只是简单地读如下吗?

string Rxstring = port.ReadLine();
Console.WriteLine(Rxstring);

问:如何从端口/缓冲区获取日期,或从连接的设备输入数据。并确保您拥有所有数据。

答:我广泛使用 .net 串行端口类驱动程序,负责创建可靠、健壮的代码。这意味着被测连接设备必须在很长一段时间内运行并且不会出现故障。串行端口可能并且确实会丢失数据!别忘了这一点。

//from top of the head;

using System.Port.IO;
using System.Port;

private class mywindowsForm: Form
{
      StringBuilder sbReceived = new StringBuilder();
      string Received = string.Empty;
      int byteCOUNT = 0;

      System.Windows.Timers.Timer serialTimer;

      //Default constructor 
      myWindowsForm()
      {
         //assume that you clicked and dragged serial port in
          serialPort1 = new SerialPort();//create new serial port instance 
          serialPort1.Baud = 9600;
          serialPort1.DataReceived+=<Tab><Enter>
          //serial port timer 
          serialTimer = new System.Windows.Timers.Timer(500);//set to 500ms time delay
          serialTimer.Elapsed+=<TAB><ENTER>
      }

      void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
      {
           //serial port has detected input data
           //however, we only want to get serial data so,
           if(e.EventType !=SerialData.Chars) return;
           //good design practice dictates that we have an event handler that we invoke
            this.BeginInvoke(new eventhandler(AddReceive));//beginInvoke is designed to deal with asynchronous processes like serial port data. 
      }

      private void AddReceive(object s, EventArg e)
      {
            byteCOUNT=serialPort1.BytesToRead;//count the number of bytes in RX buffer
            if(byteCOUNT > 0) 
             {
                 string ST = serialPort1.ReadTo("\n");//lets get one line at a time 
                 sbReceived.Append(ST);//add whatever has been RX'd to our container. 
                 serialPort1.Interval =100;
                 serialPort1.Start();//to be sure we have all data, check to see for stragglers.
              }
      }

       void serialTimer(object Sender, TimerElapsedEventArgs e)
       {
            serialTimer.Stop();
            this.BeginInvoke(new EventHandler(ReadData));
        }

       void ReadData(object Sender, EventArgs e)
       {
            //parse output for required data and output to terminal display (build one using rich text box)
             Received = sbReceived.ToString();
             //and if we have ANY MORE incoming data left over in serial buffer
              if(Received.Length > 0)
              {
                  //your data 
              }
       }
}

这应该足以帮助您入门。这是多年来用 C# 创建定制终端模拟器的结果。还有其他事情可以做,特别是如果您有大量 I/O 数据,您需要与设备建立握手。您必须让设备以设备满意的速度进行处理。在必须传输较大数据的情况下,请考虑设置一个简单的数据包传递协议和命令信号量构造 - 或使用控制器/设备设计使用的协议。

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

C# - 从串口缓冲区读取 的相关文章

  • Python实时读取串口数据

    我正在使用 Python 中的脚本通过串行端口以 2Mbps 的速度从 PIC 微控制器收集数据 PIC 在 2Mbps 下完美定时工作 FTDI USB 串行端口在 2Mbps 下工作也很好 均通过示波器验证 我每秒发送消息 大小约为 1
  • 表达式访问者仅为某些 lambda 表达式调用 VisitParameter

    我希望能够使用嵌套扩展方法将 EF 中的实体投影到相应的视图模型 参见我之前的问题使用扩展方法在 EF 中投影单个实体 https stackoverflow com questions 39585427 projection of sin
  • Monitor.Pulse & Wait - 意外行为

    http www codeproject com Articles 28785 Thread synchronization Wait and Pulse demystified http www codeproject com Artic
  • .NET 中的 Class.forName() 等效项?

    动态获取对象类型然后创建它的新实例的 C 方法是什么 例如 如何在 C 中实现以下 Java 代码的结果 MyClass x MyClass Class forName classes MyChildClass newInstance Lo
  • 有没有办法找到dll公开的所有函数

    我一直在寻找一种方法来获取映射到 dll 中函数名称的所有字符串 我的意思是您可以调用 GetProcAddress 的所有字符串 如果你对 dll 进行十六进制转储 符号 字符串 就在那里 但我认为必须有一个系统调用来获取这些名称 如果您
  • 如何在Unity Inspector中创建多维数组?

    如何在 Unity Inspector 中创建枚举多维数组并使其可序列化 以便我可以从不同的脚本调用它 public enum colors red blue green yellow cyan white purple public in
  • Web浏览器控件:如何捕获文档事件?

    我正在使用 WPF 的 WebBrowser 控件加载一个简单的网页 在这个页面上我有一个锚点或一个按钮 我想在我的应用程序后面的代码中 即在 C 中 捕获该按钮的单击事件 WebBrowser 控件是否有办法捕获加载页面元素上的单击事件
  • Cookie 在 ASP.net 中失去价值

    我有以下设置 cookie 的代码 string locale DropDownList this LoginUser FindControl locale SelectedValue HttpCookie cookie new HttpC
  • 是否自初始化 'A a = a;'允许吗?

    此代码在运行时在复制构造函数中失败 但编译器 MSVS2008 没有发出警告 您能解释一下 最好引用标准 这段代码是否非法或什么 我理解 A a a 永远不应该写在第一位 但我正在寻找理论背景 class A public A p new
  • 使用 FromBase64Transform 解码 base64 文件流

    The example https msdn microsoft com en us library system security cryptography frombase64transform 28v vs 110 29 aspx从M
  • 如何解析多态 JSON 数组?

    我有一个 JSON 格式的文件 其中包含个人用户的记录 一些用户的记录中间有一个评论字段 我只想解析顶级项目 全名 贡献者姓名 电子邮件 使用 Newtonsoft JSON 解析器 但我似乎无法让它识别单个对象 当我将整个字符串解析为一个
  • 解析连接字符串

    是否有标准库或代码片段可以使用这样的连接字符串获取值 string connstr DataServiceUrl http localhost foo RemoteServerConnection server http localhost
  • 当一对迭代器初始化时,向量是否知道先保留?

    考虑以下代码 struct MyData MyData const BYTE pData size t uSize bucket pData pData uSize std vector
  • 链接到ntdll.lib并调用ntdll.dll内部的函数

    我最近正在对私有 API 进行一些研究 我尝试调用诸如NtOpenFile在 ntdll dll 中LoadLibrary and GetProcAddress在运行时 幸运的是 它成功了 今天早上我在电脑上进行了文件搜索 发现ntdll
  • 如何在realm-dotnet中存储System.Collections.Generic.Dictionary

    我正在尝试将 Realm NET 集成到我的 uwp 项目中 我想知道是否有任何方法可以在 Realm dotnet 库中存储 System Collections Generic Dictionary 我试过这个 public class
  • NSubstitute - 测试特定的 linq 表达式

    我在当前正在开发的 MVC 3 应用程序中使用存储库模式 我的存储库界面如下所示 public interface IRepository
  • 为什么我无法通过 lambda 捕获“this”指针?

    考虑以下代码 class A public void foo auto functor this A a this auto functor a The compiler won t accept this instead of a a g
  • 如何从 C# 中的 Web Api 方法正确获取字节数组?

    我有以下控制器方法 HttpPost Route SomeRoute public byte MyMethod FromBody string ID byte mybytearray db getmybytearray ID working
  • 小数精度

    我使用小数类型进行高精度计算 货币 但我今天遇到了这个简单的划分 1 1 37 这应该再次得到 37 http www wolframalpha com input i 1 2F 281 2F37 29 http www wolframal
  • Selenium - 模式对话框存在 - 如何接受信息?

    我有以下问题 在页面上提交一些日期后 我有一个如图所示的模式对话框 我想单击 ENTER 来浏览该模式 但它不起作用 我有以下代码 driver FindElement By CssSelector input submit Click A

随机推荐

  • 整数文字存储到“Int”时会溢出

    Xcode 抱怨以下行 let primary UInt32 0x8BC34AFF 出现此错误消息 Integer literal 2344831743 overflows when stored into Int 我看到它溢出了一个有符号
  • Javascript - 事件属性的浏览器命名约定让我感到困惑

    我一直想知道为什么不同浏览器的 JavaScript 中事件的 target sourceElement 的属性名称存在差异 event srcElement in Internet Explorer event target in mos
  • 当状态更新不影响 UI 时防止“未包含在 act(...)”中的玩笑警告

    我试图弄清楚是否有一种方法可以防止 Jest testing library 抛出 未包含在 act 警告 当我在导致警告发生的状态更新后没有任何可断言的情况时 或者我是否应该忽略这个警告 假设我有这个简单的组件 import React
  • 如何将 com.apple.systemuiserver 首选项重新加载到 SystemUIServer 应用程序中?

    对于我的 Mac OSX 应用程序 我有一个功能 可以在单击按钮时删除屏幕右上角的系统时钟 控制显示哪些系统菜单 包括系统时钟 的首选项存储在 Library Preferences com apple systemuiserver pli
  • 如何更改 Eclipse 以在 Javascript 编辑器中使用空格而不是制表符?

    我使用 Eclipse JavaScript 插件 我的文本编辑器设置为 插入空格作为制表符 这工作正常 直到我选择一个代码块并制表符或移动制表符 运行 JSLint 和 AARGghh 混合空格和制表符 我缺少什么吗 这可能吗 我不太确定
  • 生成随机颜色的问题 - asp.net 和 c#

    我需要在我的 asp net 应用程序中生成十六进制值的随机颜色来绘制图表 Random random new Random color String Format 0 X6 random Next 0x1000000 上面的代码生成随机颜
  • 当scapy和pypcap严重丢失时,如何嗅探python上的所有数据包?

    我尝试使用 python 在 Win10 上嗅探数据包 然而 我发现很多数据包实际上是被 scapy 丢弃的 例如 我从 ftp 下载一个 2 MB 的文件 wireshark 捕获了近 2000 个数据包 而 scapy 只捕获了 500
  • XAMPP的Shell在哪里?

    我正在使用最新版本的 XAMPP 和 XAMPP 控制面板 v2 5 2007 年 5 月 9 日 我想访问命令行来运行php q htdocs path to file php Problem 在我的 XAMPP 控制面板上 我没有看到S
  • 如何在 Linux 中进行惰性/延迟加载?

    我在 Windows 上运行得很好 应用程序加载我的插件 C Qt 我的插件进行智能搜索以查找已安装的 JRE 相应地设置库搜索路径 然后调用 JVM 中的一个函数来强制 jvm dll 将在此时加载 上一个问题 如何部署混合 C Java
  • 使用 xyz 数据框在 Python 中生成热图

    我有 x y z 数据存储在 pandas 数据框中 我想从中生成 2D 热图 深度图 df pd DataFrame np random randint 0 100 size 100 3 columns list XYZ 我不确定如何使用
  • 关闭 Rails 中的“updated_at”列

    我有一个简单的 日志 模型 它记录调用控制器操作的事实 该 日志 记录的条目应该创建一次并且永远不会更改 另外 我的数据库中会有很多这样的记录 因此 不需要 updated at 列 不需要浪费硬盘上的内存 我如何告诉 Rails 仅保留
  • SQL Server:不同行中两个日期的天数差异

    我正在使用 SQL Server 2012 目前正在编写一份报告 要求我找出两个日期之间的天数差异 基本上 对于一个特定的ReportID 我试图找出 ReportCompletedDate当 的时候ReportType PaperRece
  • Tkinter中Listbox和Radiobutton触发的事件

    我想创建一个由列表框所选项目的更改或单选按钮所选项目的更改触发的事件 是否可以 我使用这段代码 def getScript event state rb get listScript processor processor lb1 get
  • 从 numpy 数组中删除一些元素

    一个有趣的问题 我想从 numpy 数组中删除一些元素 但正如下面的简化示例代码所示 如 果不删除最后一个元素 它会起作用 但如果我们希望删除最后一个元素 它会失败 下面的代码工作正常 import numpy as np values n
  • DRY(不要重复自己)和 if 作业

    我想我忘记了一些明显的事情 但如果它验证了尽可能保持干燥的条件 我似乎找不到一种分配值的方法 一些代码来解释我的意思 a b gt 1 b c or even a a gt 1 a b 所以当然这里没什么大不了的 但是如果 a 要被方法调用
  • 外部模块中的 Rails Resque 未定义方法错误

    我在从 resque 工作线程中包含的模块调用方法时遇到问题 在下面的示例中 当我尝试调用时 我不断收到未定义的方法错误sayWorker 内部的方法 位于 TestLib 模块中 我已将代码简化为最基本的内容来说明问题 控制器 app c
  • 在 IIS 上运行 .NET Core

    我尝试在本地计算机上设置 IIS 来运行 NET Core API 我跟着https learn microsoft com en us aspnet core publishing iis https learn microsoft co
  • Mathematica:MathLink 错误消息

    我想我开始理解如何将用 C C 编写的函数链接到数学 我面临的问题是我不知道如何将错误消息从我的 C 包装器发送到 Mathematica 在谷歌搜索后我发现了这个MathLink 教程 http www edenwaith com dev
  • Oracle 和 SQL Server 保留关键字

    我需要 Oracle Database 10g 和 SQL Server 2008 保留关键字的列表 我的应用程序执行 DDL 语句 因此我需要根据保留字验证输入的表名 列名等 我知道我可以复制并粘贴网站上的文字 甲骨文10g http d
  • C# - 从串口缓冲区读取

    我正在尝试从 RS 232 端口读取数据 有谁有一个例子说明我如何从端口 缓冲区获取数据并确保我拥有所有数据 因为它可以是多行数据 我只是简单地读如下吗 string Rxstring port ReadLine Console Write