Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года

Использование LTR27 для получения мгновенных значений

Вы не вошли.

 Поиск | Регистрация | Вход 

Антон Б
30.06.2022 18:39:54
#1

Гость

Использование LTR27 для получения мгновенных значений

Здравствуйте.

Я выполняю работу, в рамках которой используется крейт с модулем LTR27. Мной написан код, который раз в, например, 30 мс должен запрашивать текущие мгновенные данные по всем 16 каналам модуля. Запрашивать данные я пробовал двумя способами:
1. На каждой итерации запускал АЦП, считывал данные и останавливал АЦП.
2. Запустил АЦП при старте работы с модулем, на каждой итерации запрашивал данные.

Первый вариант работает, но слишком долго (около 200 мс). Второй вариант не работает, так как при каждом запросе я получаю одни и те же данные без изменений. Полагаю, что это связано с тем, что LTRD накопил большой буфер измерений (FrequencyDivisor = 9), что привело к тому, что я запрашиваю данные настолько редко, что не успеваю прочитать постоянно накапливающийся буфер. Возможно, мне нужно синхронизировать FrequencyDivisor и частоту вызова функции Recv (при FrequencyDivisor = 9 вызывать чтение раз в 10 мс). Ещё в качестве способа вижу считывание не одного кадра, а сразу большого количества из буфера (передача в Recv размера не 16, а 16 * 1024, например).

Верна ли моя догадка? Какой способ решения моей задачи (считывания мгновенных данных раз в единицу времени) наиболее правильный (в идеале обеспечить считывание раз в 10 мс)?

30.06.2022 19:07:41
#2

Сотрудник "Л Кард"
Здесь с 05.04.2019
Сообщений: 571

Re: Использование LTR27 для получения мгновенных значений

Здравствуйте. Правильней запускать потоковый сбор данных один раз с требуемой частотой сбора данных. Но многоступенчатая система буферизации данных в крейте LTR и в ПК не позволяет гарантировать, что отдельно взятый отсчёт данных пролежит в буфере не дольше 10 мс.
Также сам модуль LTR27 в режиме сбора данных 100 Гц не позволит достичь независимости соседних отсчётов, поскольку его полоса частот пропускания сигнала - 100 Гц. Метрологические характеристики LTR27 нормированы на частоты сбора данных 5 Гц. Cам модуль LTR27 предназначен для измерения медленно меняющихся сигналов, о чём сказано в руководстве. Если необходимо измерять с  частотой  данных 100 Гц, то модуль LTR27 не подходит для этой задачи. Используйте другие модули АЦП системы LTR.

30.06.2022 19:28:19
#3

Сотрудник "Л Кард"
Здесь с 05.04.2019
Сообщений: 571

Re: Использование LTR27 для получения мгновенных значений

Для привязки отсчётов данных к реальному времени в системе LTR можно использовать механизм "меток синхронизации" - синхрособытий (например, от внешнего источника синхронизации), но максимально возможное время нахождения отсчёта в буфере это не уменьшит.

30.06.2022 19:32:09
#4

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,291

Re: Использование LTR27 для получения мгновенных значений

Здравствуйте.
Чтобы получать отсчеты раз в 30 мс, Вам нужно настроить модуль на требуемую Вам частоту в 1000/30 = 33,(3) Гц, установив FrequencyDivider равным 29 (1000 / (29 + 1)).
В результате модуль будет после запуска выдавать по отсчету на каждый канал раз в 30 мс. Вам нужно с этой частотой принимать данные у себя в программе (если Вы будете вычитывать данные реже, то как правильно заметили, будет постоянно увеличиваться буфер в ltrd и так как Вы Recv вычитываете самое старое невычитанное значение из буфера, то Вы будете получать старые данные). Но, нужно понимать, что Windows не система реально времени, и какой-нибудь программный таймер не даст Вам точного периода в 30 мс. Кроме того, процесс передачи отсчета в ПК и Вашу программу также имеет задержу которая будет различаться.  Самый простой способ, это Вызывать постоянно Recv() на 1 кадр с заведомо большим таймаутом, тогда Recv вернет Вам управление как только этот отсчет дойдет до программы, после чего сделать обработку и снова выполнять Recv(). Таким образом сам Recv() и будет делать Вам нужное ожидание, время каждого Recv будет немного плавать из-за задержек Windows и передачи данных, но среднее будет между ними 30 мс. Чтобы на время Recv не останавливался интерфейс это по хорошему нужно делать прием данных в отдельном потоке.

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск