Синхронизация AO

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

Activity Professionalism Silver
doctor
doctor
Сообщения: 2206
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Синхронизация AO

Сообщение Borjomy_1 »

Итак, цикл обновления 50мс. В принципе, не слишком маленький. Настоятельно советую в данном случае ограничить количество циклов. Т.е вычисления должны быть групповыми и выдача сигнала одна на плату. Чтобы выдача не подтормаживала, необходимо развязать ее от графического интерфейса, т.е никаких излишеств, обращений к свойствам контролов и т.п.
Что касается задержки. Почитал я хелп... У меня нет сейчас под рукой платы, чтобы проверить. Итак, есть такой вход "таймаут" он ожидает, пока данные не будут записаны в таск. Поэтому для низкоуровневой синхронизации можно попробовать буфер... уменьшить до 10000..15000 точек (50..70% вашей выдачи). И назначить таймаут в пределах 100..1000 мс. Тогда функция сама будет ждать, пока буфер не освободится.
Fancnc
assistant
assistant
Сообщения: 147
Зарегистрирован: 15 ноя 2011, 22:39
Версия LabVIEW: 2018, 2020
Откуда: СПб
Контактная информация:

Re: Синхронизация AO

Сообщение Fancnc »

Поэтому для низкоуровневой синхронизации можно попробовать буфер... уменьшить до 10000..15000 точек (50..70% вашей выдачи). И назначить таймаут в пределах 100..1000 мс. Тогда функция сама будет ждать, пока буфер не освободится.
Так не получается, приходится создавать сигнал длительностью не менее 0,15с, буфер ставить где то в 3 раза больше и тогда начинает стабильно работать, а по другому вылетает с ошибкой переполнения буфера.
Fancnc
assistant
assistant
Сообщения: 147
Зарегистрирован: 15 ноя 2011, 22:39
Версия LabVIEW: 2018, 2020
Откуда: СПб
Контактная информация:

Re: Синхронизация AO

Сообщение Fancnc »

Какой то непонятный глюк, не могу понять в чем дело. Запускаешь программу первый раз работает все норм, останавливается без ошибок. Второй раз запускаешь, не запускаются модули, пытаешся остановить программу через стоп,один цикл не останавливается. При чем, когда по разному соединяешь кластеры ошибок, получаются разные эффекты.
Вложения
code.PNG
Fancnc
assistant
assistant
Сообщения: 147
Зарегистрирован: 15 ноя 2011, 22:39
Версия LabVIEW: 2018, 2020
Откуда: СПб
Контактная информация:

Re: Синхронизация AO

Сообщение Fancnc »

Еще вот так побывал...почему то не останавливаются некоторые циклы=(
Вложения
code2.PNG
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2206
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Синхронизация AO

Сообщение Borjomy_1 »

Потому что сделано через одно место...
Останавливать циклы следует не провоцированием ошибки, а отсылкой, например, пустого массива в нотификаторы. В цикле вы проверяете, не пустой ли пришел массив. если да, то стоп. А уже когда цикл завершен, и задача остановлена, тогда можно грохать и нотификатор. Кстати, в вашем случае достаточно одного нотификатора, если вы одни и те-же данные отсылаете. Т.е отсылка в одном месте, а прием в трех. Обработку стопа делаете в цикле генерации. Если стоп, то отсылать пустой массив.
Кейс эвента ставят в цикл while (вообще-то). И стопят его по соответствующему событию.
Fancnc
assistant
assistant
Сообщения: 147
Зарегистрирован: 15 ноя 2011, 22:39
Версия LabVIEW: 2018, 2020
Откуда: СПб
Контактная информация:

Re: Синхронизация AO

Сообщение Fancnc »

Спасибо=)Странно, что такой способ остановки предлагают в примерах, если это через одно место. Пустой массив как признак, а если передавать по нотификатору непосредственно true или false или это тоже через одно место?
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Синхронизация AO

Сообщение Blackman »

Fancnc, раздача данных через Notifier для Вашей задачи не лучший вариант. Посмотрите примеры с RealTime FIFO.
Fancnc
assistant
assistant
Сообщения: 147
Зарегистрирован: 15 ноя 2011, 22:39
Версия LabVIEW: 2018, 2020
Откуда: СПб
Контактная информация:

Re: Синхронизация AO

Сообщение Fancnc »

он не поддерживает 2d массивы=(, а упаковывать в 1d и потом обратно...надо пробывать
Fancnc
assistant
assistant
Сообщения: 147
Зарегистрирован: 15 ноя 2011, 22:39
Версия LabVIEW: 2018, 2020
Откуда: СПб
Контактная информация:

Re: Синхронизация AO

Сообщение Fancnc »

Не очень понимаю как это работает, но это работает, но стоит убрать это кластер ошибок, показанный на скриншоте и опять подвисают циклы.Если не сложно объясните плз.
Вложения
code.PNG
Fancnc
assistant
assistant
Сообщения: 147
Зарегистрирован: 15 ноя 2011, 22:39
Версия LabVIEW: 2018, 2020
Откуда: СПб
Контактная информация:

Re: Синхронизация AO

Сообщение Fancnc »

Дело не в нотификаторах и не способах остановки циклов, а просто подвисают модули когда переполняется буфер. Если убрать старт триггер, работает без проблем, но нет синхронизации, модули запускаются в разное время.
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Синхронизация AO

Сообщение Blackman »

Дело не в Start Triggere, а скорее всего в изменение размера буфера и его записи при первом вызове функции Write до старта задачи. Учтите, что драйвер при этих операциях производит различные проверки валидности параметров конфигурации задачи, резервирует ресурсы и т.д. что требует определенных временных затрат. При этом он может генерировать ошибку, если что то не так, т.е. заходить в цикл в этом случае нет никакого смысла. Я считаю такой запуск задачи в цикле не совсем удачным. Требующим еще и различные "таблетки": First call?, Case Structure.
По поводу RT FIFO: поддерживает 1D Array of Waveforms (аналог 2D Array).
Upd: Когда используется режим Not Allow Regeneration рекомендуется определить при каких условиях происходит подкачка onboard buffer (FIFO): почти полный, почти пустой или заполнен на половину и меньше.
Fancnc
assistant
assistant
Сообщения: 147
Зарегистрирован: 15 ноя 2011, 22:39
Версия LabVIEW: 2018, 2020
Откуда: СПб
Контактная информация:

Re: Синхронизация AO

Сообщение Fancnc »

считаю такой запуск задачи в цикле не совсем удачным. Требующим еще и различные "таблетки": First call?, Case Structure.
Когда идет постоянное обновление сигнала, при других вариантах запуска модули вообще отказываются синхронно запускаться, .
Когда используется режим Not Allow Regeneration рекомендуется определить при каких условиях происходит подкачка onboard buffer (FIFO): почти полный, почти пустой или заполнен на половину и меньше.
это в настройках DAQmx write ?
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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