Timeout = 0 в Event structure

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

Timeout = 0 в Event structure

Postby jane_wild on 10 Jun 2019, 22:29

Ребята мне нужно генерировать непрерывно синусоиду разных частот по двум каналам (USB 6351) и менять эту частоту по ходу выполнения основной программы. За осову был взят Voltage (non-regeneration) - Continuous Output.vi из примеров установленых с LV. Планирую использовать user event-ы.
Вопрос первый - можно ли использовать таймаут равный нулю в event structure?
Вопрос второй - нужно ли останавливать таск перед вносимым изменением? Работает и так и этак, но как более грамотно?
Что бы идея была более понятной, посмотрите вложенный VI. (это как идея, сам VI будет работать параллельным потоком, без интерфейса, а ссылки на UE будут переданы основной программе)
Спасибо.
Attachments
Voltage (non-regeneration) - Continuous Output.vi
(81.01 KiB) Downloaded 33 times
User avatar
jane_wild
advanced
advanced
 
Posts: 153
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2016
Karma: 5

Re: Timeout = 0 в Event structure

Postby Artem.spb on 10 Jun 2019, 23:36

jane_wild wrote:Вопрос первый - можно ли использовать таймаут равный нулю в event structure?

можно, если поведение вас устраивает.
В данном случае частота будет контролироваться размером буфера (который, кстати, не задан). Проблема будет, если вы попытаетесь загнать в буфер (по умолчанию порядка секунды) сигнал, который его превышает по длине. Не проверял, но подозреваю, что система выдаст ошибку. Если куски разумных размеров, то каждый цикл система будет ждать, пока буфер освободится. Хотя, бы у меня проект, в котором буфер игнорировал свои размеры и с радостью принимал очередную порцию данных. Пришлось руками проверять его размеры. Так что проверьте со своим оборудованием - с какой реально частотой будет крутиться цикл. Если она явно превышает "правильную", то архитектура опасна. Во-первых, засорением памяти, во-вторых тем, что ваше изменение придёт на выход с большим опозданием.

Вопрос второй - нужно ли останавливать таск перед вносимым изменением? Работает и так и этак, но как более грамотно?

изменением чего?
Если частоты волны, то категорически нет, т.к. иначе у вас система будет работать с перерывами (конечно только если это не является желаемым поведением).
А если меняете настройки оборудования, то далеко не все можно делать на ходу.

Про нулевой тймаут ещё есть сомнения.
Функция wait ms при нулевом таймауте даёт систему команду "бросай всё, начинай этот цикл", не знаю, как оно с событиями. Я бы поставил 1 мс.
Artem.spb
expert
expert
 
Posts: 1645
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 265
CLD hardware I/O VIP freelance

Re: Timeout = 0 в Event structure

Postby jane_wild on 11 Jun 2019, 02:42

В данном случае частота будет контролироваться размером буфера (который, кстати, не задан). Проблема будет, если вы попытаетесь загнать в буфер (по умолчанию порядка секунды) сигнал, который его превышает по длине. Не проверял, но подозреваю, что система выдаст ошибку. Если куски разумных размеров, то каждый цикл система будет ждать, пока буфер освободится.

Не совсем поняла каким буфером? Я так понимаю что частота интерации будет определятся частотой дискретизации и количеством точек, которые подаются на вход BasicFG
Basic FG.jpg

И в данном конкретном случае составит 100mS.
категорически нет, т.к. иначе у вас система будет работать с перерывами (конечно только если это не является желаемым поведением).

Спасибо учту, хотя на осцилографе никаких перерывов не замечала, вполне себе красивая синусоида.
А если меняете настройки оборудования, то далеко не все можно делать на ходу.

Нет мне ничего менять не нужно, мне нужно на FP главного окна изменяя значения числовых индикаторов - изменять две частоты. Одну от 50 до 5000 Гц и вторую от 0.01 до 2 Гц.
User avatar
jane_wild
advanced
advanced
 
Posts: 153
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2016
Karma: 5

Re: Timeout = 0 в Event structure

Postby Artem.spb on 11 Jun 2019, 11:24

Не совсем поняла каким буфером? Я так понимаю что частота интерации будет определятся частотой дискретизации и количеством точек, которые подаются на вход BasicFG

Буфер DAQ. Программа же не будет по одной точке на плату забрасывать. Тот самый готовый массив отправляется в буфер драйвера (размер можно менять), откуда он уже меньшими партиями перебрасывается в буфер устройства (его размер фиксирован и зависит от устройства).

