我需要帮助来制作示波器软件。我已经能够使用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毫秒。那么如何让这个应用程序快速执行? 请帮忙!
答案 0 :(得分:0)
你的眼睛看不到超过20/30毫秒的事情,所以更快地绘制它们是没有意义的(出于同样的原因,计算机屏幕每秒刷新25/30次)
可能是你的问题不是经常绘制它们,而是绘制一个视觉提示,让观察者明白有更多他无法看到的数据。
事实上,您必须将数据采集任务(必须更快,因为您正在观察和测量的现象)与数据渲染任务分开(必须像用户眼睛一样慢,并且没有并行运行)中断采集)并以用户可以理解的方式绘制数据。
想一想模拟示波器的工作原理:
如果你在1ms的时基上看一个10Khz的波,一个&#34;触发&#34;每当波浪的水平越过选定的值时开始扫描。 san需要1ms,因此绘制了10个周期。只有你无法捕捉它的眼睛看不见。
您可以看到图像,因为在相同的值上触发了30次以上的扫描,由于波的周期性特征,反复重绘相同的路径(在不同的时间段内)。