Ребята мне нужно генерировать непрерывно синусоиду разных частот по двум каналам (USB 6351) и менять эту частоту по ходу выполнения основной программы. За осову был взят Voltage (non-regeneration) - Continuous Output.vi из примеров установленых с LV. Планирую использовать user event-ы.
Вопрос первый - можно ли использовать таймаут равный нулю в event structure?
Вопрос второй - нужно ли останавливать таск перед вносимым изменением? Работает и так и этак, но как более грамотно?
Что бы идея была более понятной, посмотрите вложенный VI. (это как идея, сам VI будет работать параллельным потоком, без интерфейса, а ссылки на UE будут переданы основной программе)
Спасибо.
Timeout = 0 в Event structure
- jane_wild
- master
- Сообщения: 459
- Зарегистрирован: 30 июн 2016, 02:11
- Версия LabVIEW: 2020
- Благодарил (а): 83 раза
- Поблагодарили: 15 раз
- Контактная информация:
Timeout = 0 в Event structure
- Вложения
-
- Voltage (non-regeneration) - Continuous Output.vi
- (81.01 КБ) 98 скачиваний
-
- professor
- Сообщения: 3396
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 172 раза
- Контактная информация:
Re: Timeout = 0 в Event structure
можно, если поведение вас устраивает.jane_wild писал(а): Вопрос первый - можно ли использовать таймаут равный нулю в event structure?
В данном случае частота будет контролироваться размером буфера (который, кстати, не задан). Проблема будет, если вы попытаетесь загнать в буфер (по умолчанию порядка секунды) сигнал, который его превышает по длине. Не проверял, но подозреваю, что система выдаст ошибку. Если куски разумных размеров, то каждый цикл система будет ждать, пока буфер освободится. Хотя, бы у меня проект, в котором буфер игнорировал свои размеры и с радостью принимал очередную порцию данных. Пришлось руками проверять его размеры. Так что проверьте со своим оборудованием - с какой реально частотой будет крутиться цикл. Если она явно превышает "правильную", то архитектура опасна. Во-первых, засорением памяти, во-вторых тем, что ваше изменение придёт на выход с большим опозданием.
изменением чего?Вопрос второй - нужно ли останавливать таск перед вносимым изменением? Работает и так и этак, но как более грамотно?
Если частоты волны, то категорически нет, т.к. иначе у вас система будет работать с перерывами (конечно только если это не является желаемым поведением).
А если меняете настройки оборудования, то далеко не все можно делать на ходу.
Про нулевой тймаут ещё есть сомнения.
Функция wait ms при нулевом таймауте даёт систему команду "бросай всё, начинай этот цикл", не знаю, как оно с событиями. Я бы поставил 1 мс.
- jane_wild
- master
- Сообщения: 459
- Зарегистрирован: 30 июн 2016, 02:11
- Версия LabVIEW: 2020
- Благодарил (а): 83 раза
- Поблагодарили: 15 раз
- Контактная информация:
Re: Timeout = 0 в Event structure
Не совсем поняла каким буфером? Я так понимаю что частота интерации будет определятся частотой дискретизации и количеством точек, которые подаются на вход BasicFG И в данном конкретном случае составит 100mS.В данном случае частота будет контролироваться размером буфера (который, кстати, не задан). Проблема будет, если вы попытаетесь загнать в буфер (по умолчанию порядка секунды) сигнал, который его превышает по длине. Не проверял, но подозреваю, что система выдаст ошибку. Если куски разумных размеров, то каждый цикл система будет ждать, пока буфер освободится.
Спасибо учту, хотя на осцилографе никаких перерывов не замечала, вполне себе красивая синусоида.категорически нет, т.к. иначе у вас система будет работать с перерывами (конечно только если это не является желаемым поведением).
Нет мне ничего менять не нужно, мне нужно на FP главного окна изменяя значения числовых индикаторов - изменять две частоты. Одну от 50 до 5000 Гц и вторую от 0.01 до 2 Гц.А если меняете настройки оборудования, то далеко не все можно делать на ходу.
-
- professor
- Сообщения: 3396
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 172 раза
- Контактная информация:
Re: Timeout = 0 в Event structure
Буфер DAQ. Программа же не будет по одной точке на плату забрасывать. Тот самый готовый массив отправляется в буфер драйвера (размер можно менять), откуда он уже меньшими партиями перебрасывается в буфер устройства (его размер фиксирован и зависит от устройства).Не совсем поняла каким буфером? Я так понимаю что частота интерации будет определятся частотой дискретизации и количеством точек, которые подаются на вход BasicFG
Частота итерации/дискретизации - скорость выдачи точек одна за другой,
А частота работы цикла - это примерно скорость забрасывания очередного фрагмента в буфер.
Нет перерывов, если вы останавливаете задачу, закидываете новый буфер и запускаете задачу? не верю.Спасибо учту, хотя на осцилографе никаких перерывов не замечала, вполне себе красивая синусоида.
- jane_wild
- master
- Сообщения: 459
- Зарегистрирован: 30 июн 2016, 02:11
- Версия LabVIEW: 2020
- Благодарил (а): 83 раза
- Поблагодарили: 15 раз
- Контактная информация:
Re: Timeout = 0 в Event structure
Не соглашусь. Под частотой итерации я имела ввиду частоту работы цикла. И я так понимаю, в данном примере работает то же правило, что при чтении. Что бы прочитать 50к точек при частоте 500к понадобится 0.1сек, то же самое видимо и здесь - запись 50 000 точек на частоте 500кГц займет 0.1 сек . А иначе как объяснить что частота работы цикла имеет прямую зависимость от соотношения этих двух чисел (которые обведены красненьким на скриншоте) А вот уже сколько периодов синусоиды влезет в это количество точек, это другая история, поэтому и фаза "гоняется по кругу" что бы этот VI знал с какого места продолжать записывать очередную порцию...А частота работы цикла - это примерно скорость забрасывания очередного фрагмента в буфер.
Я же не спорю, просто констатирую факт - картинка на осциллографе не дергается. Это видимо из за того, что начиная новую задачу, синусоида начитается с фазы, которая была после остановки. Хотя может осциллограф такой. В общем я поняла - лучше не останавливать.Нет перерывов, если вы останавливаете задачу, закидываете новый буфер и запускаете задачу? не верю.
Прочитала о buffer size А какой размер выбирать? Максимально возможный? В моем случае usb6351 8191 точек? Или минимально возможный? А может лучше вообще не трогать, согласно упомянутому документу LabVIEW сама позаботиться о размере.
Последний раз редактировалось jane_wild 11 июн 2019, 15:45, всего редактировалось 2 раза.
-
- professor
- Сообщения: 3396
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 172 раза
- Контактная информация:
Re: Timeout = 0 в Event structure
несогласие с чем тут декларируется?Не соглашусь. Под частотой итерации я имела ввиду
Вы не согласны со мной, и пишете то, что написал я, только другими словами. Ок, не соглашайтесь.
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: Timeout = 0 в Event structure
Сколько времени проходит с момента завершения задачи до начала новой? Чтобы это детектировать осциллографом - необходимо настроить время накопления 2-3 секунды. Тогда вы явно увидите, что между завершением задачи и её повторным запуском проходит некоторое время. Это и есть те самые прерывания, о которых говорит Артём.jane_wild писала(а):Я же не спорю, просто констатирую факт - картинка на осциллографе не дергается. Это видимо из за того, что начиная новую задачу, синусоида начитается с фазы, которая была после остановки. Хотя может осциллограф такой.
Прочитала о buffer size А какой размер выбирать? Максимально возможный? В моем случае usb6351 8191 точек? Или минимально возможный? А может лучше вообще не трогать, согласно упомянутому документу LabVIEW сама позаботиться о размере.
В данном случае частота будет контролироваться размером буфера (который, кстати, не задан). Проблема будет, если вы попытаетесь загнать в буфер (по умолчанию порядка секунды) сигнал, который его превышает по длине. Не проверял, но подозреваю, что система выдаст ошибку. Если куски разумных размеров, то каждый цикл система будет ждать, пока буфер освободится. Хотя, был у меня проект, в котором буфер игнорировал свои размеры и с радостью принимал очередную порцию данных. Пришлось руками проверять его размеры. Так что проверьте со своим оборудованием - с какой реально частотой будет крутиться цикл. Если она явно превышает "правильную", то архитектура опасна. Во-первых, засорением памяти, во-вторых тем, что ваше изменение придёт на выход с большим опозданием.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 6 Ответы
- 202 Просмотры
-
Последнее сообщение Artem.spb