首页
学习
活动
专区
圈层
工具
发布

如何在C#中使用SerialPort端口对象的dataReceived事件?

在C#中,使用SerialPort端口对象的dataReceived事件可以通过以下步骤实现:

  1. 首先,需要引入System.IO.Ports命名空间,以便使用SerialPort类。
代码语言:csharp
复制
using System.IO.Ports;
  1. 创建一个SerialPort对象,并设置相关属性,例如串口名称、波特率等。
代码语言:csharp
复制
SerialPort serialPort = new SerialPort("COM1", 9600);
  1. 为SerialPort对象的dataReceived事件添加事件处理程序。
代码语言:csharp
复制
serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
  1. 定义事件处理程序,处理接收到的数据。
代码语言:csharp
复制
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort sp = (SerialPort)sender;
    string indata = sp.ReadExisting();
    Console.WriteLine("接收到的数据: " + indata);
}
  1. 打开串口以开始接收数据。
代码语言:csharp
复制
serialPort.Open();

完整的代码示例如下:

代码语言:csharp
复制
using System;
using System.IO.Ports;

class SerialPortExample
{
    static void Main()
    {
        SerialPort serialPort = new SerialPort("COM1", 9600);
        serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
        serialPort.Open();
        Console.WriteLine("按任意键退出...");
        Console.ReadKey();
        serialPort.Close();
    }

    private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting();
        Console.WriteLine("接收到的数据: " + indata);
    }
}

这样,当串口接收到数据时,dataReceived事件就会被触发,并调用DataReceivedHandler方法处理接收到的数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C#编写单片机上位机软件-串口通讯(BMS汽车动力电池管理系统)

485协议上位机软件做了有一段时间, 之前用python+pyQT5做,主线程特别特别容易闪退,数据重叠等问题,走了很多弯路; 后来用VS的C#做,只能说上手很快,多线程不卡顿,调试效果也不错,而且关键是非常非常简单易读...,只希望大家不要像我一样,走这么多弯路 – – 正在持续优化中,欢迎关注点赞三连~ 华丽的分割线——————————————————————————————– 废话不多说直接看效果图—- 其中串口数据的接收读取是最难的部分....DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);//必须手动添加事件处理程序...} private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)//串口数据接收事件...,因为串口事件触发时有可能收到不止一个字节 serialPort1.Read(data, 0, data.Length);//读取指定长度到serialPort1

2.5K20

串口助手(简洁版)上位机软件零基础教程( C# + visual studio2017 )(二)

以串口助手(简洁版)为例,所有程序都是以 “事件” 为核心来进行的,对应的 “事件”发生了,那软件就去执行 我们自己编写的 对应事件中的 程序。...我们到上一章编好的可视化窗体中,去双击窗体的空白处,就跳转到对应的事件发生程序中去了。...(), 来更新一下 “端口” 组合框下拉菜单中的串口信息。...//目的是在软件使用过程中,时刻刷新串口信息 } 总结: 间隔500ms产生一次定时器中断事件,在中断事件中调用用户自定义的更新串口号函数,来实现串口号的动态更新。...需要根据单选按钮控件的按下状态来决定。 4.数值发送方式写的有点复杂,目的是要从字符串中,两两抠出16进制数据,如0x46,但同时又要考虑空格作为分隔符的存在。

4.2K11
  • C# 串口通讯SerialPort

    这个只是对SerialPort进行简单的使用,对串口设备进行简单数据的发送和数据的接收,调用几个方法就可以完成串口的通讯,但是没有设备去实验还是感觉不好的。...友善串口调试助手 用户可在串口设置中选择端口,选择好端口后点击开始按钮,便可以对串口进行调试。这里我对生成的两个接口都进行开始调试,以验证实验环境是否搭建成功。...这里可以看到COM2发送消息COM3可接收,COM3发送消息COM2也可以接收到,说明实验环境搭建成功 SerialPort 使用串口最重要的设置就是串口名称PortName和串口波特率BaudRate...和绑定串口接收到数据的事件DataReceived。...我使用一个线程定时向COM2口发送数据,成功的结果应该是COM3的串口接收到数据,也就是监控COM3的串口助手收到数据。程序也绑定好接收到数据后的事件。下来运行程序。

    25410

    C#+WPF开发全自动温湿度控制系统课程

    本文将探讨如何使用C#语言结合WPF(Windows Presentation Foundation)框架开发一套功能完善、界面友好的温湿度控制系统。...四、核心功能实现4.1 数据采集与通信温湿度控制系统通常通过以下方式与硬件通信:串口通信:适用于多数温湿度传感器,使用SerialPort类实现网络通信:支持TCP/IP或HTTP协议的设备模拟数据:开发阶段可使用随机数生成器模拟数据通信模块应当设计为独立的服务...,通过事件或回调机制将数据传递给业务逻辑层。..._serialPort.DataReceived += SerialPort_DataReceived; _serialPort.Open(); return...本文概述了系统的主要设计思路和实现方法,实际开发中还需根据具体硬件设备和应用场景进行调整。通过合理利用C#的语言特性和WPF的界面能力,开发者可以构建出既专业又用户友好的温湿度控制解决方案。

    7910

    C#实例:串口通讯

    对于两个进行通信的端口,这些参数必须匹配。   听大佬说的几个关于串口通讯的术语,啥?啥,这是啥?   ...如果想要在C#中玩转串口通讯或者模拟串口,你必须先搞个硬件,当然我们是在模拟,那你就弄个模拟的工具呗,这个我给大家准备好了,自己去下载吧 链接:https://pan.baidu.com/s/1TcdgIWMY0i9BiKVGDxnAzQ...sp1.ReadTimeout = 1000; sp1.Close(); } 在窗体加载中,我们尝试获取了本机的所有串口,通过 SerialPort.GetPortNames...() 方法,会返回一个字符串数组,如果没有就返回null,在其中,我们还设置了波特率,通过SerialPort类下的 DataReceived 方法,来监听我们的数据回传,还启用了DTR\DTS请求方式...,打开串口这个还是比较费劲的,因为要设置各种参数,也就是我刚才说的那几个概念,如果不对,你让其他的端口来访问就找不到了。

    3.8K21

    C#上位机开发(三)—— 构建SerialAssistant雏形

    添加了串口组件后,我们就可以通过它来获取电脑当前端口,并添加到可选列表中,代码如下: //获取电脑当前可用串口并添加到选项列表中 comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames...,会发生一些我们编程时无法处理的事件,比如硬件串口没有连接,串口打开的过程中硬件突然断开,这些被称之为异常,针对这些异常,C#也有try..catch处理机制,在try中放置可能产生异常的代码,比如打开串口...//捕获到异常,创建一个新的对象,之前的不可以再用 serialPort1 = new System.IO.Ports.SerialPort...Receive事件,相当于单片机中的串口接收中断,然后在中断内部对缓冲区的数据进行读取,如图,输入完成后回车,就会跳转到响应代码部分: ?...//串口接收事件处理 private void SerialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs

    3.4K41

    c#开发地磅称重软件

    2012年时即做过一个地磅称重软件,最近公司又接了一个地磅过磅软件的项目,把遇到的问题总结一下以备后用。 1.接线问题 因为客户方原来单独使用仪表,仪表未有接线和电脑连接,为此颇费周折才做好了接线。...接线方式为仪表端所接阵脚为7、8,电脑端为2、5 2.读取仪表称重数 代码基本沿袭2012年为另一客户所开发的称重软件的代码。...注:本次客户所使用地磅为泰山衡器厂出的XK3200,但说明书上说明和耀华系列地磅兼容,而上一客户所使用地磅正是耀华XK3190,大概因此代码基本可直接通用。...下面贴代码了,使用的serialPort控件,命名为port 称重窗体设计器代码页 FrmWeigh.designer.cs中 this.port.BaudRate = 2400; this.port.Parity...+= new System.IO.Ports.SerialDataReceivedEventHandler(this.port_DataReceived); 称重窗体FrmWeigh.cs获取地磅仪表数核心代码部分

    1.5K20

    【Unity3D】Unity3d 与串口的通信程序的开发,软件硬件结合

    一、c#实现串口通信程序的开发 C#串口介绍以及简单串口通信程序设计实现 简单的串口通信工具,基于C#应用程序WinFrom实现 串口介绍 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM...SerialPort private SerialPort ComDevice = new SerialPort(); 2.初始化参数绑定接收数据事件 public void init() {...+= new SerialDataReceivedEventHandler(Com_DataReceived);//绑定事件 } 3.打开串口button事件 /// ...,一会说怎么看端口,第二个参数是波特率,这个是设备自身的参数 SerialPort sp = new SerialPort("COM3", 9600);//声明一个串口类 //...这个是完整的参数,名别是 端口名、波特率、奇偶效验、数据位、流控制参数 //SerialPort sp1 = new SerialPort("COM3", 9600, Parity.None,

    2.7K31

    【单片机入门】(三)应用层软件开发的单片机学习之路-----UART串口通讯和c#交互

    编码 在下面的代码中,我们开始了一个简单的一个串口通讯,在代码第一行,是和c语言一样引入我们需要的库文件,然后在第二行,定义了HardwareSerial这个类的一个MySerial1对象,里面的构造函数的值是...1代表着,我们将使用第一个串口,在下面的setup里面,我们开始启动了MySerial1这个串口对象,启动的波特率是9600,数据长度是8,校验位是NONE,停止位是1,以及串口的rx的引脚是16,tx...在所有的Serial都是及程序Arduino的一个Stream的一个基础类,这个类提供了一些我们对数据处理的一个方法,所以在下面的代码中,我们将读取的数据转为字符串,然后将代码延迟暂停了一秒,随后,我们使用我们的串口对象...-8的格式转为字符串,然后显示到界面上的富文本框中,在发送按钮事件中,我们从输入框读取数据转为字节数组,然后将数据写入到串口中去即可。...serialPort.Open(); serialPort.DataReceived += (a, b) => { var serial = a

    1.7K20

    【Winform+WPF】喷涂工艺SCADA采集监控上位机教程

    它基于传统的GDI+绘图技术,采用事件驱动的编程模型。 2....**学习曲线平缓**:Winform的编程模型相对简单,对于有C 基础但缺乏前端开发经验的工程师来说更容易上手。其事件处理机制直观明了,如按钮的Click事件、文本框的TextChanged事件等。..._DataReceived(object sender, SerialDataReceivedEventArgs e){ int bytesToRead = serialPort1.BytesToRead...混合使用策略在实际项目中,也可以考虑混合使用两种技术:**Winform宿主WPF**:通过ElementHost在Winform中嵌入WPF控件,逐步迁移界面:```csharpvar elementHost...多线程处理上位机软件通常需要处理设备通信、数据采集等耗时操作,必须合理使用多线程:```csharp// WPF MVVM模式中的异步命令示例public ICommand StartAcquisitionCommand

    23411

    移动物联网 之 家电节能 (2)

    因此,我们使用了基于Zigbee和RF射频的家电节能整体解决方案。系统采用分布式网络,底层电量采集使用RF射频通信,上层使用Zigbee进行组网。...(ReceivedDataProcess);                   m_serialPort.DataReceived += new SerialDataReceivedEventHandler...(this.m_serialPort_DataReceived); try                 {                     m_serialPort.Open();...这个类库的用法在于通过提供所有图表属性的省缺值来保持使用性的简单。这个类库包含了基于要绘制的数值范围内的可选择适当度量范围和跨度的代码。...关于如何使用ZedGraph,可以参考园子里peterzb的Blog:C# WinForm开发系列 – ZedGraph。

    1.2K70

    Java串口编程:串口数据的发送与监听读取「建议收藏」

    安装Virtual Serial Port Driver之后用该软件创建一对端口(COM11和COM21),在此创建的一对串口将在之后的实验中再次使用到。...; /** * Com21PollingListener类使用“轮训”的方法监听串口COM21, * 并通过COM21的输入流对象来获取该端口接收到的数据(在本文中数据来自串口COM11)。...,当有数据到达串口的时候就会触发事件,在事件的响应方法中读取串口接收到的数据。...“事件监听模式”监听串口COM21, * 并通过COM21的输入流对象来获取该端口接收到的数据(在本文中数据来自串口COM11)。...* 使用“事件监听模式”监听串口,必须字定义一个事件监听类,该类实现SerialPortEventListener * 接口并重写serialEvent方法,在serialEvent方法中编写监听逻辑。

    7K20

    Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类

    在之前的文章中,我们讨论了使用单例模式的SerialPortEventListener类。然而,这种模式在某些情况下并不理想,因为它会导致重复创建监听器,从而无法正确获取串口返回的数据。...* @param portName 端口名称,如 COM1,为 null 时,默认使用电脑中能用的端口中的第一个 * @param b 波特率(baudrate),如 9600...@param strSource 16进制字符串,如 "455A432F5600",每两位对应字节数组中的一个10进制元素 * 默认会去除参数字符串中的空格,...Map 中,以便在后续的请求中使用。...* @param portName 端口名称,如 COM1,为 null 时,默认使用电脑中能用的端口中的第一个 * @param b 波特率(baudrate),如 9600

    46920

    “Unity开发也能跟硬件联动”--快来看看吧(串口通信)

    一、C#串口介绍以及简单串口通信程序设计实现 简单的串口通信工具,基于C#应用程序WinFrom实现 串口介绍 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口...(针脚2 接受数据(RXD) 和3 发出数据(TXD)) C#代码实现:采用SerialPort 1.实例化一个SerialPort private SerialPort ComDevice...+= new SerialDataReceivedEventHandler(Com_DataReceived);//绑定事件 } 3.打开串口button事件 /// ...,一会说怎么看端口,第二个参数是波特率,这个是设备自身的参数 SerialPort sp = new SerialPort("COM3", 9600);//声明一个串口类 //...这个是完整的参数,名别是 端口名、波特率、奇偶效验、数据位、流控制参数 //SerialPort sp1 = new SerialPort("COM3", 9600, Parity.None,

    2K20

    Java串口通信技术探究2:RXTX库单例测试及应用

    通过实例演示了如何使用SerialPortTool类进行串口操作,包括打开串口、关闭串口、发送数据和接收数据等基本功能。同时,对在运行过程中可能出现的错误进行了分析,并提供了一些解决办法。...* @param portName 端口名称,如 COM1,为 null 时,默认使用电脑中能用的端口中的第一个 * @param b 波特率(baudrate),如 9600..._1 = 1 * @param p 校验位 (parity),如 SerialPort.PARITY_NONE = 0 * @return 打开的串口对象,打开失败时,返回...@param strSource 16进制字符串,如 "455A432F5600",每两位对应字节数组中的一个10进制元素 * 默认会去除参数字符串中的空格,...在IDEA的Project Structure中,确保你的正确安装了我推荐的低版本的JDK并且在JDK中Classpath加入了RXTXcomm.jar包,同时为了确保RXTX中的DLL(动态链接库)文件能使用

    52700
    领券