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

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

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

Postby Borjomy_1 on 04 Apr 2017, 09:10

Итак, цикл обновления 50мс. В принципе, не слишком маленький. Настоятельно советую в данном случае ограничить количество циклов. Т.е вычисления должны быть групповыми и выдача сигнала одна на плату. Чтобы выдача не подтормаживала, необходимо развязать ее от графического интерфейса, т.е никаких излишеств, обращений к свойствам контролов и т.п.
Что касается задержки. Почитал я хелп... У меня нет сейчас под рукой платы, чтобы проверить. Итак, есть такой вход "таймаут" он ожидает, пока данные не будут записаны в таск. Поэтому для низкоуровневой синхронизации можно попробовать буфер... уменьшить до 10000..15000 точек (50..70% вашей выдачи). И назначить таймаут в пределах 100..1000 мс. Тогда функция сама будет ждать, пока буфер не освободится.
Borjomy_1
expert
expert
 
Posts: 1673
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 294
VIP

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

Postby Fancnc on 04 Apr 2017, 20:20

Поэтому для низкоуровневой синхронизации можно попробовать буфер... уменьшить до 10000..15000 точек (50..70% вашей выдачи). И назначить таймаут в пределах 100..1000 мс. Тогда функция сама будет ждать, пока буфер не освободится.

Так не получается, приходится создавать сигнал длительностью не менее 0,15с, буфер ставить где то в 3 раза больше и тогда начинает стабильно работать, а по другому вылетает с ошибкой переполнения буфера.
Fancnc
assistant
assistant
 
Posts: 107
Joined: 15 Nov 2011, 22:39
Location: СПб
LabVIEW Version: 2016
Karma: 5

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

Postby Fancnc on 05 Apr 2017, 13:22

Какой то непонятный глюк, не могу понять в чем дело. Запускаешь программу первый раз работает все норм, останавливается без ошибок. Второй раз запускаешь, не запускаются модули, пытаешся остановить программу через стоп,один цикл не останавливается. При чем, когда по разному соединяешь кластеры ошибок, получаются разные эффекты.
Attachments
code.PNG
Fancnc
assistant
assistant
 
Posts: 107
Joined: 15 Nov 2011, 22:39
Location: СПб
LabVIEW Version: 2016
Karma: 5

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

Postby Fancnc on 05 Apr 2017, 15:07

Еще вот так побывал...почему то не останавливаются некоторые циклы=(
Attachments
code2.PNG
Fancnc
assistant
assistant
 
Posts: 107
Joined: 15 Nov 2011, 22:39
Location: СПб
LabVIEW Version: 2016
Karma: 5

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

Postby Borjomy_1 on 05 Apr 2017, 21:57

Потому что сделано через одно место...
Останавливать циклы следует не провоцированием ошибки, а отсылкой, например, пустого массива в нотификаторы. В цикле вы проверяете, не пустой ли пришел массив. если да, то стоп. А уже когда цикл завершен, и задача остановлена, тогда можно грохать и нотификатор. Кстати, в вашем случае достаточно одного нотификатора, если вы одни и те-же данные отсылаете. Т.е отсылка в одном месте, а прием в трех. Обработку стопа делаете в цикле генерации. Если стоп, то отсылать пустой массив.
Кейс эвента ставят в цикл while (вообще-то). И стопят его по соответствующему событию.
Borjomy_1
expert
expert
 
Posts: 1673
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 294
VIP

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

Postby Fancnc on 06 Apr 2017, 12:40

Спасибо=)Странно, что такой способ остановки предлагают в примерах, если это через одно место. Пустой массив как признак, а если передавать по нотификатору непосредственно true или false или это тоже через одно место?
Fancnc
assistant
assistant
 
Posts: 107
Joined: 15 Nov 2011, 22:39
Location: СПб
LabVIEW Version: 2016
Karma: 5

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

Postby Blackman on 06 Apr 2017, 14:09

Fancnc, раздача данных через Notifier для Вашей задачи не лучший вариант. Посмотрите примеры с RealTime FIFO.
Blackman
leader
leader
 
Posts: 594
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 140

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

Postby Fancnc on 06 Apr 2017, 15:03

он не поддерживает 2d массивы=(, а упаковывать в 1d и потом обратно...надо пробывать
Fancnc
assistant
assistant
 
Posts: 107
Joined: 15 Nov 2011, 22:39
Location: СПб
LabVIEW Version: 2016
Karma: 5

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

Postby Fancnc on 06 Apr 2017, 16:07

Не очень понимаю как это работает, но это работает, но стоит убрать это кластер ошибок, показанный на скриншоте и опять подвисают циклы.Если не сложно объясните плз.
Attachments
code.PNG
Fancnc
assistant
assistant
 
Posts: 107
Joined: 15 Nov 2011, 22:39
Location: СПб
LabVIEW Version: 2016
Karma: 5

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

Postby Fancnc on 06 Apr 2017, 18:15

Дело не в нотификаторах и не способах остановки циклов, а просто подвисают модули когда переполняется буфер. Если убрать старт триггер, работает без проблем, но нет синхронизации, модули запускаются в разное время.
Fancnc
assistant
assistant
 
Posts: 107
Joined: 15 Nov 2011, 22:39
Location: СПб
LabVIEW Version: 2016
Karma: 5

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

Postby Blackman on 06 Apr 2017, 23:00

Дело не в Start Triggere, а скорее всего в изменение размера буфера и его записи при первом вызове функции Write до старта задачи. Учтите, что драйвер при этих операциях производит различные проверки валидности параметров конфигурации задачи, резервирует ресурсы и т.д. что требует определенных временных затрат. При этом он может генерировать ошибку, если что то не так, т.е. заходить в цикл в этом случае нет никакого смысла. Я считаю такой запуск задачи в цикле не совсем удачным. Требующим еще и различные "таблетки": First call?, Case Structure.
По поводу RT FIFO: поддерживает 1D Array of Waveforms (аналог 2D Array).
Upd: Когда используется режим Not Allow Regeneration рекомендуется определить при каких условиях происходит подкачка onboard buffer (FIFO): почти полный, почти пустой или заполнен на половину и меньше.
Blackman
leader
leader
 
Posts: 594
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 140

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

Postby Fancnc on 07 Apr 2017, 00:05

считаю такой запуск задачи в цикле не совсем удачным. Требующим еще и различные "таблетки": First call?, Case Structure.

Когда идет постоянное обновление сигнала, при других вариантах запуска модули вообще отказываются синхронно запускаться, .
Когда используется режим Not Allow Regeneration рекомендуется определить при каких условиях происходит подкачка onboard buffer (FIFO): почти полный, почти пустой или заполнен на половину и меньше.

это в настройках DAQmx write ?
Fancnc
assistant
assistant
 
Posts: 107
Joined: 15 Nov 2011, 22:39
Location: СПб
LabVIEW Version: 2016
Karma: 5

Previous

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

Who is online

Users browsing this forum: Bing [Bot], Yandex and 6 guests

cron