首页 > 解决方案 > 读取串口数据而不丢失任何数据和解析

问题描述

我有一个每 200 毫秒通过串行端口发送数据的系统。我正在尝试使用串行端口数据读取来读取它。我有两种类型的数据来读取和解析它。第一个数据序列如下所示

$System1;c62;23.34;E-1;E-2;-56.67;567;

第二个数据序列看起来像这样

\u0006\u0001\0d\o?\"\0$?##STA\r\nSystemLevel:Run\r\nstatus:1\r\n................ \r\n停止##

第一个序列数据将每 200 毫秒发送一次,第二个序列数据将在第一个数据序列之间每 20 秒发送一次。

我正在尝试如下读取串行端口

  void ConfigcomPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {

        StringBuilder charSrting = new StringBuilder();
        //string Data;
        System.Threading.Thread.Sleep(150);
        string Data = configcomPort.ReadExisting();

        if (Data.StartsWith("$System1"))
        {
            try
            {
                string[] splitdata = Data.Split(';', '\r', '\n');

                double.TryParse(splitdata[3], NumberStyles.Any, CultureInfo.InvariantCulture, out Position1);
                double.TryParse(splitdata[4], NumberStyles.Any, CultureInfo.InvariantCulture, out position2);
                supplyVoltage = splitdata[2];
                if (splitdata[1].StartsWith("C"))
                {
                    batteryStatus = BatteryStatus[1];
                    BatteryPercent = double.Parse(splitdata[1].Substring(1, 2));
                }

                NotifyDataReceived(system, value.position1);
                UpdateBatteryStatus(BatteryPercent);

            }
            catch (Exception ex)
            {

                string test = ex.Message;
            }
        }
        else
        {
           try
            {
                string[] Statussplit = Data.Split(';', ':', '\r', '\n')
                //trying to parse second sequence here.
            }
            catch (Exception ex)
            {

                string test = ex.Message;
            }
         }
     }

问题是我无法正确读取第二个序列。数据丢失。我能够接收第一个序列并对其进行解析,但在两者之间我得到了第二个没有正确接收的序列。我总是错过第二个序列中的一些数据,所以无法解析它。

有没有办法解决这个问题??我试过“bytestoread”,但还是一样。有没有最好的方法来读取所有序列并解析出来?

问候,拉姆。

标签: c#serial-port

解决方案


推荐阅读