Timeout = 0 в Event structure

Простейшие вопросы в области инженерной разработки
Ответить
Аватара пользователя
jane_wild
advanced
advanced
Сообщения: 183
Зарегистрирован: 30 июн 2016, 02:11
Репутация: 0
Версия LabVIEW: 2016
Контактная информация:

Timeout = 0 в Event structure

Сообщение jane_wild »

Ребята мне нужно генерировать непрерывно синусоиду разных частот по двум каналам (USB 6351) и менять эту частоту по ходу выполнения основной программы. За осову был взят Voltage (non-regeneration) - Continuous Output.vi из примеров установленых с LV. Планирую использовать user event-ы.
Вопрос первый - можно ли использовать таймаут равный нулю в event structure?
Вопрос второй - нужно ли останавливать таск перед вносимым изменением? Работает и так и этак, но как более грамотно?
Что бы идея была более понятной, посмотрите вложенный VI. (это как идея, сам VI будет работать параллельным потоком, без интерфейса, а ссылки на UE будут переданы основной программе)
Спасибо.
Вложения
Voltage (non-regeneration) - Continuous Output.vi
(81.01 КБ) 51 скачивание

Artem.spb

Activity Автор
expert
expert
Сообщения: 1942
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Репутация: 0
Версия LabVIEW: 12-18
Контактная информация:

Re: Timeout = 0 в Event structure

Сообщение Artem.spb »

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

Про нулевой тймаут ещё есть сомнения.
Функция wait ms при нулевом таймауте даёт систему команду "бросай всё, начинай этот цикл", не знаю, как оно с событиями. Я бы поставил 1 мс.

Аватара пользователя
jane_wild
advanced
advanced
Сообщения: 183
Зарегистрирован: 30 июн 2016, 02:11
Репутация: 0
Версия LabVIEW: 2016
Контактная информация:

Re: Timeout = 0 в Event structure

Сообщение jane_wild »

В данном случае частота будет контролироваться размером буфера (который, кстати, не задан). Проблема будет, если вы попытаетесь загнать в буфер (по умолчанию порядка секунды) сигнал, который его превышает по длине. Не проверял, но подозреваю, что система выдаст ошибку. Если куски разумных размеров, то каждый цикл система будет ждать, пока буфер освободится.
Не совсем поняла каким буфером? Я так понимаю что частота интерации будет определятся частотой дискретизации и количеством точек, которые подаются на вход BasicFG
Basic FG.jpg
И в данном конкретном случае составит 100mS.
категорически нет, т.к. иначе у вас система будет работать с перерывами (конечно только если это не является желаемым поведением).
Спасибо учту, хотя на осцилографе никаких перерывов не замечала, вполне себе красивая синусоида.
А если меняете настройки оборудования, то далеко не все можно делать на ходу.
Нет мне ничего менять не нужно, мне нужно на FP главного окна изменяя значения числовых индикаторов - изменять две частоты. Одну от 50 до 5000 Гц и вторую от 0.01 до 2 Гц.

Artem.spb

Activity Автор
expert
expert
Сообщения: 1942
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Репутация: 0
Версия LabVIEW: 12-18
Контактная информация:

Re: Timeout = 0 в Event structure

Сообщение Artem.spb »

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

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

Аватара пользователя
jane_wild
advanced
advanced
Сообщения: 183
Зарегистрирован: 30 июн 2016, 02:11
Репутация: 0
Версия LabVIEW: 2016
Контактная информация:

Re: Timeout = 0 в Event structure

Сообщение jane_wild »

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

Прочитала о buffer size А какой размер выбирать? Максимально возможный? В моем случае usb6351 8191 точек? Или минимально возможный? А может лучше вообще не трогать, согласно упомянутому документу LabVIEW сама позаботиться о размере.
Последний раз редактировалось jane_wild 11 июн 2019, 15:45, всего редактировалось 2 раза.

Artem.spb

Activity Автор
expert
expert
Сообщения: 1942
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Репутация: 0
Версия LabVIEW: 12-18
Контактная информация:

Re: Timeout = 0 в Event structure

Сообщение Artem.spb »

Не соглашусь. Под частотой итерации я имела ввиду
несогласие с чем тут декларируется?
Вы не согласны со мной, и пишете то, что написал я, только другими словами. Ок, не соглашайтесь.

Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Репутация: 0
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Timeout = 0 в Event structure

Сообщение Vitekkz88 »

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

Ответить

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