zoukankan      html  css  js  c++  java
  • 高速采集卡绘图效率问题

    摘    要

        波形显示控件实现了

        同时显示多条数据曲线

        局部放大查看

        波形显示自动调整最佳坐标范围

        动态显示波形等功能。

        创新之处在于设计了一种方法,使得波形显示控件的坐标轴的起点值和终点值能够以浮点数显示,并自动根据当前波形显示控件的大小,描绘出符合用户视觉的坐标标尺。

        关键词:波形显示控件;C#;GDI+;动态波形

    (1)    多条波形数据的显示。

    该波形显示控件能够同时显示多条波形数据,用户能够控制每条波形数据的显示颜色、线宽、线帽、以及线转折的样式。并且提供了三种波形数据显示的方式:连续数据线、离散点、条形图。

    (2)    友好坐标标尺的显示。

    该波形显示控件能够根据当前显示数据的坐标范围,友好地显示坐标标尺。例如X轴坐标起始值为34.2,结束坐标值为100.7,则控件不是简单得将坐标10等分并显示并不友好的坐标值,而是通过计算当前波形显示控件的大小,显示40、50……这样的友好的坐标值,并判断是否需要继续在40到50的坐标值之间显示更小分度的坐标值。

    (3)    波形显示区域网格的显示。

    该波形显示控件可以显示同坐标标尺的坐标线相对应的网格,使得用户能够更直观地观察波形数据。

    (4)    波形的局部放大。

    该波形显示控件提供了波形局部放大的功能。并根据实际使用和测试,控制了波形放大的精度,以免产生数据溢出的问题。

    (5)    坐标自动调整。

    该波形显示控件能够根据当前要显示的波形数据的值,自动选择最佳的坐标范围,来直观地在控件的波形显示区域显示完整的波形曲线。

    (6)    外观颜色方案的修改。

    该波形显示控件能够修改外观样式,诸如背景色、网格颜色、坐标线颜色、坐标值颜色等都可以进行调整,以使控件外观能够符合软件整体风格。

    (7)    其他细节。

    该波形显示控件还设计了一个工具栏,可以方面地使用网格显示、局部放大、坐标自动调整、恢复默认坐标功能。另外还设计右键菜单,能够显示当前鼠标位置的具体坐标值,以及工具栏按钮的快捷按钮。

     add my change

    由于实际的工作环境,刷新效率是一个很重要的问题,所以我们从效率出发,重新设计或更改,删除一些影响效率或者不重要的功能

    1、

      else if (_isAutoModeXY)
                    {
                        //【非放大模式】,且为【自动坐标模式】,则保证画图的点在图形中显示
                        #region **获取数据集合的最大坐标范围,并修改标定坐标范围和标定权值,并修改坐标范围**
                        //遍历每条数据集合
                        for (int i = 0; i < _listX.Count; i++)
                        {
                            //遍历数据集合中的每个点
                            for (int j = 0; j < _listX[i].Count; j++)
                            {
                                if (_listX[i][j] < _fXBegin)
                                {
                                    _changXBegionOrEndGO(_listX[i][j], true);
                                    _fXBegin = _fXBeginGO;
                                }
                                else if (_listX[i][j] > _fXEnd)
                                {
                                    _changXBegionOrEndGO(_listX[i][j], false);
                                    _fXEnd = _fXEndGO;
                                }
                                if (_listY[i][j] < _fYBegin)
                                {
                                    _changYBegionOrEndGO(_listY[i][j], true);
                                    _fYBegin = _fYBeginGO;
                                }
                                else if (_listY[i][j] > _fYEnd)
                                {
                                    _changYBegionOrEndGO(_listY[i][j], false);
                                    _fYEnd = _fYEndGO;
                                } 
                            }
                        }
                        #endregion
                    }

    固定档位10mV或者固定档位50mV,其峰峰值已经固定,不会超过量程,以此方法设计,可以省略遍历“各组数据,自动选择最佳的坐标范围”

    2、默认坐标范围定位定位x-0-200 ,y-±80,坐标自动调整按钮无效可以去掉;

                this.zGraph1.m_fXBeginSYS = 0F;
                this.zGraph1.m_fXEndSYS = 200F;
                this.zGraph1.m_fYBeginSYS = -80F;
                this.zGraph1.m_fYEndSYS = 80F;

    3、遍历数据,调整坐标轴,注释掉; X Y轴刷新,注释掉;

     //更新坐标显示
                    //pictureBoxLeft.Refresh();
                    //pictureBoxBottom.Refresh();

     

    4、再次试图用Invalidate 代替Refresh的尝试

    ------解决思路----------------------
    Invalidate 是告诉系统要刷新, 而另一个则是亲自刷新, 不同之处在于前者刷新时系统会寻找合理的时机,
    比如当页面在后台的时候其实不会刷新.
    ------解决思路----------------------
    你说的那个是什么 我不知道 
    但是 对System.Windows.Forms.Control.Refresh()函数 的反编译 结果如下

  • 相关阅读:
    病毒分裂(分治)
    【CQYZ-vijos】P1333 舞伴的搭配(贪心算法)
    算法系列之图--拓扑排序
    算法系列之图--DFS
    算法系列之图--BFS
    python读取txt里的json文件,存到excel,例子2
    python读取txt里的json文件,存到excel,例子1
    python读取excel数据做分类统计
    python datetime中timedelta的用法
    bootstrap用法小计
  • 原文地址:https://www.cnblogs.com/12xiaole/p/7472206.html
Copyright © 2011-2022 走看看