C# serialport 串口操作类
//串口操作类
public class MsComm
{
Public static List q_port = new List ();//保存操作的串口
private SerialPort comm = new SerialPort();
public delegate void ReceiveData(Object Sender,string Data);//定义串口接收事件
public event ReceiveData Event_ReceiveData = null;
private Baudrate rs_Baud;
public static bool conncetstate=false;
public MsComm()
{
}
//初始化串口并打开串口
public bool add(string PortNum, string Parity, string BaudRate, string ByteSize,string stopbit, string NewLine)
{
System.IO.Ports.Parity par = System.IO.Ports.Parity. None;
switch (Parity)
{
case "None":
{
par = System.IO.Ports.Parity. None;
} break;
case "Odd":
{
par = System.IO.Ports.Parity. Odd;
} break;
case "Mark":
{
par = System.IO.Ports.Parity. Mark;
} break;
case "Space":
{
par = System.IO.Ports.Parity. Space;
} break;
case "Even":
{
par = System.IO.Ports.Parity. Space;
} break;
}
System.IO.Ports.StopBits bit = System.IO.Ports.StopBits.One;
switch (stopbit)
{
case "1":
{
bit = System.IO.Ports.StopBits.One;
} break;
case "1.5":
{
bit = System.IO.Ports.StopBits.OnePointFive;
} break;
case "2":
{
bit = System.IO.Ports.StopBits.Two;
} break;
}
comm = new SerialPort(PortNum, Convert.ToInt32(BaudRate), par,
Convert.ToInt32(ByteSize),
bit);//初始化串口
try
{
comm.Open();
}
catch (Exception ex)
{
return false;
}
comm.NewLine = NewLine;
comm.DataReceived += new SerialDataReceivedEventHandler(comm_DataReceived);//接收数据
事件
q_port.Add(comm);
return true;
}
//关闭并删除串口
public void Delete(string PortNum)
{
foreach (SerialPort s in q_port)
{
if (PortNum == s.PortName)
{
s.Close();
q_port.Remove(s);
}
}
}
//串口接收事件方法
private void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if(((SerialPort)sender).PortName=="COM1")
{
try
{
byte[] buf = new byte[comm.BytesToRead];
byte[] buffer = new byte[13];
// string data = comm.ReadLine();
// buffer= ASCIIEncoding.ASCII.GetBytes(data);
int b = comm.Read(buffer, 0, buffer.Length);
//data = ASCIIEncoding.ASCII.GetString(buf);
string result="";
for (int i = 0; i < buffer.Length; i++)
{
result += Convert.ToString(buffer[i], 16);//转化为十六进制码
}
if (Event_ReceiveData != null)
{
}
Event_ReceiveData(sender,result);
}
catch (Exception ex)
{
int i = 0;
}
}
}
//以字符串形式发送数据
public void SendData(string Data, string PortNum)
{
foreach (SerialPort s in q_port)
{
if (PortNum == s.PortName)
{
if (s.IsOpen)
{
s.WriteLine(Data);
}
}
}
}
//以字节形式发送数据
public void SendByteData(byte[] Data, string PortNum)
{
for (int i = 0; i < q_port.Count;i++ )
{
if (PortNum == q_port[i].PortName)
{
if (q_port[i].IsOpen)
{
q_port[i].Write(Data, 0, Data.Length);
}
}
}
}
private SerialPort GetPort(string PortNum)
{
foreach (SerialPort s in q_port)
{
if (PortNum == s.PortName)
{
return s;
}
}
return null;
}
}
//具体操作
public static MsComm mcomm10 = new MsComm(); //实例化串口类
tyzutai.main.mcomm10.Event_ReceiveData += new
MsComm.ReceiveData(mcomm_Event_ReceiveData);
//接收事件实例化
//接收数据处理方法
void mcomm_Event_ReceiveData(object Sender, string Data)
{
}
//此处处理接收到的数据
//发送数据
tyzutai.main.mcomm10.SendData(senddatastring,"COM1");//发送字符串
tyzutai.main.mcomm10.SendByteData(arr, "COM1");//发送字节