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


Получение временных меток пакета данных

Вы не вошли.

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

04.02.2025 12:45:58
#1

Участник
Здесь с 09.12.2020
Сообщений: 37

Получение временных меток пакета данных

Добрый день!
Мне необходимо получать данные о временных метках полученных от модулей данных.
В функции Recv() есть параметр tstamp - что этот параметр должен получать на вход и что на выход для получения временных меток?

И смежный вопрос: необходимо получать непрерывные данные с модулей, при этом данные отправляются "пакетами". Как осуществляется получение этих пакетов:
- модуль собрал данные в течение указанного времени сбора данных (например, 500мс), далее он его отправляет в течение времени timeout и потом получает команду на сбор нового пакета данных (основная проблема в этом случае в том, что пока данные отправляются, модуль не измеряет ничего)?
- или после сбора данных за установленной время данные были положены в буфер (очередь) и оттуда уже отправляются (следовательно, в таком случае пока идет отправка данные записывается в "буфер" и являются непрерывными?


Заранее спасибо за ответ!

06.02.2025 15:24:27
#2

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

Re: Получение временных меток пакета данных

Добрый день!
Подробно о синхрометках и формате элементов массива tstamp расписано в разделе 4.6 общего руководства ltrapi (https://www.lcard.ru/download/ltrapi.pdf). Если что-то будет не понятно - пишите.

По поводу передачи данных, то для большинства модулей LTR (некоторое отличие есть в покадровом сборе LTR210), после запуска сбора функцией Start (или аналогичной) модуль начинает непрерывно собирать данные с заданной частотой опроса АЦП и отсылать их в ПК до тех пор пока не будет вызвана функция Stop. Эти данные принимаются службой ltrd и складываются в буфер (в конец очереди). А уже функция Recv читает эти данные из начала очереди (т.е. самые старые непрочитанные) в заданном количестве (и если нет заданного количества еще в буфере то будет ждать и завершится либо когда появится нужное количество, либо когда закончится заданный таймаут). Т.е. сама функция Recv к модулю не обращается. Т.к. данные при последующих вызовах Recv всегда извлекаются из начала очереди в буфере, то у себя Вы получаете непрерывную последовательность данных наверху снятую с заданной частотой без каких-либо пропусков и т.п. (ну главное только чтобы буфер не переполнился, что возможно если долго не читать из него данные после запуска сбора, но в этом случае Recv вернет соответствующую ошибку). По Stop этот буфер очищается.