Есть задача выдать очень длинную последовательность очень точно по таймингу, т.е. нужно использовать буферизацию. Но последовательность может быть длительностью в несколько дней, да ещё и неизвестно, сколько именно (пока пользователь не остановит), так что заранее сформировать весь буфер нереально.
Задача осложняется тем, что железа у меня нет, эксперименты затягиваются. Работаю на симуляторе.
Модуль NI 9402, cDAQ-9188
Делаю так:
генерацию выдаваемого массива упростил, сейчас это не принципиально.
На симуляторе запускаю, вижу что dt = 500мс, из чего заключаю, что функция записи в буфер честно ждёт, пока в буфере появится свободное место.
Заказчик запускает у себя, и dt < 70мс, т.е. никакого ожидания не наблюдается.
Где косяк, как включить ожидание?
wait mode не похож на решение, потому что все три варианта ждут, только с разной загрузкой процессора.
Выдать очень длинный буфер (DO)
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Выдать очень длинный буфер (DO)
Все правильно. А что надо?На симуляторе запускаю, вижу что dt = 500мс
? Можно пояснить более подробно?Заказчик запускает у себя, и dt < 70мс, т.е. никакого ожидания не наблюдается.
-
- professor
- Сообщения: 3407
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Выдать очень длинный буфер (DO)
именно это и надоBlackman писал(а):Все правильно. А что надо?На симуляторе запускаю, вижу что dt = 500мс
при работе с реальным железом dt сильно меньше "нужного", т.е. функция вовсе не дожидается, когда в буфере появится место и сразу перезаписывает данные.? Можно пояснить более подробно?Заказчик запускает у себя, и dt < 70мс, т.е. никакого ожидания не наблюдается.
Да, забыл добавить, что на реальном железе выскакивает предупреждение
Error 50202
Possible reason(s):
A system call returned a warning. The operation was completed but the state of the system may be unreliable.
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Выдать очень длинный буфер (DO)
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/
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/
-
- professor
- Сообщения: 3407
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Выдать очень длинный буфер (DO)
Как это водится, RTMF.
Заработало, спасибо.
Задача выдавать импульсы со всё возрастающей паузой между ними, если я буду гонять одно и то же по кругу, или перезаписывать новые поверх старых, то будет большой косяк в выходном сигнале.
Регенерацию я как раз выключил, чтобы не получить осложнений. А развлекаться с поиском текущей точки для записи - лишняя работа.
Заработало, спасибо.
Это не совсем то, что надо.Blackman писал(а):Здесь пример Dynamically Updating User Buffer Data. По моему то что надо.
http://www.ni.com/example/27148/en/
Задача выдавать импульсы со всё возрастающей паузой между ними, если я буду гонять одно и то же по кругу, или перезаписывать новые поверх старых, то будет большой косяк в выходном сигнале.
Регенерацию я как раз выключил, чтобы не получить осложнений. А развлекаться с поиском текущей точки для записи - лишняя работа.