Считывание длительности "хвостатого" импульса

Захват, обработка и генерирование сигнала

Осциллограмма

Postby НиколайV on 08 Jul 2016, 12:39

Здравствуйте. Программа (точнее ее часть, в которой заключается проблема) состоит из выделения данных, составляющих осциллограмму с соответствующего прибора, и структуры formula node, определяющей длительность импульса, находящегося в этой осциллограмме. Дело вот в чем: массив данных подается на formula node, единожды там обрабатывается, и в следующем общем цикле обрабатывается уже следующий массив. Как можно вынести из цикла formula node так, чтобы она воспринимала заданное нами количество осциллограмм? С целью усреднения расчетной длительности импульса.
Пытался по-разному разносить части из общего цикла, но при этом все перестает работать.
Attachments
Last v1.3000.vi
(23.37 KiB) Downloaded 65 times
НиколайV
beginner
beginner
 
Posts: 22
Joined: 19 May 2016, 11:14
LabVIEW Version: 2015
Karma: 0

Re: Осциллограмма

Postby dadreamer on 08 Jul 2016, 14:39

У меня все верхние SubVI не определились при открытии программы.
Что вынудило использовать именно Formula Node? Нативный код в :labview: работает гораздо быстрее (раза в 1,5-2) (см. тест).
НиколайV wrote:Дело вот в чем: массив данных подается на formula node, единожды там обрабатывается, и в следующем общем цикле обрабатывается уже следующий массив. Как можно вынести из цикла formula node так, чтобы она воспринимала заданное нами количество осциллограмм? С целью усреднения расчетной длительности импульса.

Честно говоря, не понял, что требуется вынести из Formula Node. Если на текущей итерации нужны значения предыдущего массива, то это делается через сдвиговый регистр. Если прямо из Formula Node нужно вынести какой-то параметр, то добавьте его как выход. Если вы где-то вне цикла задаёте количество осциллограмм, то заведите этот параметр в FN и работайте с ним.
User avatar
dadreamer
doctor
doctor
 
Posts: 2895
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 708
I/O VIP vision internet

Re: Осциллограмма

Postby НиколайV on 08 Jul 2016, 15:01

dadreamer wrote:У меня все верхние SubVI не определились при открытии программы.

Верхние SubVi - драйвера осциллографа.

dadreamer wrote:Что вынудило использовать именно Formula Node?

Там была трудность в определении длительности импульса с множеством шумов по переднему и заднему фронтам. Мне проще было использовать С-подобный язык, после нескольких неудачных попыток реализовать алгоритм на :labview:.

dadreamer wrote:Честно говоря, не понял, что требуется вынести из Formula Node. Если на текущей итерации нужны значения предыдущего массива, то это делается через сдвиговый регистр. Если прямо из Formula Node нужно вынести какой-то параметр, то добавьте его как выход. Если вы где-то вне цикла задаёте количество осциллограмм, то заведите этот параметр в FN и работайте с ним.


Осциллограммы считываются непрерывно (вроде, под тысячу или даже больше раз в секунду), а алгоритм в formula node считает текущее значение длительности импульса раз в секунду (поскольку помещен в While Loop), соответственно для разных осциллограмм.

У меня не получается сделать так, чтобы значение длительности импульса бралось для, например, 10 или больше разных осциллограмм и усреднялось. В код я вписал это, но, поскольку formula node находится в общем цикле, берутся 10 одинаковых, а не разных осциллограмм, и значение получается прежним.

Поэтому я и спросил, можно ли как-то разнести formula node и SubVi, из которого считывается осциллограмма, в разные циклы. Извиняюсь, вопрос простой как мне кажется, но решить никак не могу, без потери работоспособности программы.
НиколайV
beginner
beginner
 
Posts: 22
Joined: 19 May 2016, 11:14
LabVIEW Version: 2015
Karma: 0

Re: Осциллограмма

Postby dadreamer on 08 Jul 2016, 15:24

НиколайV wrote:У меня не получается сделать так, чтобы значение длительности импульса бралось для, например, 10 или больше разных осциллограмм и усреднялось. В код я вписал это, но, поскольку formula node находится в общем цикле, берутся 10 одинаковых, а не разных осциллограмм, и значение получается прежним.

Поэтому я и спросил, можно ли как-то разнести formula node и SubVi, из которого считывается осциллограмма, в разные циклы. Извиняюсь, вопрос простой как мне кажется, но решить никак не могу, без потери работоспособности программы.

