Страница 1 из 1

Timeout = 0 в Event structure

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

Re: Timeout = 0 в Event structure

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

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

Re: Timeout = 0 в Event structure

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

Re: Timeout = 0 в Event structure

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

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

Re: Timeout = 0 в Event structure

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

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

Re: Timeout = 0 в Event structure

Добавлено: 11 июн 2019, 15:34
Artem.spb
Не соглашусь. Под частотой итерации я имела ввиду
несогласие с чем тут декларируется?
Вы не согласны со мной, и пишете то, что написал я, только другими словами. Ок, не соглашайтесь.

Re: Timeout = 0 в Event structure

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