Организация буфера обмена

Простейшие вопросы в области инженерной разработки
Аватара пользователя
Alex89

Activity
adviser
adviser
Сообщения: 202
Зарегистрирован: 04 апр 2010, 18:20
Награды: 1
Версия LabVIEW: 2009 SP1
Откуда: Санкт-Петербург

Организация буфера обмена

Сообщение Alex89 »

Здравствуйте!! Интересует вот какой вопрос.... Как организовать буфер в LabView ? Задача: есть некий файл (размер до 150 мб), в этом файле набор отсчетов сигнала в бинарном виде(кодированные). Необходимо читать из файла пачку отсчетов (несколько mb), декодировать, а затем выводить в waveform chart.. и так, пока не наступит конец файла. Все эти операции происходят последовательно
открыть файл > прочитать несколько mb > декодировать > вывести на график > прочитать еще несколько mb > декодировать > вывести на график и т.д. Но при этом возникают задержки, я предположил, что необходимо организовать некий буфер который будет постоянно подпитываться декодированными отсчетами из файла, а уже из буфера я буду брать отсчеты и выводить на график с нужной мне постоянной частотой. Вот как мне такое организоавть в LabVIew? Подскажите или предложите более рациональный способ. Очень нужна помощь в этом вопросе. :think:
Аватара пользователя
FireFly

Activity Black
expert
expert
Сообщения: 1321
Зарегистрирован: 25 апр 2009, 08:58
Награды: 2
Версия LabVIEW: 2014
Откуда: Санкт-Петербург
Поблагодарили: 1 раз

Re: Организация буфера обмена

Сообщение FireFly »

Разбей чтение и декодирование на параллельные циклы. Тогда в качестве буфера будет выступать очередь.
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
Аватара пользователя
Alex89

Activity
adviser
adviser
Сообщения: 202
Зарегистрирован: 04 апр 2010, 18:20
Награды: 1
Версия LabVIEW: 2009 SP1
Откуда: Санкт-Петербург

Re: Организация буфера обмена

Сообщение Alex89 »

FireFly писал(а):Разбей чтение и декодирование на параллельные циклы. Тогда в качестве буфера будет выступать очередь.
А как это сделать, ведь что бы декодировать часть файла, ее надо сначала прочитать, а это последовательные задачи... Или я чего-то не понимаю? Я новичок, объясните подробнее..
Аватара пользователя
FireFly

Activity Black
expert
expert
Сообщения: 1321
Зарегистрирован: 25 апр 2009, 08:58
Награды: 2
Версия LabVIEW: 2014
Откуда: Санкт-Петербург
Поблагодарили: 1 раз

Re: Организация буфера обмена

Сообщение FireFly »

Читай внимательнее урок по ссылке которую я дал.
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
Аватара пользователя
Alex89

Activity
adviser
adviser
Сообщения: 202
Зарегистрирован: 04 апр 2010, 18:20
Награды: 1
Версия LabVIEW: 2009 SP1
Откуда: Санкт-Петербург

Re: Организация буфера обмена

Сообщение Alex89 »

FireFly писал(а):Читай внимательнее урок по ссылке которую я дал.
Да, спасибо, сейчас буду изучать..
Аватара пользователя
Alex89

Activity
adviser
adviser
Сообщения: 202
Зарегистрирован: 04 апр 2010, 18:20
Награды: 1
Версия LabVIEW: 2009 SP1
Откуда: Санкт-Петербург

Re: Организация буфера обмена

Сообщение Alex89 »

Alex89 писал(а):
FireFly писал(а):Разбей чтение и декодирование на параллельные циклы. Тогда в качестве буфера будет выступать очередь.
А каким образом мне поставить часть файла в очередь, ведь функция Read from Binary File возвращает массив, а функция Enqueue Element принимает только элементы?
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Организация буфера обмена

Сообщение Eugen Graf »

Enqueue в цикле For с автоиндексацией.
Аватара пользователя
Alex89

Activity
adviser
adviser
Сообщения: 202
Зарегистрирован: 04 апр 2010, 18:20
Награды: 1
Версия LabVIEW: 2009 SP1
Откуда: Санкт-Петербург

