Высокоскоростная динамическая диаграмма для программного обеспечения осциллографа

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 миллисекунды. Итак, как я могу быстро выполнить это приложение? Пожалуйста помоги!

Теги:
timer
winforms
charts
oscilloscope

1 ответ

0

Вещи быстрее, чем 20/30 миллисекунд, не могут быть замечены вашими глазами, поэтому не имеет смысла делать их более быстрыми (экран компьютера обновляется 25/30 раз в секунду по той же причине)

Может быть, проблема в том, что вы не часто замышляете их, но создаете визуальный сигнал, который позволяет наблюдателю понять, что есть больше данных, которые он не видит.

У вас есть -in fact-, чтобы отделить задачу сбора данных (которая должна быть быстрее, чем явления, которые вы наблюдаете и измеряете) из задачи рендеринга данных (которая должна быть медленной, как глаза пользователя, и работать параллельно без прерывания приобретение) и распечатать данные таким образом, чтобы пользователь мог их понять.

Подумайте, как работает аналоговый осциллограф:

если вы наблюдаете 10-килограммовую волну на базе времени в 1 мс, "триггер" запускает сканирование каждый раз, когда уровень волны пересекает выбранное значение. Сан принимает 1 мс, поэтому набирается 10 периодов. Это единственное сканирование невидимо для ваших глаз, которое не может захватить его.

Вы видите изображение, потому что сканирование 30+ запускается с одним и тем же значением, перерисовывая тот же путь (в разные периоды) снова и снова из-за периодического характера волны.

  • 0
    Точки сканирования занимают n секунд, чтобы исчезнуть, то есть они медленно исчезают, не обновляя каждый кадр, поэтому, в идеале, вы должны использовать видеокарту, которая может считывать обратно из своего собственного буфера и точки исчезновения с течением времени, чтобы симулировать замирание фосфора в осциллографе.
  • 0
    Ну ... не совсем: затухание ЭЛТ имеет экспоненциальный спад с постоянной времени около 10 мс. Через 50 мс 90% света исчезло. (Если это займет «секунды», будет невозможно нарисовать любое движение!) Устойчивость изображения обусловлена непрерывным повторением дорожки. Какими бы ни были аналоговые осциллографы, когда временная база становится больше 0,1 секунды (и показывает точку смещения больше, за ней следует тень). Но проблема здесь не в том, чтобы подражать физике, а в том, чтобы экран компьютера работал на собственной скорости, а не на сигнале.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню