Организация буфера обмена
-
Alex89
- adviser
- Сообщения: 202
- Зарегистрирован: 04 апр 2010, 18:20
- Награды: 1
- Версия LabVIEW: 2009 SP1
- Откуда: Санкт-Петербург
Организация буфера обмена
Здравствуйте!! Интересует вот какой вопрос.... Как организовать буфер в LabView ? Задача: есть некий файл (размер до 150 мб), в этом файле набор отсчетов сигнала в бинарном виде(кодированные). Необходимо читать из файла пачку отсчетов (несколько mb), декодировать, а затем выводить в waveform chart.. и так, пока не наступит конец файла. Все эти операции происходят последовательно
открыть файл > прочитать несколько mb > декодировать > вывести на график > прочитать еще несколько mb > декодировать > вывести на график и т.д. Но при этом возникают задержки, я предположил, что необходимо организовать некий буфер который будет постоянно подпитываться декодированными отсчетами из файла, а уже из буфера я буду брать отсчеты и выводить на график с нужной мне постоянной частотой. Вот как мне такое организоавть в LabVIew? Подскажите или предложите более рациональный способ. Очень нужна помощь в этом вопросе.
открыть файл > прочитать несколько mb > декодировать > вывести на график > прочитать еще несколько mb > декодировать > вывести на график и т.д. Но при этом возникают задержки, я предположил, что необходимо организовать некий буфер который будет постоянно подпитываться декодированными отсчетами из файла, а уже из буфера я буду брать отсчеты и выводить на график с нужной мне постоянной частотой. Вот как мне такое организоавть в LabVIew? Подскажите или предложите более рациональный способ. Очень нужна помощь в этом вопросе.
-
FireFly
- expert
- Сообщения: 1321
- Зарегистрирован: 25 апр 2009, 08:58
- Награды: 2
- Версия LabVIEW: 2014
- Откуда: Санкт-Петербург
- Поблагодарили: 1 раз
Re: Организация буфера обмена
Разбей чтение и декодирование на параллельные циклы. Тогда в качестве буфера будет выступать очередь.
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
-
Alex89
- adviser
- Сообщения: 202
- Зарегистрирован: 04 апр 2010, 18:20
- Награды: 1
- Версия LabVIEW: 2009 SP1
- Откуда: Санкт-Петербург
Re: Организация буфера обмена
А как это сделать, ведь что бы декодировать часть файла, ее надо сначала прочитать, а это последовательные задачи... Или я чего-то не понимаю? Я новичок, объясните подробнее..FireFly писал(а):Разбей чтение и декодирование на параллельные циклы. Тогда в качестве буфера будет выступать очередь.
-
FireFly
- expert
- Сообщения: 1321
- Зарегистрирован: 25 апр 2009, 08:58
- Награды: 2
- Версия LabVIEW: 2014
- Откуда: Санкт-Петербург
- Поблагодарили: 1 раз
Re: Организация буфера обмена
Читай внимательнее урок по ссылке которую я дал.
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
-
Alex89
- adviser
- Сообщения: 202
- Зарегистрирован: 04 апр 2010, 18:20
- Награды: 1
- Версия LabVIEW: 2009 SP1
- Откуда: Санкт-Петербург
Re: Организация буфера обмена
Да, спасибо, сейчас буду изучать..FireFly писал(а):Читай внимательнее урок по ссылке которую я дал.
-
Alex89
- adviser
- Сообщения: 202
- Зарегистрирован: 04 апр 2010, 18:20
- Награды: 1
- Версия LabVIEW: 2009 SP1
- Откуда: Санкт-Петербург
Re: Организация буфера обмена
А каким образом мне поставить часть файла в очередь, ведь функция Read from Binary File возвращает массив, а функция Enqueue Element принимает только элементы?Alex89 писал(а):FireFly писал(а):Разбей чтение и декодирование на параллельные циклы. Тогда в качестве буфера будет выступать очередь.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
-
Alex89
- adviser
- Сообщения: 202
- Зарегистрирован: 04 апр 2010, 18:20
- Награды: 1
- Версия LabVIEW: 2009 SP1
- Откуда: Санкт-Петербург
Re: Организация буфера обмена
Спасибо за ответ!eg писал(а):Enqueue в цикле For с автоиндексацией.
Да, эта мысль меня поситила, но после очереди эти отсчеты поступают на ВПП декодировки, а этот ВПП принимает только массив, т.к. смысл декодировки получить из 3 чисел 2 числа, тоесть принимать поэлементно не пойдет, получается перед ВПП ставить еще один цикл For ?
-
Forward
- professional
- Сообщения: 337
- Зарегистрирован: 03 мар 2008, 12:41
- Награды: 3
- Версия LabVIEW: 2010
- Откуда: Кишинев
- Контактная информация:
Re: Организация буфера обмена
Типом элементов очереди может быть не только переменная, но и много чего другого - массив или же строка (что в твоем случае более логично). Считал сколько надо (100-200К) и разом весь массив закинул в очередь. А в принимающем цикле вытаскиваешь этот массив и кидаешь на свой ВПП.
Глянь еще эту тему.
Глянь еще эту тему.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Организация буфера обмена
Думаю да, количество итераций = желаемому количеству элементов для декодировки.
-
Alex89
- adviser
- Сообщения: 202
- Зарегистрирован: 04 апр 2010, 18:20
- Награды: 1
- Версия LabVIEW: 2009 SP1
- Откуда: Санкт-Петербург
Re: Организация буфера обмена
чтение > декодировка > вывод > чтение > ...
Задача - выводить многоканальный сигнал с постоянной частотой. Но в принимающем цикле данные на вход моего ВПП(декодирование) идут пачками(массивами), следовательно, и на график пачками. Видимо, чтобы выводить отсчеты сигнала с постоянной частотой необходимо использовать очередь на этапе декодировка > вывод, а не на этапе чтение > декодировка...
Задача - выводить многоканальный сигнал с постоянной частотой. Но в принимающем цикле данные на вход моего ВПП(декодирование) идут пачками(массивами), следовательно, и на график пачками. Видимо, чтобы выводить отсчеты сигнала с постоянной частотой необходимо использовать очередь на этапе декодировка > вывод, а не на этапе чтение > декодировка...
-
Alex89
- adviser
- Сообщения: 202
- Зарегистрирован: 04 апр 2010, 18:20
- Награды: 1
- Версия LabVIEW: 2009 SP1
- Откуда: Санкт-Петербург
Re: Организация буфера обмена
Просто этот многокональный сигнал необходимо посылать через USB(COM) в МК на DAC(ЦАП), далее аналоговый сигнал идет на датчки съема..все строго должно быть..
-
Alex89
- adviser
- Сообщения: 202
- Зарегистрирован: 04 апр 2010, 18:20
- Награды: 1
- Версия LabVIEW: 2009 SP1
- Откуда: Санкт-Петербург
Re: Организация буфера обмена
А не подскажите, как сделать, что бы при чтении файла кусками, избежать ошибки в конце, ведь я устаналиваю count, а размер файла может быть любым. Как улавливать последний отсчет?
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Организация буфера обмена
Я точно не знаю возвращает ли этот прочитанные элементы при ошибке, может быть просто проигнорировать в данном случае. А если нет, то узнать размер файла и разделить его на размер элемента, получится общее количество элементов. Ну и при считывании кусками, смотреть на последний кусок с помощью своего каунтера.
-
Alex89
- adviser
- Сообщения: 202
- Зарегистрирован: 04 апр 2010, 18:20
- Награды: 1
- Версия LabVIEW: 2009 SP1
- Откуда: Санкт-Петербург
Re: Организация буфера обмена
При общении с COM через VISA тоже использовать очереди в качестве буфера или у VISA есть свои средства для этого. Просто данные из файла пакетами будут посылаться в COM по запросу от внешнего устройства. Мой сигнал должен одновременно читаться из файла кусками, выводиться на экран + по запросу часть данных должна уплывать в COM. Буду очень признателен за любой совет..
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 6 Ответы
- 1645 Просмотры
-
Последнее сообщение ladik