using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Threading;
namespace Utility
{
public class SerialPortUtil
{
public static SerialPort _serialPort = null;
//定义委托
public delegate void SerialPortDataReceiveEventArgs(object sender, SerialDataReceivedEventArgs e, byte[] bits);
//定义接收数据事件
public event SerialPortDataReceiveEventArgs DataReceived;
//定义委托
public delegate void SerialPortDataReceiveEventArgss(object sender, SerialDataReceivedEventArgs e, List<byte> buff);
//定义接收数据事件
public event SerialPortDataReceiveEventArgss DataReceiveds;
//定义接收错误事件
//public event SerialErrorReceivedEventHandler Error;
//接收事件是否有效 false表示有效
public bool ReceiveEventFlag = false;
public static byte[] _data = new byte[12];
private List<byte> receivedBuffer = new List<byte>();
public List<byte> trmpListBuffer = new List<byte>();
/// <summary>
/// 接收缓冲区
/// </summary>
public List<byte> ReceivedBuffer
{
get { return receivedBuffer; }
set { receivedBuffer = value; }
}
public struct UpgradeFile
{
public int intAddress;
public List<byte> UpgradeData;
}
#region 获取串口名
private string protName;
public string PortName
{
get { return _serialPort.PortName; }
set
{
_serialPort.PortName = value;
protName = value;
}
}
#endregion
#region 获取比特率
private int baudRate;
public int BaudRate
{
get { return _serialPort.BaudRate; }
set
{
_serialPort.BaudRate = value;
baudRate = value;
}
}
#endregion
#region 默认构造函数
/// <summary>
/// 默认构造函数,操作COM1,速度为9600,没有奇偶校验,8位字节,停止位为1 "COM1", 9600, Parity.None, 8, StopBits.One
/// </summary>
public SerialPortUtil()
{
//_serialPort = new SerialPort();
}
#endregion
#region 构造函数
/// <summary>
/// 构造函数,
/// </summary>
/// <param name="comPortName"></param>
public SerialPortUtil(string comPortName)
{
_serialPort = new SerialPort();
_serialPort.PortName = comPortName;
_serialPort.BaudRate = 115200;
_serialPort.DataBits = 8; //每个字节的标准数据位长度
_serialPort.StopBits = StopBits.One; //设置每个字节的标准停止位数
_serialPort.Parity = Parity.None; //设置奇偶校验检查协议
_serialPort.ReadTimeout = 3000; //单位毫秒
_serialPort.WriteTimeout = 3000; //单位毫秒
_serialPort.RtsEnable = true;
_serialPort.Open();
//_serialPort.ReceivedBytesThreshold = 1;
_serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
}
#endregion
#region 构造函数,可以自定义串口的初始化参数
/// <summary>
/// 构造函数,可以自定义串口的初始化参数
/// </summary>
/// <param name="comPortName">需要操作的COM口名称</param>
/// <param name="baudRate">COM的速度</param>
/// <param name="parity">奇偶校验位</param>
/// <param name="dataBits">数据长度</param>
/// <param name="stopBits">停止位</param>
public SerialPortUtil(string comPortName, int baudRate, Parity parity, int dataBits, StopBits stopBits)
{
_serialPort = new SerialPort(comPortName, baudRate, parity, dataBits, stopBits);
_serialPort.RtsEnable = true; //自动请求
_serialPort.ReadTimeout = 3000;//超时
setSerialPort();
}
#endregion
#region 析构函数
/// <summary>
/// 析构函数,关闭串口
/// </summary>
~SerialPortUtil()
{
try
{
if (_serialPort.IsOpen)
_serialPort.Close();
}
catch (Exception ex)
{
}
}
#endregion
#region 设置串口参数
/// <summary>
/// 设置串口参数
/// </summary>
/// <param name="comPortName">需要操作的COM口名称</param>
/// <param name="baudRate">COM的速度</param>
/// <param name="dataBits">数据长度</param>
/// <param name="stopBits">停止位</param>
public void setSerialPort(string comPortName, int baudRate, int dataBits, in
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Threading;
namespace Utility
{
public class SerialPortUtil
{
public static SerialPort _serialPort = null;
//定义委托
public delegate void SerialPortDataReceiveEventArgs(object sender, SerialDataReceivedEventArgs e, byte[] bits);
//定义接收数据事件
public event SerialPortDataReceiveEventArgs DataReceived;
//定义委托
public delegate void SerialPortDataReceiveEventArgss(object sender, SerialDataReceivedEventArgs e, List<byte> buff);
//定义接收数据事件
public event SerialPortDataReceiveEventArgss DataReceiveds;
//定义接收错误事件
//public event SerialErrorReceivedEventHandler Error;
//接收事件是否有效 false表示有效
public bool ReceiveEventFlag = false;
public static byte[] _data = new byte[12];
private List<byte> receivedBuffer = new List<byte>();
public List<byte> trmpListBuffer = new List<byte>();
/// <summary>
/// 接收缓冲区
/// </summary>
public List<byte> ReceivedBuffer
{
get { return receivedBuffer; }
set { receivedBuffer = value; }
}
public struct UpgradeFile
{
public int intAddress;
public List<byte> UpgradeData;
}
#region 获取串口名
private string protName;
public string PortName
{
get { return _serialPort.PortName; }
set
{
_serialPort.PortName = value;
protName = value;
}
}
#endregion
#region 获取比特率
private int baudRate;
public int BaudRate
{
get { return _serialPort.BaudRate; }
set
{
_serialPort.BaudRate = value;
baudRate = value;
}
}
#endregion
#region 默认构造函数
/// <summary>
/// 默认构造函数,操作COM1,速度为9600,没有奇偶校验,8位字节,停止位为1 "COM1", 9600, Parity.None, 8, StopBits.One
/// </summary>
public SerialPortUtil()
{
//_serialPort = new SerialPort();
}
#endregion
#region 构造函数
/// <summary>
/// 构造函数,
/// </summary>
/// <param name="comPortName"></param>
public SerialPortUtil(string comPortName)
{
_serialPort = new SerialPort();
_serialPort.PortName = comPortName;
_serialPort.BaudRate = 115200;
_serialPort.DataBits = 8; //每个字节的标准数据位长度
_serialPort.StopBits = StopBits.One; //设置每个字节的标准停止位数
_serialPort.Parity = Parity.None; //设置奇偶校验检查协议
_serialPort.ReadTimeout = 3000; //单位毫秒
_serialPort.WriteTimeout = 3000; //单位毫秒
_serialPort.RtsEnable = true;
_serialPort.Open();
//_serialPort.ReceivedBytesThreshold = 1;
_serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
}
#endregion
#region 构造函数,可以自定义串口的初始化参数
/// <summary>
/// 构造函数,可以自定义串口的初始化参数
/// </summary>
/// <param name="comPortName">需要操作的COM口名称</param>
/// <param name="baudRate">COM的速度</param>
/// <param name="parity">奇偶校验位</param>
/// <param name="dataBits">数据长度</param>
/// <param name="stopBits">停止位</param>
public SerialPortUtil(string comPortName, int baudRate, Parity parity, int dataBits, StopBits stopBits)
{
_serialPort = new SerialPort(comPortName, baudRate, parity, dataBits, stopBits);
_serialPort.RtsEnable = true; //自动请求
_serialPort.ReadTimeout = 3000;//超时
setSerialPort();
}
#endregion
#region 析构函数
/// <summary>
/// 析构函数,关闭串口
/// </summary>
~SerialPortUtil()
{
try
{
if (_serialPort.IsOpen)
_serialPort.Close();
}
catch (Exception ex)
{
}
}
#endregion
#region 设置串口参数
/// <summary>
/// 设置串口参数
/// </summary>
/// <param name="comPortName">需要操作的COM口名称</param>
/// <param name="baudRate">COM的速度</param>
/// <param name="dataBits">数据长度</param>
/// <param name="stopBits">停止位</param>
public void setSerialPort(string comPortName, int baudRate, int dataBits, in