Выдать очень длинный буфер (DO)

Радиотехника, платы, схемы, оборудование, фото- видео- приборы, компьютеры
Ответить
Artem.spb

Activity Автор
professor
professor
Сообщения: 3387
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Выдать очень длинный буфер (DO)

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

Есть задача выдать очень длинную последовательность очень точно по таймингу, т.е. нужно использовать буферизацию. Но последовательность может быть длительностью в несколько дней, да ещё и неизвестно, сколько именно (пока пользователь не остановит), так что заранее сформировать весь буфер нереально.
Задача осложняется тем, что железа у меня нет, эксперименты затягиваются. Работаю на симуляторе.
Модуль NI 9402, cDAQ-9188
Делаю так:
DO.png
генерацию выдаваемого массива упростил, сейчас это не принципиально.
На симуляторе запускаю, вижу что dt = 500мс, из чего заключаю, что функция записи в буфер честно ждёт, пока в буфере появится свободное место.
Заказчик запускает у себя, и dt < 70мс, т.е. никакого ожидания не наблюдается.
Где косяк, как включить ожидание?
wait mode не похож на решение, потому что все три варианта ждут, только с разной загрузкой процессора.
Blackman

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

Re: Выдать очень длинный буфер (DO)

Сообщение Blackman »

На симуляторе запускаю, вижу что dt = 500мс
Все правильно. А что надо?
Заказчик запускает у себя, и dt < 70мс, т.е. никакого ожидания не наблюдается.
? Можно пояснить более подробно?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3387
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Выдать очень длинный буфер (DO)

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

Blackman писал(а):
На симуляторе запускаю, вижу что dt = 500мс
Все правильно. А что надо?
именно это и надо
Заказчик запускает у себя, и dt < 70мс, т.е. никакого ожидания не наблюдается.
? Можно пояснить более подробно?
при работе с реальным железом dt сильно меньше "нужного", т.е. функция вовсе не дожидается, когда в буфере появится место и сразу перезаписывает данные.
Да, забыл добавить, что на реальном железе выскакивает предупреждение
Error 50202
Possible reason(s):
A system call returned a warning. The operation was completed but the state of the system may be unreliable.
Blackman

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

Re: Выдать очень длинный буфер (DO)

Сообщение Blackman »

Output Tasks
For generations, the amount of data you write before starting a generation determines the size of the buffer. The first call to a Multiple Samples version of the Write function/VI creates a buffer and determines its size.

You also can use the Output Buffer Config function/VI to create an output buffer. If you use this function/VI, you must use it before writing any data.

The samples per channel attribute/property on the Timing function/VI does not determine the buffer size for output. Instead it is the total number of samples to generate. If n is your buffer size, setting samples per channel to 3×n generates the data in the buffer exactly three times. To generate the data exactly once, set samples per channel to n.

Размер буфера 500. Samples Per Channel 1000=2*500 -> генерация данных из буфера 2 раза.

Здесь пример Dynamically Updating User Buffer Data. По моему то что надо.
http://www.ni.com/example/27148/en/
Artem.spb

Activity Автор
professor
professor
Сообщения: 3387
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Выдать очень длинный буфер (DO)

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

Как это водится, RTMF.
Заработало, спасибо.
Blackman писал(а):Здесь пример Dynamically Updating User Buffer Data. По моему то что надо.
http://www.ni.com/example/27148/en/
Это не совсем то, что надо.
Задача выдавать импульсы со всё возрастающей паузой между ними, если я буду гонять одно и то же по кругу, или перезаписывать новые поверх старых, то будет большой косяк в выходном сигнале.
Регенерацию я как раз выключил, чтобы не получить осложнений. А развлекаться с поиском текущей точки для записи - лишняя работа.
Ответить

Вернуться в «Железо»