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()函数 的反编译 结果如下

  • 相关阅读:
    跃迁方法论 Continuous practice
    EPI online zoom session 面试算法基础知识直播分享
    台州 OJ 2648 小希的迷宫
    洛谷 P1074 靶形数独
    洛谷 P1433 DP 状态压缩
    台州 OJ FatMouse and Cheese 深搜 记忆化搜索
    台州 OJ 2676 Tree of Tree 树状 DP
    台州 OJ 2537 Charlie's Change 多重背包 二进制优化 路径记录
    台州 OJ 2378 Tug of War
    台州 OJ 2850 Key Task BFS
  • 原文地址:https://www.cnblogs.com/12xiaole/p/7472206.html
Copyright © 2011-2022 走看看