C#串口类封装 SuperSerialPort

基于SerialPort类做了简单的封装方便调用

代码

	/// <summary>
/// SuperSerialPort
/// </summary>
public class SuperSerialPort
{ private SerialPort CommPort = new SerialPort(); public SuperSerialPort()
{
CommPort.DataReceived += serialport_DataReceived;
} private StringBuilder SerialDataReceived = new StringBuilder(); private void serialport_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//读取数据
int length = CommPort.BytesToRead;
byte[] buffers = new byte[length];
CommPort.Read(buffers, 0, length); //调用委托事件
DataReceived?.Invoke(buffers);
} #region 公有属性
/// <summary>
/// 端口
/// </summary>
public string PortName
{
get { return CommPort.PortName; }
} /// <summary>
/// 获取 端口列表
/// </summary>
public List<string> GetPortNames()
{
return SerialPort.GetPortNames().ToList<string>();
} /// <summary>
/// 获取 奇偶校验位 列表
/// </summary>
/// <returns></returns>
public List<string> GetParitys()
{
List<string> list = new List<string>();
foreach (string str in Enum.GetNames(typeof(Parity)))
{
list.Add(str);
}
return list;
} /// <summary>
/// 获取 停止位 列表
/// </summary>
/// <returns></returns>
public List<string> GetStopBits()
{
List<string> list = new List<string>();
foreach (string str in Enum.GetNames(typeof(StopBits)))
{
list.Add(str);
}
return list;
} /// <summary>
/// 打开串口
/// </summary>
public void Open()
{
if (!CommPort?.IsOpen)
{
CommPort.Open();
} } /// <summary>
/// 关闭串口
/// </summary>
public void Close()
{
if (CommPort?.IsOpen)
{
CommPort.Close();
}
}
#endregion #region 设置串口信息
/// <summary>
/// 设置串口信息
/// </summary>
public void SetPortInfo(string PortName, string Parity, string Stop, string Data, string BaudRate)
{
CommPort.PortName = PortName;
CommPort.Parity = (Parity)Enum.Parse(typeof(Parity), Parity);
CommPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), Stop);
CommPort.DataBits = int.Parse(Data);
CommPort.BaudRate = int.Parse(BaudRate);
}
#endregion #region HexToByte
/// <summary>
/// HexToByte
/// </summary>
private byte[] HexToByte(string msg)
{
msg = msg.Replace(" ", "");
byte[] comBuffer = new byte[msg.Length / 2];
for (int i = 0; i < msg.Length; i += 2)
comBuffer[i / 2] = (byte)Convert.ToByte(msg.Substring(i, 2), 16);
return comBuffer;
}
#endregion #region ByteToHex
/// <summary>
/// ByteToHex
/// </summary>
private string ByteToHex(byte[] comByte)
{
StringBuilder builder = new StringBuilder(comByte.Length * 3);
foreach (byte data in comByte)
builder.Append(Convert.ToString(data, 16).PadLeft(2, '0'));
return builder.ToString().ToUpper();
}
#endregion #region 接收事件
/// <summary>
///
/// </summary>
public Action<byte[]> DataReceived { get; set; }
#endregion #region 发送事件
/// <summary>
/// 发送命令
/// </summary>
/// <param name="cmd">十六进制字符串</param>
public void Send(string cmd)
{
if (!string.IsNullOrEmpty(cmd) && CommPort.IsOpen)
{
byte[] serOrder = HexToByte(cmd); CommPort.Write(serOrder, 0, serOrder.Length);
}
} /// <summary>
/// byte数组
/// </summary>
/// <param name="cmdbytes"></param>
public void Send(byte[] cmdbytes)
{
if (cmdbytes?.Length > 0 && CommPort.IsOpen)
{
CommPort.Write(cmdbytes, 0, cmdbytes.Length); }
}
#endregion }
目前只封装了这些需要的话以后再加,,,,,,,,,

C#串口类封装 SuperSerialPort的更多相关文章

  1. Remon Spekreijse CSerialPort串口类的修正版2014-01-10

    转自:http://m.blog.csdn.net/blog/itas109/18358297# 2014-1-16阅读691 评论0 如需转载请标明出处:http://blog.csdn.net/i ...

  2. CSerialPort串口类最新修正版(解决关闭死锁问题)

    这是一份优秀的类文件,好多的地方值得我们学习,具体在多线程,事件,自定义消息,类的封装方面等等.Remon提供的串口类网址为:http://codeguru.earthweb.com/network/ ...

  3. CSerialPort串口类最新修正版(解决关闭死锁问题)2014-01-11

    这是一份优秀的类文件,好多的地方值得我们学习,具体在多线程,事件,自定义消息,类的封装方面等等.Remon提供的串口类网址为:http://codeguru.earthweb.com/network/ ...

  4. salesforce 零基础学习(四十八)自定义列表分页之Pagination基类封装 ※※※

    我们知道,salesforce中系统标准列表页面提供了相应的分页功能,如果要使用其分页功能,可以访问http://www.cnblogs.com/zero-zyq/p/5343287.html查看相关 ...

  5. 谢欣伦 - OpenDev原创教程 - 串口类CxSerial

    这是一个精练的串口类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. 串口类CxSerial的使用如下(以某个叫做CSomeClass ...

  6. 一个由印度人编写的VC串口类

    http://www.cnblogs.com/lwngreat/p/4098374.html 软件介绍 一个由印度人编写的VC串口类(也是一种VC串口控件),他还配合这个类写了VC 串口通信方面的一些 ...

  7. mfc的一个串口类

    这几天一直再看串口相关知识,对于其总结为如下串口类: 头文件声明如下: #pragma once // 声明当串口接收到线程的时候调用的函数指针 // 参数: 1,接收到的数据: 2,数据长度: 3, ...

  8. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  9. Redis操作List工具类封装,Java Redis List命令封装

    Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...

随机推荐

  1. 《转载黑马教程》HTML&&CSS讲义,仅供参考

    今日内容: 1. HTML标签:表单标签 2. CSS: HTML标签:表单标签 * 表单: * 概念:用于采集用户输入的数据的.用于和服务器进行交互. * form:用于定义表单的.可以定义一个范围 ...

  2. .NET项目迁移到.NET Core操作指南

    为什么要从.NET迁移到.NET Core? .NET Core提供的特性 .NET Core性能提升 .NET如何迁移到.NET Core? 迁移工作量评估(API兼容性分析) 迁移方案制定 通过类 ...

  3. springmvc上传文件踩过的坑

    @RequestMapping("/addTweet") public String addTweet(TweetVO tweetVO, HttpServletRequest re ...

  4. Skyline WEB端开发2——添加一个定位点、文本标签

    Skyline 添加定位点 sgworld.Creator.CreatePosition CreatePosition( X, //兴趣点的东西方向坐标,即经度 Y, //兴趣点的南北方向坐标,即纬度 ...

  5. centos7 添加用户,组

    centos7添加用户,组. groupadd projectUsers //添加组,组名projectUser. cat /etc/group //查看最后一行是projectUser. 添加用户并 ...

  6. 企业如何从“API优先”的策略中获益

    在过去的几年里,全球API经济在以难以置信的速度进行快速地增长.物联网.人工智能.自动驾驶等等众多令人充满期待的技术正蓬勃发展,这也证明了API对于如今整个技术圈子的重要性,也预示着在不久的将来它还将 ...

  7. python爬虫常用正则表达式组合匹配

    ["\']匹配什么?(.*?)匹配什么? ["\']       -----------     匹配单双引号 (.*?)xxx ----------- 匹配任意长度字符+xxx ...

  8. ItemsControl绑定的数据模板显示不同样式:模板选择器

    总所周知,wpf提供了数据模板,列表控件可以绑定数据实现批量显示同类型数据.不过同个数据模板显示不同的样式怎么办?这时我们可以用模板选择器. 首先我们可以将数据绑定到首先定义资源样式 <Data ...

  9. jmeter_遍历转换浮点时间戳

    概述 近期帮朋友解决了一个浮点时间戳转换的问题,在这里记录一下. 具体场景是有一个十位浮点时间戳的list,需要遍历转换为当前的标准时间. list如下: 实现步骤 实现步骤其实很简单,只需要一个fo ...

  10. [leetcode] 96 Unique Binary Search Trees (Medium)

    原题 字母题 思路: 一开始妹有一点思路,去查了二叉查找树,发现有个叫做卡特兰数的东西. 1.求可行的二叉查找树的数量,只要满足中序遍历有序. 2.以一个结点为根的可行二叉树数量就是左右子树可行二叉树 ...