Частота итерации/дискретизации - скорость выдачи точек одна за другой,
А частота работы цикла - это примерно скорость забрасывания очередного фрагмента в буфер.

Спасибо учту, хотя на осцилографе никаких перерывов не замечала, вполне себе красивая синусоида.

Нет перерывов, если вы останавливаете задачу, закидываете новый буфер и запускаете задачу? не верю.
Artem.spb
expert
expert
 
Posts: 1645
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 265
CLD hardware I/O VIP freelance

Re: Timeout = 0 в Event structure

Postby jane_wild on 11 Jun 2019, 15:23

А частота работы цикла - это примерно скорость забрасывания очередного фрагмента в буфер.

Не соглашусь. Под частотой итерации я имела ввиду частоту работы цикла. И я так понимаю, в данном примере работает то же правило, что при чтении. Что бы прочитать 50к точек при частоте 500к понадобится 0.1сек, то же самое видимо и здесь - запись 50 000 точек на частоте 500кГц займет 0.1 сек . А иначе как объяснить что частота работы цикла имеет прямую зависимость от соотношения этих двух чисел (которые обведены красненьким на скриншоте) А вот уже сколько периодов синусоиды влезет в это количество точек, это другая история, поэтому и фаза "гоняется по кругу" что бы этот VI знал с какого места продолжать записывать очередную порцию...

Нет перерывов, если вы останавливаете задачу, закидываете новый буфер и запускаете задачу? не верю.
Я же не спорю, просто констатирую факт - картинка на осциллографе не дергается. Это видимо из за того, что начиная новую задачу, синусоида начитается с фазы, которая была после остановки. Хотя может осциллограф такой. В общем я поняла - лучше не останавливать. :wink:

Прочитала о buffer size А какой размер выбирать? Максимально возможный? В моем случае usb6351 8191 точек? Или минимально возможный? А может лучше вообще не трогать, согласно упомянутому документу LabVIEW сама позаботиться о размере.
Last edited by jane_wild on 11 Jun 2019, 15:45, edited 2 times in total.
User avatar
jane_wild
advanced
advanced
 
Posts: 153
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2016
Karma: 5

Re: Timeout = 0 в Event structure

Postby Artem.spb on 11 Jun 2019, 15:34

Не соглашусь. Под частотой итерации я имела ввиду

несогласие с чем тут декларируется?
Вы не согласны со мной, и пишете то, что написал я, только другими словами. Ок, не соглашайтесь.
Artem.spb
expert
expert
 
Posts: 1645
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 265
CLD hardware I/O VIP freelance

Re: Timeout = 0 в Event structure

Postby Vitekkz88 on 14 Jun 2019, 06:35

jane_wild писала(а):Я же не спорю, просто констатирую факт - картинка на осциллографе не дергается. Это видимо из за того, что начиная новую задачу, синусоида начитается с фазы, которая была после остановки. Хотя может осциллограф такой.

Сколько времени проходит с момента завершения задачи до начала новой? Чтобы это детектировать осциллографом - необходимо настроить время накопления 2-3 секунды. Тогда вы явно увидите, что между завершением задачи и её повторным запуском проходит некоторое время. Это и есть те самые прерывания, о которых говорит Артём.
Прочитала о buffer size А какой размер выбирать? Максимально возможный? В моем случае usb6351 8191 точек? Или минимально возможный? А может лучше вообще не трогать, согласно упомянутому документу LabVIEW сама позаботиться о размере.

В данном случае частота будет контролироваться размером буфера (который, кстати, не задан). Проблема будет, если вы попытаетесь загнать в буфер (по умолчанию порядка секунды) сигнал, который его превышает по длине. Не проверял, но подозреваю, что система выдаст ошибку. Если куски разумных размеров, то каждый цикл система будет ждать, пока буфер освободится. Хотя, был у меня проект, в котором буфер игнорировал свои размеры и с радостью принимал очередную порцию данных. Пришлось руками проверять его размеры. Так что проверьте со своим оборудованием - с какой реально частотой будет крутиться цикл. Если она явно превышает "правильную", то архитектура опасна. Во-первых, засорением памяти, во-вторых тем, что ваше изменение придёт на выход с большим опозданием.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
User avatar
Vitekkz88
expert
expert
 
Posts: 1080
Joined: 21 Jan 2014, 15:45
Location: Томск
Medals: 3
Activity (1) Silver (1) Автор (1)
LabVIEW Version: 12,13,14
Karma: 302
hardware I/O VIP


Return to Для чайников

Who is online

Users browsing this forum: No registered users and 11 guests

cron