示波器软件的高速动态图表

时间:2014-04-03 06:23:53

标签: c++ winforms timer charts oscilloscope

我需要帮助来制作示波器软件。我已经能够使用winform图表工具制作图表。这个应用程序从usb设备接收数据并将其绘制在图表中。我还使用表单更新程序计时器控件来更新表单并采取来自usb的数据并将其绘制成图表。

private: System::Void FormUpdateTimer_Tick(System::Object^  sender, System::EventArgs^  e) {

if(ReadFile(ReadHandleToUSBDevice, &INBuffer, 65, &BytesRead, 0))       //Blocking function, unless an "overlapped" structure is used   
                {
                    //INBuffer[0] is the report ID, which we don't care about.
                    //INBuffer[1] is an echo back of the command (see microcontroller firmware).
                    //INBuffer[2] and INBuffer[3] contains the ADC value (see microcontroller firmware).  
                    if(INBuffer[1] == 0x37)
                    {
                        data=(INBuffer[3] << 8) + INBuffer[2];  
this->chart1->Series["Series1"]->Points->AddXY(k,data);

问题是表单每1毫秒更新一次。但是我需要更快速地执行表单来获取数据并快速绘制它。

updateTimer的值不能小于1毫秒。那么如何让这个应用程序快速执行? 请帮忙!

1 个答案:

答案 0 :(得分:0)

你的眼睛看不到超过20/30毫秒的事情,所以更快地绘制它们是没有意义的(出于同样的原因,计算机屏幕每秒刷新25/30次)

可能是你的问题不是经常绘制它们,而是绘制一个视觉提示,让观察者明白有更多他无法看到的数据。

事实上,您必须将数据采集任务(必须更快,因为您正在观察和测量的现象)与数据渲染任务分开(必须像用户眼睛一样慢,并且没有并行运行)中断采集)并以用户可以理解的方式绘制数据。

想一想模拟示波器的工作原理:

如果你在1ms的时基上看一个10Khz的波,一个&#34;触发&#34;每当波浪的水平越过选定的值时开始扫描。 san需要1ms,因此绘制了10个周期。只有你无法捕捉它的眼睛看不见。

您可以看到图像,因为在相同的值上触发了30次以上的扫描,由于波的周期性特征,反复重绘相同的路径(在不同的时间段内)。