C#串口类封装 SuperSerialPort
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的更多相关文章
- Remon Spekreijse CSerialPort串口类的修正版2014-01-10
转自:http://m.blog.csdn.net/blog/itas109/18358297# 2014-1-16阅读691 评论0 如需转载请标明出处:http://blog.csdn.net/i ...
- CSerialPort串口类最新修正版(解决关闭死锁问题)
这是一份优秀的类文件,好多的地方值得我们学习,具体在多线程,事件,自定义消息,类的封装方面等等.Remon提供的串口类网址为:http://codeguru.earthweb.com/network/ ...
- CSerialPort串口类最新修正版(解决关闭死锁问题)2014-01-11
这是一份优秀的类文件,好多的地方值得我们学习,具体在多线程,事件,自定义消息,类的封装方面等等.Remon提供的串口类网址为:http://codeguru.earthweb.com/network/ ...
- salesforce 零基础学习(四十八)自定义列表分页之Pagination基类封装 ※※※
我们知道,salesforce中系统标准列表页面提供了相应的分页功能,如果要使用其分页功能,可以访问http://www.cnblogs.com/zero-zyq/p/5343287.html查看相关 ...
- 谢欣伦 - OpenDev原创教程 - 串口类CxSerial
这是一个精练的串口类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. 串口类CxSerial的使用如下(以某个叫做CSomeClass ...
- 一个由印度人编写的VC串口类
http://www.cnblogs.com/lwngreat/p/4098374.html 软件介绍 一个由印度人编写的VC串口类(也是一种VC串口控件),他还配合这个类写了VC 串口通信方面的一些 ...
- mfc的一个串口类
这几天一直再看串口相关知识,对于其总结为如下串口类: 头文件声明如下: #pragma once // 声明当串口接收到线程的时候调用的函数指针 // 参数: 1,接收到的数据: 2,数据长度: 3, ...
- Redis操作Set工具类封装,Java Redis Set命令封装
Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...
- Redis操作List工具类封装,Java Redis List命令封装
Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...
随机推荐
- Python解题技巧
Python解题技巧 一直都是用C++和C解题,某题简单解完后便心血来潮想用Python解一次,发现一些问题,特写此篇随笔来记录. 一. 输入格式: 例:输入第1行给出正整数n和整数m:第2行给出n个 ...
- CentOS 7.3 配置静态ip
镜像:CentOS-7-x86_64-DVD-1511.iso 1.修改.查看虚拟机的网段 1.1.查看虚拟机网段 编辑-> 虚拟机网络编辑器,修改的需要管理员权限 选择NAT模式 点击 NAT ...
- Oracle:ORA-01219:database not open:queries allowed on fixed tables/views only
Oracle:ORA-01219:database not open:queries allowed on fixed tables/views only 问: 解决 ORA-01219:databa ...
- 通过自研数据库画像工具支持“去O”评估
“去O”,是近些年来一直很火的一个话题,随之也产生了各种疑惑,包括现有数据库评估.技术选型等.去O是项系统工程,需要做好充分的评估.本文通过自研工具,生成数据库画像,为去O评估提供一手数据,希望给大家 ...
- 编译Tomcat9源码及tomcat乱码问题解决
因工作原因,需要从根本上优化tomcat的配置,故准备从源码入手,看看可以做哪些工作. 1. tomcat下载 tomcat最新的版本为9,下载源码的方式有3种: 1/ 官方网站 https://to ...
- Android拨打电话权限总结
android在6.0和6.0以上拨打电话的权限声明 /** * 打电话 * * @param phoneNumber */ protected void startCallPhone(String ...
- 微信小程序post 服务端无法获得参数问题
header中需要改为 "Content-Type": "application/x-www-form-urlencoded"
- python基础练习 斐波那契数列
转载于知乎刘奕聪的方法 一 f = [1, 1]print([f.append((f[-1] + f[-2])) or f.pop(0) for i in range(100)]) /// f.ap ...
- C++多小球非对心弹性碰撞(HGE引擎)
程序是一个月前完成的,之前一直没正儿八经的来整理下这个程序,感觉比较简单,不过即使简单的东西也要跟大家分享下. 源码下载:http://download.csdn.net/detail/y851716 ...
- 《SQL错题》
(选择一项) A: B: C: D: 正确答案是 D (选择一项) A: B: C: D: 正确答案是 A (选择一项) 8 A: B: C: ...