Ну да, теперь понятно. Можно (и даже нужно) разнести в два параллельных цикла: цикл получения данных с прибора и цикл обработки данных. Передачу данных между циклами можно организовать через очередь.
dadreamer wrote:
dadreamer wrote:Синхронизировать циклы можно через очереди, уведомители и прочие инструменты.
В интернете полно примеров по передаче данных между параллельными циклами. Изучите, как работают механизмы синхронизации, на примере http://www.ni.com/white-paper/3023/en/ (подход "Producer - Consumer"). Посмотрите схожие темы на форуме, например viewtopic.php?p=66096#p66096 , http://labviewportal.ru/viewtopic.php?p=68893#p68893 , http://labviewportal.ru/viewtopic.php?p ... 4cb#p62828

А также вот вам литература и примеры:
1) "LabVIEW Основы II: Разработка" : шаблон «Производитель-потребитель» + материал в главе 2 "Передача данных между несколькими циклами"
2) Питер Блюм "LabVIEW: стиль программирования", в частности глава 8 "Шаблоны" и раздел 8.3.1 "Параллельные циклы"
3) примеры в папке C:\Program Files (x86)\National Instruments\LabVIEW 2014\examples\Synchronization
User avatar
dadreamer
doctor
doctor
 
Posts: 2895
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 708
I/O VIP vision internet

Re: Осциллограмма

Postby НиколайV on 08 Jul 2016, 15:29

dadreamer wrote:Ну да, теперь понятно. Можно (и даже нужно) разнести в два параллельных цикла: цикл получения данных с прибора и цикл обработки данных. Передачу данных между циклами можно организовать через очередь.


Спасибо, буду разбираться.
НиколайV
beginner
beginner
 
Posts: 22
Joined: 19 May 2016, 11:14
LabVIEW Version: 2015
Karma: 0

Re: Осциллограмма

Postby dadreamer on 08 Jul 2016, 15:33

НиколайV wrote:Спасибо, буду разбираться.

На самом деле там ничего сложного нет, если разберётесь. В цикле обработки будете хранить в регистре последние 10 массивов осциллограмм или их усредненные значения (например, по скользящему среднему). При поступлении нового массива через очередь он будет просто добавляться к предыдущим и далее участвовать в мат. операциях.
User avatar
dadreamer
doctor
doctor
 
Posts: 2895
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 708
I/O VIP vision internet

Re: Считывание длительности "хвостатого" импульса

Postby НиколайV on 11 Jul 2016, 16:23

Не сказать, что до конца разобрался в очередях, но все заработало удовлетворительно. За исключением того, что я не могу ускорить выполнение цикла - производителя.

Я сделал альтернативную упрощенную программу, в которой элементом очереди является число, не полученное в результате анализа массива данных осциллограммы, а случайно генерируемое. Циклы, при установке любого времени ожидания, начинают выполняться с такой скоростью иттераций, какая и проставлена в задержке.

Но цикл со подключением / выключением осциллографа независимо от задержки выполняется не быстрее, чем раз в 0.7 - 0.8 сек. - и, если я хочу сделать усреднение по ста значениям, то и ждать придется больше минуты. Не подскажете, можно ли это ускорить?
Attachments
Last v1.3.5.vi
оригинальная
(26.2 KiB) Downloaded 58 times
Last v1.3.6.vi
альтернативная
(17.92 KiB) Downloaded 61 times
НиколайV
beginner
beginner
 
Posts: 22
Joined: 19 May 2016, 11:14
LabVIEW Version: 2015
Karma: 0

Re: Считывание длительности "хвостатого" импульса

Postby Blackman on 11 Jul 2016, 18:28

Попробуйте как на рисунке.
Attachments
Example.png
Blackman
leader
leader
 
Posts: 684
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 170

Re: Считывание длительности "хвостатого" импульса

Postby НиколайV on 12 Jul 2016, 12:46

Blackman wrote:Попробуйте как на рисунке.


Сделал. Работает нормально, но быстрее, чем за 0.5 секунды так и не выполняется.
НиколайV
beginner
beginner
 
Posts: 22
Joined: 19 May 2016, 11:14
LabVIEW Version: 2015
Karma: 0

Re: Считывание длительности "хвостатого" импульса

Postby Borjomy_1 on 12 Jul 2016, 13:10

Неудивительно. формулу не стоит использовать. Лучше поднапрячся и обойтись без скриптов.
Attachments
Вместо формулы.png
Вместо формулы2.png
Либо так
Borjomy_1
expert
expert
 
Posts: 1765
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 309
VIP

Previous

Return to Обработка сигнала

Who is online

Users browsing this forum: No registered users and 4 guests

cron