串口通用帮助类 SerialPortHelper

发布时间:2025-09-24 19:22

利用关键词串联:帮助记忆复杂信息 #生活技巧# #工作学习技巧# #知识归纳能力#

Demo

private readonly SerialPortHelper _spHelper; ctor() // 对象中初始化 { _spHelper = new SerialPortHelper(); _spHelper.DataReceivedEvent += SerialPort_DataReceivedEvent; _spHelper.Close(); if (_spHelper.Init("COM2")) { _spHelper.SetStartIdentifier(new byte[] { 0xFA, 0xFA }); _spHelper.SetEndIdentifier(new byte[] { 0xFB, 0xFB }); } } private void SerialPort_DataReceivedEvent(object sender, EventArgs e) { if (e is CustomSerialPortEventArgs arg) { var data = arg.Message; // TODO } }

SerialPortHelper

using System; using System.Collections.Generic; using System.ComponentModel; using System.IO.Ports; /// <summary> /// 串行端口通信帮助类(有帧头、帧尾检测) /// </summary> public class SerialPortHelper { private readonly WeakEvent<EventArgs> _dataReceivedEvent = new WeakEvent<EventArgs>(); /// <summary> /// 返回的消息数据弱事件 /// </summary> public event EventHandler<EventArgs> DataReceivedEvent { add => _dataReceivedEvent.Add(value, value.Invoke); remove => _dataReceivedEvent.Remove(value); } public bool IsOpen => _serialPort != null && _serialPort.IsOpen; private CustomSerialPort _serialPort; /// <summary> /// 设置结尾标识符 /// </summary> /// <param name="end"></param> public void SetEndIdentifier(byte[] end) { if (_serialPort != null) { _serialPort.EndIdentifier = end; } } /// <summary> /// 设置开始标识符 /// </summary> /// <param name="start"></param> public void SetStartIdentifier(byte[] start) { if (_serialPort != null) { _serialPort.StartIdentifier = start; } } /// <summary> /// 延迟接收数据。 /// 默认不设置帧头、帧尾,根据实际情况判断数据完整性! /// </summary> /// <param name="millisecond">默认500(ms)</param> public void SetDelayDataReceived(int millisecond = 500) { if (_serialPort == null) { return; } _serialPort.StartIdentifier = null; _serialPort.EndIdentifier = null; _serialPort.DelayReceived(millisecond); } public bool Init(string portName, int baudRate = 9600, Parity parity = Parity.None, int dataBits = 8, StopBits stopBits = StopBits.One) { try { _serialPort = new CustomSerialPort(portName, baudRate, parity, dataBits, stopBits); _serialPort.DataReceivedEvent += SerialPort_DataReceivedEvent; return _serialPort.IsOpen; } catch (Exception ex) { LogHelper.Info(ex.Message); } return false; } /// <summary> /// 串口数据写 /// </summary> /// <param name="data"></param> public void Write(byte[] data) { if (IsOpen) { _serialPort.WritePort(data); } } /// <summary> /// 串口数据写 /// </summary> /// <param name="data"></param> public void Write(string data) { if (IsOpen) { _serialPort.WritePort(data); } } public void Close() { if (_serialPort == null) { return; } _serialPort.DataReceivedEvent -= SerialPort_DataReceivedEvent; _serialPort.Close(); _serialPort = null; } private void SerialPort_DataReceivedEvent(object sender, EventArgs e) { _dataReceivedEvent.Invoke(this, e); } }

其中,CustomSerialPort是一般串口通信的基本功能,可自行实现。

网址:串口通用帮助类 SerialPortHelper https://klqsh.com/news/view/263190

相关内容

夸父炸串加盟费
脱口秀主持串词(14页)
夸父炸串
使用帮助
学习通网页版登入入口
成都大邑解锁全民学习新时尚 垃圾分类知识换烤串冰粉
已解决:在Windows 10中获取文件资源管理器的帮助
心理自助类图书销量攀升,为何中美读者都好这口?
租房避坑指南:教你如何识破串串房,避开这些坑能省大钱!
PHP中使用strpos函数高效检测字符串中是否包含特定字符的方法详解

随便看看