繁体   English   中英

需要有关从传入串行数据中以特定时间间隔捕获数据的算法的帮助

[英]Need help on an algorithm that catches data on specific intervals from incoming serial data

我需要帮助来创建一种算法,该算法可以如图所示以特定时间间隔捕获数据。

这些是来自 MCU 的传入消息,并拆分为 C# 以获取有关传感器数据的信息。 一个数据package如下;

:;10;123.123
  • :是消息 package 发起者
  • 10是距离
  • 123.123是传感器读数

消息拆分发生在以下代码中;

else if(s[0] == ':')
{
  string[] a = new String[3];
  string[] z = s.Split(';');

  for (int i = 0; i < z.Length; i++)
  {
    switch (i)
     {
       case 0:
           a[0] = z[i + 1];
           temp_distance = int.Parse(a[0]);
           break;
       case 1:
           a[1] = z[i+1];
           temp_dimension = float.Parse(a[1]);
           break;
      }
   }
}

如图所示,每个特定时间间隔都需要调用 function。 在此处输入图像描述

任何帮助表示赞赏。

据我了解,您想对从端口收到的每 5(例如)条记录调用 function。 如果是,我认为您应该为传感器数据创建一个 class。 然后在收到完整的数据块后,创建其 object 并将其添加到列表中。 然后您可以按距离字段对列表进行排序,当您的 List.Count 适合调用您的 function 时,您可以调用它并将列表传递给它。

你的代码有点奇怪。 for 循环内的 switch 语句基本上取消了循环,导致每种情况都执行一次。 我建议删除循环和 switch 语句:

else if(s[0] == ':;')
{
    string[] z = s.Split(';');
    temp_distance = int.Parse(z[1]);

    if (temp_distance % 50 == 0) { // When distance = 0, 50, 100, 150 ...
        temp_dimension = float.Parse(z[2]);

        func(prev_distance, prev_dimension, temp_distance, temp_dimension);

        // Remember the values for the next iteration.
        prev_distance = temp_distance;
        prev_dimension = temp_dimension;
    }
}

我假设此代码嵌入在从输入中读取行的外部循环中(这在您的代码中并不明显)。 因此,您可以通过在分配新值之前将它们存储到另一组变量来引用以前的值。

我删除了数组a ,因为这些操作不需要它; 但是,如果您在其他地方需要它,您可能必须重新添加它(这在您的代码中也不明显)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM