Мне нужна помощь в создании программного обеспечения осциллографа. Я уже умею создавать график, используя инструмент диаграммы 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 миллисекунды. Итак, как я могу быстро выполнить это приложение? Пожалуйста помоги!
Вещи быстрее, чем 20/30 миллисекунд, не могут быть замечены вашими глазами, поэтому не имеет смысла делать их более быстрыми (экран компьютера обновляется 25/30 раз в секунду по той же причине)
Может быть, проблема в том, что вы не часто замышляете их, но создаете визуальный сигнал, который позволяет наблюдателю понять, что есть больше данных, которые он не видит.
У вас есть -in fact-, чтобы отделить задачу сбора данных (которая должна быть быстрее, чем явления, которые вы наблюдаете и измеряете) из задачи рендеринга данных (которая должна быть медленной, как глаза пользователя, и работать параллельно без прерывания приобретение) и распечатать данные таким образом, чтобы пользователь мог их понять.
Подумайте, как работает аналоговый осциллограф:
если вы наблюдаете 10-килограммовую волну на базе времени в 1 мс, "триггер" запускает сканирование каждый раз, когда уровень волны пересекает выбранное значение. Сан принимает 1 мс, поэтому набирается 10 периодов. Это единственное сканирование невидимо для ваших глаз, которое не может захватить его.
Вы видите изображение, потому что сканирование 30+ запускается с одним и тем же значением, перерисовывая тот же путь (в разные периоды) снова и снова из-за периодического характера волны.