首页 > 编程语言 >C# 串口通信利器 SerialPortStream库

C# 串口通信利器 SerialPortStream库

时间:2024-12-06 23:21:14浏览次数:11  
标签:通信 C# receivedData serialPort SerialPortStream 串口 byte

学习备忘-源自 https://mp.weixin.qq.com/s/hDVD9Ij22KSHm7TUmETcmQ

前言

物联网(IoT)和嵌入式系统的开发中,串口通信是一项不可或缺的技术。C# 作为一种广泛使用的编程语言,同样支持多种方式进行串口通信。其中,SerialPortStream 库因其简单易用的API和强大的功能成为了众多开发者的首选。本文将详细介绍如何使用 SerialPortStream 库来进行高效的串口通信,并探讨其在实际项目中的应用。RJCP.DLL.SerialPortStream库RJCP.DLL.SerialPortStream库为C#串口通信提供强大支持,跨平台、高度可定制,集成基础功能如打开、配置串口和数据读写,以及高级功能包括事件处理、超时设置等,极大简化串口开发流程,适用于不同平台和复杂通信需求。为什么选择 SerialPortStream?SerialPortStream 是一个开源的 C# 库,它为开发者提供了一个简单而强大的 API 来处理串行通信。相比于传统的 System.IO.Ports.SerialPort 类,SerialPortStream 提供了更多的灵活性和性能改进,包括但不限于:支持异步非阻塞模式数据缓冲机制错误处理和异常报告自定义数据帧结束符跨平台支持: 适用于Windows、Linux和macOS等多个平台。高度可定制性: 提供灵活的配置选项,可满足不同串口通信需求。开源社区支持: 在GitHub上积极维护,可获取最新版本和社区支持。基础功能

 

高级功能

1、事件处理

// 添加数据接收事件处理程序
serialPort.DataReceived += (sender, e) => {
    byte[] receivedData = new byte[serialPort.BytesToRead];
    serialPort.Read(receivedData, 0, receivedData.Length);
    Console.WriteLine($"Received: {Encoding.UTF8.GetString(receivedData)}");
};

2、超时设置

// 设置读取超时时间为100毫秒
serialPort.ReadTimeout = 100;

3、自定义流控制

// 自定义流控制为RTS/CTS
serialPort.Handshake = Handshake.RequestToSend;

完整示例以下是一个结合基础和高级功能的完整示例:

using System;
using System.Text;
using RJCP.IO.Ports;

class Program {
    static void Main() {
        using (SerialPortStream serialPort = new SerialPortStream("COM1")) {
            // 基础功能:打开串口、配置参数
            serialPort.Open();
            serialPort.BaudRate = 9600;
            serialPort.Parity = Parity.None;
            serialPort.DataBits = 8;
            serialPort.StopBits = StopBits.One;

            // 高级功能:数据接收事件处理
            serialPort.DataReceived += (sender, e) => {
                byte[] receivedData = new byte[serialPort.BytesToRead];
                serialPort.Read(receivedData, 0, receivedData.Length);
                Console.WriteLine($"Received: {Encoding.UTF8.GetString(receivedData)}");
            };

            // 发送数据
            byte[] dataToSend = Encoding.UTF8.GetBytes("Hello, Serial!");
            serialPort.Write(dataToSend, 0, dataToSend.Length);

            // 等待一段时间以接收数据
            Console.WriteLine("Waiting for data...");
            Console.ReadLine();
        }
    }
}

总结通过本文介绍了 RJCP.DLL.SerialPortStream库的基础和高级功能,包括打开和配置串口、事件处理、超时设置和流控制等。我们可以掌握如何使用它来进行串口通信。不管是开发简单的数据传输应用还是复杂的工业控制系统,SerialPortStream 都是一个不错的选择。

标签:通信,C#,receivedData,serialPort,SerialPortStream,串口,byte
From: https://www.cnblogs.com/firespeed/p/18591592

相关文章

  • Procrastination is not lazy, not habbit, not distraction, but as a self-protec
    Perfectionismcanveryeasilyleadtoprocrastination.Whenyouspend10hoursstudyingjusttograsp2hours'worthofmaterial,youmaystillfeellikeyoudon'tfullyunderstandthecontent.Yoursubconsciousthenestimatesthisasa"st......
  • C# SerialPort 串口通讯
    学习备忘-源自https://mp.weixin.qq.com/s/xO7yCpNj3zG8lfqyz4ARVw前言串口通信在.NET平台下创建C#串口通信程序,.NET2.0提供了串口通信的功能,其命名空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。创建C#串口通信程序之命名空间S......
  • YOLOv8-ultralytics-8.2.103部分代码阅读笔记-augment.py
    augment.pyultralytics\data\augment.py目录augment.py1.所需的库和模块2.classBaseTransform: 3.classCompose: 4.classBaseMixTransform: 5.classMosaic(BaseMixTransform): 6.classMixUp(BaseMixTransform): 7.classRandomPerspective: 8.classRand......
  • 用一篇博文带你了解c++和python两种编程语言到底有什么区别?
      成长路上不孤单......
  • 【gRPC】gRPC基础:初识与安装
    1.gRPC是什么gRPC是一种现代化开源的高性能RPC框架,能够运行于任意环境之中。最初由谷歌进行开发。它使用HTTP/2作为传输协议。在gRPC里,客户端可以像调用本地方法一样直接调用其他机器上的服务端应用程序的方法,帮助你更容易创建分布式应用程序和服务。与许多RPC系统一样,gR......
  • 探索Volc Engine MaaS:快速入门指南
    探索VolcEngineMaaS:快速入门指南VolcEngine的MaaS(ModelasaService)是一种强大的服务,允许开发者使用其LLM(大语言模型)实现多种自然语言处理任务。在这篇文章中,我们将指导您如何开始使用VolcEngine的MaaS模型,通过简单的步骤和代码示例展示其应用。1.引言VolcEngine......
  • 一文了解MySQL写缓冲Change Buffer(定义 作用 执行过程 触发时机 业务场景)
    MySQL的数据存储包含内存与磁盘两个部分,内存缓冲区bufferpool以页为单位,缓存最热的数据页datapage与索引页indexpage,InnoDB以变种LRU算法管理缓冲池,并且解决了预读失效和缓冲池污染的问题。对于读请求,缓冲池可以减少磁盘IO,提升性能,那么写请求呢?思考2个场景:场景1:假设要......
  • 堆排序(c基础)
    voidMaxHeap(int*H,inti,intN){ intl=2*i+1; intr=2*i+2; intmax; if(l<N&&H[l]>H[i])max=l; elsemax=i; if(r<N&&H[r]>H[max])max=r; inttemp=0; if(max!=i) { intp=H[i];......
  • VUE: npm run dev报错Error: error:0308010C:digital envelope routines::unsupported
    emittingCompressionPluginERROR Error:error:0308010C:digitalenveloperoutines::unsupported 说明:该错误通常是Node.js的加密模块和OpenSSL版本不兼容造成的Node.js版本17及以上中,默认禁用了某些加密算法,这可能导致与一些期望使用这些算法的模块或应用程序的兼......
  • CSS 一些个人不常用属性总结
    1.滚动捕获在元素中滚动不会在中间停止一定会停在元素前方后或后方-需要在父元素中设置 scroll-snap-type:none|[x|y|block|inline|both][mandatory|proximity]  eg:  scroll-snap-type:xmandatory; 即时在X轴开启强制捕获......