|
Вопрос # 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, причем она идет не прерываясь в отдельном потоке. Данные передаются блоками и сохраняются на жестком диске. Паралельно я создал еще один поток с которого хочу данные отрисовывать по мере поступления.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|