使用串行端口读取实时数据,在图表上进行绘图,然后将其保存到Excel文件中

达塔格南

我正在从串行端口绘制实时图表。然后我想按停止按钮。这是图表读数停止的时候。然后,当我按下“保存”按钮时,我希望在此之前绘制在图形上的值保存在Excel工作表中。

到现在为止,我可以达到我的目标,直到停止按钮为止,但是我仍然坚持保存到excel工作表部分。有人可以帮我吗?

我在Visual Studio 2015中使用Windows窗体应用程序,另外我从串行端口获取两个传感器值。

 private void showchart(object sender, EventArgs e)
    {
        readings.Add(sensor.Substring(4,3));
        readings.Add(sensor.Substring(10,3));
        System.Diagnostics.Debug.WriteLine(sensor.Substring(4, 3),sensor.Substring(10,3));

        chart1.Series["test1"].Points.AddXY(0, sensor.Substring(4, 3));
        chart1.Series["test2"].Points.AddXY(0, sensor.Substring(10, 3));

        if 
            ((chart1.Series["test1"].Points.Count > 20) && (chart1.Series["test2"].Points.Count > 20))
        {
            chart1.Series["test1"].Points.RemoveAt(0);
            chart1.Series["test2"].Points.RemoveAt(0);
        }
        chart1.Series["test1"].ChartType = SeriesChartType.Spline;
        chart1.Series["test1"].Color = Color.DarkOrange;
        chart1.Series["test2"].ChartType = SeriesChartType.Spline;
        chart1.Series["test2"].Color = Color.DarkMagenta;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        myport.Close();
        myport.BaudRate = 9600;
        myport.PortName = "COM8";
        myport.Open();
        string sensor = myport.ReadLine();

        try
        {
            string pathfile = @"C: \Users\Raman\Desktop\Real Data\";
            string filename = "real data.txt";
            FileStream fs = new FileStream(pathfile + filename,FileMode.Append, FileAccess.Write);
            StreamWriter s = new StreamWriter(fs);
            for (int i = 0; i < readings.Count/2; i++)
            {
                s.WriteLine("A="+readings[2*i] + "\t" +"B="+ readings[2*i+1]);
            }

            MessageBox.Show("Data has been saved to" + pathfile,"Save File");

        }
勒内

首先创建一个数据传输对象(DTO),以保存每行所需的信息。在这种情况下,您的班级可能看起来像这样:

public class Reading
{
     public string A {get; set;}
     public string B {get; set;}
     public DateTime CreationDate {get;set;}
}

您的当前需求List<string> readings = new List<string>()应该变成,Reading readings = new List<Reading>();并且您的ShowChart需求需要适应以使用该新的DTO。

private void showchart(object sender, EventArgs e)
{
    var reading = new Reading{ 
        A = sensor.Substring(4,3),
        B = sensor.Substring(10,3),
        CreationDate = DateTime.Now
    };

    readings.Add(reading);

    var test1Series =  chart1.Series["test1"];
    var test2Series =  chart1.Series["test2"];

    System.Diagnostics.Debug.WriteLine(
         "{0} {1} {2}", 
        reading.A,
        reading.B,
        reading.CreationDate);

    test1Series.Points.AddXY(0, reading.A);
    test2Series.Points.AddXY(0, reading.B);

    if ((test1Series.Points.Count > 20) && 
        (test2Series.Points.Count > 20))
    {
        test1Series.Points.RemoveAt(0);
        test2Series.Points.RemoveAt(0);
    }
    // you only need this once, consider moving it to an init method
    test1Series.ChartType = SeriesChartType.Spline;
    test1Series.Color = Color.DarkOrange;
    test2Series.ChartType = SeriesChartType.Spline;
    test2Series.Color = Color.DarkMagenta;
}

button2_click将需要进行更改,以从中读取Reading对象readings并将其写入CSV文件。注意,我使用了字符串格式来调整输出的形状。我还添加了using语句,以正确关闭和处理用于写入文件的流和文件句柄。

private void button2_Click(object sender, EventArgs e)
{
    try
    {
        string pathfile = @"C:\Users\Raman\Desktop\Real Data\";
        string filename = "Data.csv";
        using(FileStream fs = new FileStream(
            Path.Combine(pathfile, filename), 
            FileMode.Append, 
            FileAccess.Write))
        {
            using(StreamWriter s = new StreamWriter(fs))
            {
              foreach(var reading in readings)
              {
                 // format the output
                 s.WriteLine(
                   "{0:yyyy-MM-dd hh:mm:ss},{1},{2}",
                   reading.CreationDate,
                   reading.A,
                   reading.B
                 );
              }
            }
           MessageBox.Show("Data has been saved to" + pathfile,"Save File");
        }
    }
    catch(Exception exp) 
    {
         MessageBox.Show(exp.Message,"Error");
    }
}

运行此命令时,您将在数据文件中看到:

2016-06-18 09:06:56,ValueFromA,ValueFromB
2016-06-18 09:18:39,AnotherValueFromA,AnotherValueFromB

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Python中实时读取串行数据

来自分类Dev

读取文件并将其保存到对象中。Shiny R中的[不显示加载的数据]

来自分类Dev

如何从rtspsrc中解复用音频和视频,然后使用Matroska Mux将其保存到文件?

来自分类Dev

在Symfony2中使用PHPExcel读取Excel文件,编辑一个单元格的内容,然后保存到数据库

来自分类Dev

如何从R中的串行端口读取数据

来自分类Dev

从Firebase读取数据并将其保存到阵列中(快速)

来自分类Dev

循环执行excel文件,然后将其保存到新文件夹python pandas中

来自分类Dev

从SFTP文件中读取CSV / Excel文件,使用熊猫对这些文件进行一些更改,然后保存回来

来自分类Dev

在Firebase实时数据库上进行公共读取访问是否安全?

来自分类Dev

我正在尝试读取一个字符串,将其加密,然后将其保存到文本文件中,然后读取该文本文件,然后读取已加密的字符串,并在python中对其进行解密

来自分类Dev

将Firebase实时数据库数据保存到SQL表或NoSQL表中

来自分类Dev

通过python将实时数据从数据记录器保存到csv文件

来自分类Dev

无法同时读取多个rds文件并将其保存到单个数据帧中

来自分类Dev

实现pyqtgraph进行实时数据绘图

来自分类Dev

如何读取以空格分隔的数据并将其保存到数组,然后以其他顺序将其写入c ++中的新文本文件中

来自分类Dev

从.json文件中获取特定数据,然后将其保存到python中的2D矩阵/字典中

来自分类Dev

在Symfony2中使用PHPExcel读取Excel文件,编辑一个单元格的内容,然后保存到数据库

来自分类Dev

在CSV文件的一列上进行计算,然后使用python将其添加到文件中

来自分类Dev

无法将数据保存到文件,然后将其加载到Unity3d中

来自分类Dev

如何将来自串行端口的传入数据保存到文本文件

来自分类Dev

从Firebase读取数据并将其保存到阵列中(快速)

来自分类Dev

Java使用readAllLines读取文件并将其保存到列表中

来自分类Dev

循环执行excel文件,然后将其保存到新文件夹python pandas中

来自分类Dev

无法在我的 html 文件中初始化 firebase 并将任何数据保存到实时数据库

来自分类Dev

终端读取文件,然后保存到文件

来自分类Dev

无法从excel文件中以正确格式读取日期时间值并使用python将其保存在数据库中

来自分类Dev

Java读取html文件并将其内容保存到excel文件中

来自分类Dev

将实时数据从opencv保存到python中的txt文件中

来自分类Dev

使用 Altair 从 Json 文件中读取数据并将图表保存到 html

Related 相关文章

  1. 1

    在Python中实时读取串行数据

  2. 2

    读取文件并将其保存到对象中。Shiny R中的[不显示加载的数据]

  3. 3

    如何从rtspsrc中解复用音频和视频,然后使用Matroska Mux将其保存到文件?

  4. 4

    在Symfony2中使用PHPExcel读取Excel文件,编辑一个单元格的内容,然后保存到数据库

  5. 5

    如何从R中的串行端口读取数据

  6. 6

    从Firebase读取数据并将其保存到阵列中(快速)

  7. 7

    循环执行excel文件,然后将其保存到新文件夹python pandas中

  8. 8

    从SFTP文件中读取CSV / Excel文件,使用熊猫对这些文件进行一些更改,然后保存回来

  9. 9

    在Firebase实时数据库上进行公共读取访问是否安全?

  10. 10

    我正在尝试读取一个字符串,将其加密,然后将其保存到文本文件中,然后读取该文本文件,然后读取已加密的字符串,并在python中对其进行解密

  11. 11

    将Firebase实时数据库数据保存到SQL表或NoSQL表中

  12. 12

    通过python将实时数据从数据记录器保存到csv文件

  13. 13

    无法同时读取多个rds文件并将其保存到单个数据帧中

  14. 14

    实现pyqtgraph进行实时数据绘图

  15. 15

    如何读取以空格分隔的数据并将其保存到数组,然后以其他顺序将其写入c ++中的新文本文件中

  16. 16

    从.json文件中获取特定数据,然后将其保存到python中的2D矩阵/字典中

  17. 17

    在Symfony2中使用PHPExcel读取Excel文件,编辑一个单元格的内容,然后保存到数据库

  18. 18

    在CSV文件的一列上进行计算,然后使用python将其添加到文件中

  19. 19

    无法将数据保存到文件,然后将其加载到Unity3d中

  20. 20

    如何将来自串行端口的传入数据保存到文本文件

  21. 21

    从Firebase读取数据并将其保存到阵列中(快速)

  22. 22

    Java使用readAllLines读取文件并将其保存到列表中

  23. 23

    循环执行excel文件,然后将其保存到新文件夹python pandas中

  24. 24

    无法在我的 html 文件中初始化 firebase 并将任何数据保存到实时数据库

  25. 25

    终端读取文件,然后保存到文件

  26. 26

    无法从excel文件中以正确格式读取日期时间值并使用python将其保存在数据库中

  27. 27

    Java读取html文件并将其内容保存到excel文件中

  28. 28

    将实时数据从opencv保存到python中的txt文件中

  29. 29

    使用 Altair 从 Json 文件中读取数据并将图表保存到 html

热门标签

归档