高速采集卡绘图效率问题

摘    要

    波形显示控件实现了

    同时显示多条数据曲线

    局部放大查看

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

    动态显示波形等功能。

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

    关键词:波形显示控件;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()函数 的反编译 结果如下

posted @ 2017-09-04 09:34  Ecr_hool  阅读(309)  评论(0编辑  收藏  举报