0

我需要帮助来制作示波器软件。我已经能够使用 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 毫秒的值。那么我怎样才能让这个应用程序快速执行呢?请帮忙!

4

1 回答 1

0

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

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

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

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

如果您在 1ms 时基上观看 10Khz 波,则每次波的电平越过选定值时,“触发器”就会开始扫描。san 需要 1ms,因此绘制了 10 个句点。唯一的扫描是你无法捕捉到它的眼睛看不见的。

您看到该图像是因为在同一值上触发了 30 多次扫描,由于波的周期性特性,一遍又一遍地重绘相同的路径(在不同的时期)。

于 2014-04-03T06:37:18.980 回答