Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
|
||||
|
E502 Асинхронный ввод одного кадра АЦП.Добрый день @param[in] tout Таймаут на выполнение функции в мс Я могу запрашивать кадр с частотой в 1 мс? |
|||
|
||||
|
Re: E502 Асинхронный ввод одного кадра АЦП.Добрый день. Для приема кадров с нужной частотой между ними как раз нужен синхронный сбор. |
|||
|
||||
|
Re: E502 Асинхронный ввод одного кадра АЦП.Алексей L Card пишет:
Спасибо, понятно. |
|||
|
||||
|
Re: E502 Асинхронный ввод одного кадра АЦП.Да, буфер по сути работает как очередь. Приходящие данные ставятся в конец, при чтении данные извлекаются из начала (и после чтения их место освобождается) |
|||
|
||||
|
Re: E502 Асинхронный ввод одного кадра АЦП.Добрый день.
А если НЕ нужно? какой флаг выставлять?
double* data |
|||
|
||||
|
Re: E502 Асинхронный ввод одного кадра АЦП.сделал так:
Получил вроде как массив int64 |
|||
|
||||
|
Re: E502 Асинхронный ввод одного кадра АЦП.Функция возвращает значения в double, но если нет преобразования в вольты, то возвращает просто код, полученный от модуля приведенный к double, т.е. дробная часть этого double будет всегда нулевая, и каждое значение можно просто привести к целому (можно и к int32, т.к. код 24-битный), т.е. массив нужно передвать в функцию все равно double, а потом привести при желании отдельно каждый элемент (а не массив int64, приведенный к указателю на массив double). Модуль возвращает 24 битный код, полученный как 16-битный код АЦП, дополненный слева 8 битами нулей и после применением калибровочных коэффициентов в 24 битных числах. Если нужен вообще код АЦП без применения калибровок, то нужно установить перед сбором текущие калибровочные коэффициенты k = 1 и offs = 0 через X502_SetAdcCoef() (см. описание функции). |
|||
|
||||
|
Re: E502 Асинхронный ввод одного кадра АЦП.Спасибо, по разрядности понятно.
то что я получу на выходе: |
|||
|
||||
|
Re: E502 Асинхронный ввод одного кадра АЦП.Код после применения калибровочных коэффициентов (так как они применяются на уровне самого модуля, а не в библиотеке, т.е. модуль уже передает отсчеты с примененными коэффициентами ). |
|||
|
||||
|
Re: E502 Асинхронный ввод одного кадра АЦП.Добрый день. |
|||
|
||||
|
Re: E502 Асинхронный ввод одного кадра АЦП.
|
|||
|
||||
|
Re: E502 Асинхронный ввод одного кадра АЦП.Да, на один сеанс - в ПЗУ не прописывается. При закрытии и открытии связи с модулем коэффициенты снова будут заменены на заводские из ПЗУ. |
|||
|
||||
|
Re: E502 Асинхронный ввод одного кадра АЦП.Добрый день.
из Пусть у нас 4 физических и 4 логических канала заданы, тогда данные в adc_data располагаются следующим образом: |
|||
|
||||
|
Re: E502 Асинхронный ввод одного кадра АЦП.Да, все правильно. |
|||
|
||||
|
Re: E502 Асинхронный ввод одного кадра АЦП.Алексей L Card пишет:
Ммм, я вроде тут обсчитался вчера:
Может 8 Мбайт?
Если, скажем в буфере модуля накопилось 2000 отчетов, а я забираю ProcessData только 1000 ... При следующем вызове я недобранную 1000 заберу?
Или это будут уже совершенно новые отчеты? |
|||
|
||||
|
Re: E502 Асинхронный ввод одного кадра АЦП.stix_s пишет:
ну точнее даже 8 млн. отсчетов, хотя в действительности если речь идет про пример на C++ Builder/Delphi, то полностью он не используется, его можно было бы сделать меньше. stix_s пишет:
Данные из буфера модуля получаются через Recv() и он работает как Вы написали - считывает самые старые не вычитанные отсчеты из буфера модуля, который работает как очередь и по сути очищает их. ProcessData (если у Вас только данные АЦП, то можно использовать более простой вариант ProcessAdcData()) же просто переводить принятых массив из формата модуля, где каждый отсчет - int32 со служебной информацией в отсчеты, соответствующие кодам АЦП или Вольтам (если не только данные АЦП, то еще разбивает их на данные АЦП и данные с цифровых линий). Соответственно он выполняет разбор с начала переданного массива. Если Вы передали на вход 2000 отсчетов, а размер выходного указали 1000, то чтобы потом преобразовать оставшиеся 1000, нужно подать вторую половину массива (т.е. указатель на элемент с номером 1000), или просто принимать через Recv() по 1000 отсчетов и все передавать в ProcessData(). |
|||
|
||||
|
Re: E502 Асинхронный ввод одного кадра АЦП.Ясно, спасибо за развернутый ответ. |
Страницы 1
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2
Многоканальный телефон:
+7 (495) 785-95-25
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск