本文共 2602 字,大约阅读时间需要 8 分钟。
///
/// SuperSerialPort
///
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 公有属性
///
/// 端口
///
public string PortName
{
get { return CommPort.PortName; }
}
///
/// 获取 端口列表
///
public List GetPortNames()
{
return SerialPort.GetPortNames().ToList();
}
///
/// 获取 奇偶校验位 列表
///
///
public List GetParitys()
{
List list = new List();
foreach (string str in Enum.GetNames(typeof(Parity)))
{
list.Add(str);
}
return list;
}
///
/// 获取 停止位 列表
///
///
public List GetStopBits()
{
List list = new List();
foreach (string str in Enum.GetNames(typeof(StopBits)))
{
list.Add(str);
}
return list;
}
///
/// 打开串口
///
public void Open()
{
if (!CommPort?.IsOpen)
{
CommPort.Open();
}
}
///
/// 关闭串口
///
public void Close()
{
if (CommPort?.IsOpen)
{
CommPort.Close();
}
}
#endregion
#region 设置串口信息
///
/// 设置串口信息
///
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
///
/// HexToByte
///
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
///
/// ByteToHex
///
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 接收事件
///
///
///
public Action DataReceived { get; set; }
#endregion
#region 发送事件
///
/// 发送命令
///
/// 十六进制字符串
public void Send(string cmd)
{
if (!string.IsNullOrEmpty(cmd) && CommPort.IsOpen)
{
byte[] serOrder = HexToByte(cmd);
CommPort.Write(serOrder, 0, serOrder.Length);
}
}
///
/// byte数组
///
///
public void Send(byte[] cmdbytes)
{
if (cmdbytes?.Length > 0 && CommPort.IsOpen)
{
CommPort.Write(cmdbytes, 0, cmdbytes.Length);
}
}
#endregion
}
转载地址:https://blog.csdn.net/weixin_30596151/article/details/116790950 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!