Считывание длительности "хвостатого" импульса
-
- beginner
- Сообщения: 23
- Зарегистрирован: 19 май 2016, 11:14
- Версия LabVIEW: 2015
- Контактная информация:
Осциллограмма
Здравствуйте. Программа (точнее ее часть, в которой заключается проблема) состоит из выделения данных, составляющих осциллограмму с соответствующего прибора, и структуры formula node, определяющей длительность импульса, находящегося в этой осциллограмме. Дело вот в чем: массив данных подается на formula node, единожды там обрабатывается, и в следующем общем цикле обрабатывается уже следующий массив. Как можно вынести из цикла formula node так, чтобы она воспринимала заданное нами количество осциллограмм? С целью усреднения расчетной длительности импульса.
Пытался по-разному разносить части из общего цикла, но при этом все перестает работать.
Пытался по-разному разносить части из общего цикла, но при этом все перестает работать.
- Вложения
-
- Last v1.3000.vi
- (23.37 КБ) 193 скачивания
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Осциллограмма
У меня все верхние SubVI не определились при открытии программы.
Что вынудило использовать именно Formula Node? Нативный код в работает гораздо быстрее (раза в 1,5-2) (см. тест).
Что вынудило использовать именно Formula Node? Нативный код в работает гораздо быстрее (раза в 1,5-2) (см. тест).
Честно говоря, не понял, что требуется вынести из Formula Node. Если на текущей итерации нужны значения предыдущего массива, то это делается через сдвиговый регистр. Если прямо из Formula Node нужно вынести какой-то параметр, то добавьте его как выход. Если вы где-то вне цикла задаёте количество осциллограмм, то заведите этот параметр в FN и работайте с ним.НиколайV писал(а):Дело вот в чем: массив данных подается на formula node, единожды там обрабатывается, и в следующем общем цикле обрабатывается уже следующий массив. Как можно вынести из цикла formula node так, чтобы она воспринимала заданное нами количество осциллограмм? С целью усреднения расчетной длительности импульса.
-
- beginner
- Сообщения: 23
- Зарегистрирован: 19 май 2016, 11:14
- Версия LabVIEW: 2015
- Контактная информация:
Re: Осциллограмма
Верхние SubVi - драйвера осциллографа.dadreamer писал(а):У меня все верхние SubVI не определились при открытии программы.
Там была трудность в определении длительности импульса с множеством шумов по переднему и заднему фронтам. Мне проще было использовать С-подобный язык, после нескольких неудачных попыток реализовать алгоритм на .dadreamer писал(а):Что вынудило использовать именно Formula Node?
Осциллограммы считываются непрерывно (вроде, под тысячу или даже больше раз в секунду), а алгоритм в formula node считает текущее значение длительности импульса раз в секунду (поскольку помещен в While Loop), соответственно для разных осциллограмм.dadreamer писал(а):Честно говоря, не понял, что требуется вынести из Formula Node. Если на текущей итерации нужны значения предыдущего массива, то это делается через сдвиговый регистр. Если прямо из Formula Node нужно вынести какой-то параметр, то добавьте его как выход. Если вы где-то вне цикла задаёте количество осциллограмм, то заведите этот параметр в FN и работайте с ним.
У меня не получается сделать так, чтобы значение длительности импульса бралось для, например, 10 или больше разных осциллограмм и усреднялось. В код я вписал это, но, поскольку formula node находится в общем цикле, берутся 10 одинаковых, а не разных осциллограмм, и значение получается прежним.
Поэтому я и спросил, можно ли как-то разнести formula node и SubVi, из которого считывается осциллограмма, в разные циклы. Извиняюсь, вопрос простой как мне кажется, но решить никак не могу, без потери работоспособности программы.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Осциллограмма
Ну да, теперь понятно. Можно (и даже нужно) разнести в два параллельных цикла: цикл получения данных с прибора и цикл обработки данных. Передачу данных между циклами можно организовать через очередь.НиколайV писал(а):У меня не получается сделать так, чтобы значение длительности импульса бралось для, например, 10 или больше разных осциллограмм и усреднялось. В код я вписал это, но, поскольку formula node находится в общем цикле, берутся 10 одинаковых, а не разных осциллограмм, и значение получается прежним.
Поэтому я и спросил, можно ли как-то разнести formula node и SubVi, из которого считывается осциллограмма, в разные циклы. Извиняюсь, вопрос простой как мне кажется, но решить никак не могу, без потери работоспособности программы.
dadreamer писал(а):В интернете полно примеров по передаче данных между параллельными циклами. Изучите, как работают механизмы синхронизации, на примере http://www.ni.com/white-paper/3023/en/ (подход "Producer - Consumer"). Посмотрите схожие темы на форуме, например http://www.labviewportal.org/viewtopic. ... 096#p66096 , http://labviewportal.org/viewtopic.php?p=68893#p68893 , http://labviewportal.org/viewtopic.php? ... 4cb#p62828dadreamer писал(а):Синхронизировать циклы можно через очереди, уведомители и прочие инструменты.
А также вот вам литература и примеры:
1) "LabVIEW Основы II: Разработка" : шаблон «Производитель-потребитель» + материал в главе 2 "Передача данных между несколькими циклами"
2) Питер Блюм "LabVIEW: стиль программирования", в частности глава 8 "Шаблоны" и раздел 8.3.1 "Параллельные циклы"
3) примеры в папке C:\Program Files (x86)\National Instruments\LabVIEW 2014\examples\Synchronization
-
- beginner
- Сообщения: 23
- Зарегистрирован: 19 май 2016, 11:14
- Версия LabVIEW: 2015
- Контактная информация:
Re: Осциллограмма
Спасибо, буду разбираться.dadreamer писал(а): Ну да, теперь понятно. Можно (и даже нужно) разнести в два параллельных цикла: цикл получения данных с прибора и цикл обработки данных. Передачу данных между циклами можно организовать через очередь.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Осциллограмма
На самом деле там ничего сложного нет, если разберётесь. В цикле обработки будете хранить в регистре последние 10 массивов осциллограмм или их усредненные значения (например, по скользящему среднему). При поступлении нового массива через очередь он будет просто добавляться к предыдущим и далее участвовать в мат. операциях.НиколайV писал(а):Спасибо, буду разбираться.
-
- beginner
- Сообщения: 23
- Зарегистрирован: 19 май 2016, 11:14
- Версия LabVIEW: 2015
- Контактная информация:
Re: Считывание длительности "хвостатого" импульса
Не сказать, что до конца разобрался в очередях, но все заработало удовлетворительно. За исключением того, что я не могу ускорить выполнение цикла - производителя.
Я сделал альтернативную упрощенную программу, в которой элементом очереди является число, не полученное в результате анализа массива данных осциллограммы, а случайно генерируемое. Циклы, при установке любого времени ожидания, начинают выполняться с такой скоростью иттераций, какая и проставлена в задержке.
Но цикл со подключением / выключением осциллографа независимо от задержки выполняется не быстрее, чем раз в 0.7 - 0.8 сек. - и, если я хочу сделать усреднение по ста значениям, то и ждать придется больше минуты. Не подскажете, можно ли это ускорить?
Я сделал альтернативную упрощенную программу, в которой элементом очереди является число, не полученное в результате анализа массива данных осциллограммы, а случайно генерируемое. Циклы, при установке любого времени ожидания, начинают выполняться с такой скоростью иттераций, какая и проставлена в задержке.
Но цикл со подключением / выключением осциллографа независимо от задержки выполняется не быстрее, чем раз в 0.7 - 0.8 сек. - и, если я хочу сделать усреднение по ста значениям, то и ждать придется больше минуты. Не подскажете, можно ли это ускорить?
- Вложения
-
- Last v1.3.5.vi
- оригинальная
- (26.2 КБ) 163 скачивания
-
- Last v1.3.6.vi
- альтернативная
- (17.92 КБ) 162 скачивания
-
- beginner
- Сообщения: 23
- Зарегистрирован: 19 май 2016, 11:14
- Версия LabVIEW: 2015
- Контактная информация:
Re: Считывание длительности "хвостатого" импульса
Сделал. Работает нормально, но быстрее, чем за 0.5 секунды так и не выполняется.Blackman писал(а):Попробуйте как на рисунке.
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Считывание длительности "хвостатого" импульса
Неудивительно. формулу не стоит использовать. Лучше поднапрячся и обойтись без скриптов.