2022-11-17--代码优化
2019-08-02--提高串口接收方法效率
2019-06-26--代码优化
2018-11-27--添加字节数组合并方法
2018-08-11--优化串口接收速度
2018-04-28--优化串口接收数据
转载请保留原创地址:http://www.luofenming.com/show.aspx?id=ART2017121500002
2019-08-02--提高串口接收方法效率
2019-06-26--代码优化
2018-11-27--添加字节数组合并方法
2018-08-11--优化串口接收速度
2018-04-28--优化串口接收数据
转载请保留原创地址:http://www.luofenming.com/show.aspx?id=ART2017121500002
public class SerialCommon { public string[] portName = SerialPort.GetPortNames();//获取当前计算机的串行端口名称数组 public SerialPort MySerialPort = new SerialPort(); /// <summary> /// 初始化串口 /// </summary> /// <param name="PortName">串口号</param> /// <param name="BaudRate">波特率</param> /// <param name="DataBits">数据位</param> /// <param name="stopBits">停止位</param> /// <param name="parity">奇偶校验</param> public bool InitComm(string PortName, int BaudRate, int DataBits, StopBits stopBits, Parity parity) { try { if (MySerialPort.IsOpen) { MySerialPort.Close(); } MySerialPort.PortName = PortName; MySerialPort.BaudRate = BaudRate; MySerialPort.DataBits = DataBits; MySerialPort.StopBits = stopBits; MySerialPort.Parity = parity; return true; } catch { return false; } } public bool OpenPort() { try { if (!MySerialPort.IsOpen) { MySerialPort.Open(); } } catch (Exception ex) { return false; } return true; } public bool ClosePort() { try { if (MySerialPort != null) MySerialPort.Close(); } catch (Exception ex) { return false; } return true; } /// <summary> /// 发送数据 /// </summary> /// <param name="data"></param> public bool SendData(byte[] data) { if (MySerialPort.IsOpen) { try { MySerialPort.DiscardInBuffer(); MySerialPort.DiscardOutBuffer(); MySerialPort.Write(data, 0, data.Length); return true; } catch (Exception ex) { } } return false; } /// <summary> /// 接收数据 /// </summary> /// <param name="_Timeout"></param> /// <returns></returns> public byte[] ReceiveData(int _Timeout) { byte[] buffer = new byte[] { }; DateTime t = DateTime.Now; try { #region 接收到数据中断 或 在规定时间内无任何数据中断 while (true) { if (MySerialPort.BytesToRead > 0) { break; } if (DateTime.Compare(DateTime.Now, t.AddMilliseconds(_Timeout)) > 0) { break; } Thread.Sleep(5); } #endregion while (true) { Thread.Sleep(50); int n = MySerialPort.BytesToRead; byte[] buf = new byte[n]; if (n < 1) { break; }//无数据中断退出 MySerialPort.Read(buf, 0, n); buffer = UniteArray(buffer, buf); if (DateTime.Compare(DateTime.Now, t.AddMilliseconds(_Timeout)) > 0) { break; } } return buffer; } catch (Exception ex) { return buffer; } } ///合并数组 public byte[] UniteArray(byte[] ArrayMain, byte[] ArrayItme) { if (ArrayMain == null) { return ArrayItme; } if (ArrayItme == null) { return ArrayMain; } byte[] val = new byte[ArrayMain.Length + ArrayItme.Length]; for (int i = 0; i < val.Length; i++) { if (i < ArrayMain.Length) { val[i] = ArrayMain[i]; } else { val[i] = ArrayItme[i - ArrayMain.Length]; } } return val; } }