logo资料库

C# serialport 串口发送与接收数据操作类.docx

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
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");//发送字节
分享到:
收藏