コード例 #1
0
    /// <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方法防止主線程擁堵衝突
            }
        }
    }
コード例 #2
0
        /// <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);
                }
            }
        }
コード例 #3
0
 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)
         {
         }
     }
 }
コード例 #4
0
        /// <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);
                //}
            }
        }