Re: Организация буфера обмена

Сообщение Alex89 »

eg писал(а):Enqueue в цикле For с автоиндексацией.
Спасибо за ответ!
Да, эта мысль меня поситила, но после очереди эти отсчеты поступают на ВПП декодировки, а этот ВПП принимает только массив, т.к. смысл декодировки получить из 3 чисел 2 числа, тоесть принимать поэлементно не пойдет, получается перед ВПП ставить еще один цикл For ?
Аватара пользователя
Forward

Activity Tutorials Black
professional
professional
Сообщения: 337
Зарегистрирован: 03 мар 2008, 12:41
Награды: 3
Версия LabVIEW: 2010
Откуда: Кишинев
Контактная информация:

Re: Организация буфера обмена

Сообщение Forward »

Типом элементов очереди может быть не только переменная, но и много чего другого - массив или же строка (что в твоем случае более логично). Считал сколько надо (100-200К) и разом весь массив закинул в очередь. А в принимающем цикле вытаскиваешь этот массив и кидаешь на свой ВПП.
Глянь еще эту тему.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Организация буфера обмена

Сообщение Eugen Graf »

Думаю да, количество итераций = желаемому количеству элементов для декодировки.
Аватара пользователя
Alex89

Activity
adviser
adviser
Сообщения: 202
Зарегистрирован: 04 апр 2010, 18:20
Награды: 1
Версия LabVIEW: 2009 SP1
Откуда: Санкт-Петербург

Re: Организация буфера обмена

Сообщение Alex89 »

чтение > декодировка > вывод > чтение > ...

Задача - выводить многоканальный сигнал с постоянной частотой. Но в принимающем цикле данные на вход моего ВПП(декодирование) идут пачками(массивами), следовательно, и на график пачками. Видимо, чтобы выводить отсчеты сигнала с постоянной частотой необходимо использовать очередь на этапе декодировка > вывод, а не на этапе чтение > декодировка...
Аватара пользователя
Alex89

Activity
adviser
adviser
Сообщения: 202
Зарегистрирован: 04 апр 2010, 18:20
Награды: 1
Версия LabVIEW: 2009 SP1
Откуда: Санкт-Петербург

Re: Организация буфера обмена

Сообщение Alex89 »

Просто этот многокональный сигнал необходимо посылать через USB(COM) в МК на DAC(ЦАП), далее аналоговый сигнал идет на датчки съема..все строго должно быть.. :super:
Аватара пользователя
Alex89

Activity
adviser
adviser
Сообщения: 202
Зарегистрирован: 04 апр 2010, 18:20
Награды: 1
Версия LabVIEW: 2009 SP1
Откуда: Санкт-Петербург

Re: Организация буфера обмена

Сообщение Alex89 »

А не подскажите, как сделать, что бы при чтении файла кусками, избежать ошибки в конце, ведь я устаналиваю count, а размер файла может быть любым. Как улавливать последний отсчет?
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Организация буфера обмена

Сообщение Eugen Graf »

Я точно не знаю возвращает ли этот :vi: прочитанные элементы при ошибке, может быть просто проигнорировать в данном случае. А если нет, то узнать размер файла и разделить его на размер элемента, получится общее количество элементов. Ну и при считывании кусками, смотреть на последний кусок с помощью своего каунтера.
Аватара пользователя
Alex89

Activity
adviser
adviser
Сообщения: 202
Зарегистрирован: 04 апр 2010, 18:20
Награды: 1
Версия LabVIEW: 2009 SP1
Откуда: Санкт-Петербург

Re: Организация буфера обмена

Сообщение Alex89 »

При общении :vi: с COM через VISA тоже использовать очереди в качестве буфера или у VISA есть свои средства для этого. Просто данные из файла пакетами будут посылаться в COM по запросу от внешнего устройства. Мой сигнал должен одновременно читаться из файла кусками, выводиться на экран + по запросу часть данных должна уплывать в COM. Буду очень признателен за любой совет..
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»