Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 282

/ вопрос открыт /

Здравствуйте, эксперты!
Прошу Вашей помощи. У меня программа собирает данные с АЦП в одномерный массив. Я хочу рисовать эти данные в реальном времени. Пробовал в Series методом Add, но получается очень медленно. Может рисовать на Canvas, по пикселям, но здесь почитал что можно еще быстрее. Подскажите как лучше в моем случае, или почитать что-нибудь дайте по этому вопросу. Заранее благодарен! Евгений.

Евгений Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Евгений (статус: Посетитель)
Вопрос отправлен: 9 января 2009, 09:16
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Есть такой компонент THeartMachine. Рисует фрагмент графика в реальном времени. Может он подойдёт?
Прицепляю к ответу. Это, предположительно, старая версия. На сайте автора может быть апдейт.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 9 января 2009, 22:15
Оценка за ответ: 5

Комментарий к оценке: Хороший компонентик, но как я понял он основан на Canvas. Попробую.

Мини-форум вопроса

Всего сообщений: 9; последнее сообщение — 11 января 2009, 03:26; участников в обсуждении: 4.
Георг

Георг (статус: Посетитель), 9 января 2009, 10:00 [#1]:

Попробуй Trend компоненты типа TJBKTrend или другие.
Вадим К

Вадим К (статус: Академик), 9 января 2009, 11:15 [#2]:

А с какой скоростью идут данные? вполне возмножно, что обычная прорисовка по канве будет достаточно быстра.
Галочка "подтверждения прочтения" - вселенское зло.
Косолапов Дмитрий Юрьевич

Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 9 января 2009, 15:32 [#3]:

Быстрее, видимо, получится через DirectX или OpenGL. Для первого варианта хорошо подходят компоненты DelphiX.
Вадим К

Вадим К (статус: Академик), 9 января 2009, 16:04 [#4]:

ну вообще то можно и через прямое обращение к памяти.... но если там 10-20 точек в секунду... с другой стороны, никто не отменял прореживание и буферизацию. припустим, что у нас выводиться 10000 точек в секунду. Даже на самом широком экране это будет 5 длин. То есть экран обновиться 5 раз в секунду. Думаю, толку с этого мало будет, если будет попиксельно прорисовываться. Наблюдатель и не поймет, если будут сразу 2000 тыс точек выведено, или по 1. а с точки зрения производительности разница существенная....
Но подождём вопрошающего. Там и проясняться детали.
Галочка "подтверждения прочтения" - вселенское зло.
Евгений

Евгений (статус: Посетитель), 10 января 2009, 06:41 [#5]:

Данные собираются поблочно с частотой 1200кГц, размер блока 512*512 точек, т.о. на сбор одного блока необходимо 0,2 секунды. Смысл такой, что пока собирается очередной блок нужно прорисовать предыдущий. Понятно что все точки не нарисуешь, да и смысла нет в такой точности, лишь бы было видно примерный вид графика. Ну и рисовать хочу в виде самописца, а не в виде осциллограммы.
Вадим К

Вадим К (статус: Академик), 10 января 2009, 14:33 [#6]:

Ну так, больше тысячи точек точно рисовать не надо. тут при небольшой натяжке даже обычный GDI справиться. Надо только придумать, как прореживать точки.
Откуда это они с такой скоростью идут???
Галочка "подтверждения прочтения" - вселенское зло.
Евгений

Евгений (статус: Посетитель), 11 января 2009, 02:49 [#7]:

Данные как я уже говорил собираются с АЦП. Попробую рисовать по Canvas. А на счет прореживания какие тут могут быть проблемы??? рисовать через 100/1000 точек, или так не пойдет???
Вадим К

Вадим К (статус: Академик), 11 января 2009, 03:11 [#8]:

Ответили и в тот же момент не ответили:)
Что такое АЦП, как это работает и тому подобное - я понимаю прекрасно - образование позволяет. Меня больше интересовало как именно в компьютер они попадают - USB, COM...
Просто выбрасывать точки нельзя. Представьте ситуацию, когда данные периодичные (ну пусть для удобства это будет синусоида) и каждая сотая точка равна 0. И как раз сотую точку Вы берёте. Я думаю, что уже догадались, что будет.
А теперь то, что будет реальной проблемой. Windows - это не среда реального времени. По этому, если ваше приложение будет то 5 то 2 экрана в секунду отрисовывать, то данные будут нерегулярно поступать - не печальтесь, вы просто ошиблись, когда выбрали операционную систему.
Галочка "подтверждения прочтения" - вселенское зло.
Евгений

Евгений (статус: Посетитель), 11 января 2009, 03:26 [#9]:

Я не совсем понял про время и Windows, вы уж меня простите. Постараюсь обрисовать более подробно. Передача данных идет по шине USB, причем она идет не прерываясь в отдельном потоке. Данные передаются блоками и сохраняются на жестком диске. Паралельно я создал еще один поток с которого хочу данные отрисовывать по мере поступления.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.03 сек.