/// <summary> /// 使用事件觸發方式來實現串口數據的讀取 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) { byte[] Resoursedata = new byte[serialPort.BytesToRead]; int count = serialPort.Read(Resoursedata, 0, Resoursedata.Length);//在此就可以讀取到當前緩衝區內的數據 //執行數據操作 serialPort.DiscardInBuffer(); //丟棄傳輸緩衝區數據 serialPort.DiscardOutBuffer(); //每次丟棄接收緩衝區的數據 if (count > 0) { if (SerialPortMessageEvent != null && SerialPortMessageEvent.GetInvocationList().Length > 0) // If somebody is listening { SerialPortMessageEvent.Invoke(Resoursedata); // Invoke方法防止主線程擁堵衝突 } } }
/// <summary> /// A2雷达,监听串口,读取串口消息 /// </summary> private void ListenSerialPort_RPLidarAX() { while (m_SerialPort != null && m_SerialPort.IsOpen) { try { int bufferSize = m_SerialPort.ReadBufferSize; byte[] buf = new byte[bufferSize]; int count = m_SerialPort.Read(buf, 0, bufferSize); if (count > 0) { //if (m_IsFristCommond) //{ // m_IsFristCommond = false; // byte[] splitArray = new byte[count - 1]; // Array.Copy(buf, 1, splitArray, 0, count - 1); // if (SerialPortMessageEvent != null && SerialPortMessageEvent.GetInvocationList().Length > 0) // If somebody is listening // { // SerialPortMessageEvent(splitArray); // } //} //else //{ byte[] splitArray = new byte[count]; Array.Copy(buf, 0, splitArray, 0, count); if (SerialPortMessageEvent != null && SerialPortMessageEvent.GetInvocationList().Length > 0) // If somebody is listening { SerialPortMessageEvent(splitArray); } //} } } catch (System.Exception e) { Debug.LogWarning(e.Message); } } }
private void ListenSerialPort() { while ((serialPort.IsOpen == true)) { try { int bufferSize = serialPort.ReadBufferSize; // byte[] buf = new byte[bufferSize]; int count = serialPort.Read(buf, 0, bufferSize); if (count > 0) { if (SerialPortMessageEvent != null && SerialPortMessageEvent.GetInvocationList().Length > 0) // If somebody is listening { SerialPortMessageEvent.Invoke(buf); } } } catch (System.Exception) { } } }
/// <summary> /// G4雷达,监听串口,读取串口消息 /// </summary> private void ListenSerialPort_YDLidarG4() { while (m_SerialPort != null && m_SerialPort.IsOpen) { try { int bufferSize = m_SerialPort.ReadBufferSize; byte[] buf = new byte[bufferSize]; int count = m_SerialPort.Read(buf, 0, bufferSize); byte[] splitArray = new byte[count]; Array.Copy(buf, 0, splitArray, 0, count); if (SerialPortMessageEvent != null && SerialPortMessageEvent.GetInvocationList().Length > 0) { SerialPortMessageEvent(splitArray); } //Debug.Log("Buffer.cout:" + count + " Data: " + SerialCommunicationUtility.ByteToHexString(splitArray)); } catch (Exception e) { Debug.LogWarning(e.Message); } //try //{ // byte buf = Convert.ToByte(m_SerialPort.ReadByte()); // m_Buffer.Add(buf); // while (m_Buffer.Count >= 2) // { // if (m_Buffer[0] == 0xAA && m_Buffer[1] == 0x55) // { // //Debug.Log("内层收到未处理消息"); // if (m_Buffer.Count < 4) // { // break; // } // int numLen = m_Buffer[3]; // if (m_Buffer.Count < numLen * 2 + 10) // { // break; // } // //Debug.Log("numLen: " + numLen); // Data_Process(numLen, m_Buffer); // //一条完整数据存储进行处理移除前面一条完整数据 // m_Buffer.RemoveRange(0, numLen * 2 + 10); // } // else // { // m_Buffer.RemoveAt(0); // } // } // //Debug.Log("buffer.Count: " + buffer.Count + " " + RunSerial.byteToHexStr(buffer.ToArray())); //} //catch (Exception e) //{ // Debug.LogWarning(e.Message); //} } }