高速采集卡绘图效率问题
摘 要
波形显示控件实现了
同时显示多条数据曲线、
局部放大查看、
波形显示自动调整最佳坐标范围、
动态显示波形等功能。
创新之处在于设计了一种方法,使得波形显示控件的坐标轴的起点值和终点值能够以浮点数显示,并自动根据当前波形显示控件的大小,描绘出符合用户视觉的坐标标尺。
关键词:波形显示控件;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()函数 的反编译 结果如下