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


Синхронный цифровой ввод

Вы не вошли.

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

Андрей
25.07.2008 15:16:59
#1

Гость

Синхронный цифровой ввод

Пользуюсь платой L780 для сбора данных по вибрации турбогенератора. С аналоговым потоковым сбором особых проблем нет. Есть головная боль: собрать в этом же потоке данные с цифровых входов.
Я так понимаю: надо в список каналов прописать значение 0x18 (или 0x19 и т.д. до 0x1F - любой канал). Верно?
Но похоже данные, как я хочу, не собираются. Судя по всему в памяти оказываются случайные числа (либо закономерности я не заметил).
По всей видимости, надо модифицировать биос, чтоб корректно собирать и с цифровых входов. Если это так, то помогите с реализацией. Поможет даже просто подправленный биос.
PS. Исходный текст программы могу выложить, чтоб обсудить
Спасибо

28.07.2008 11:34:50
#2

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: Синхронный цифровой ввод

Андрей,
с функциональной точки зрения, строго говоря, L-780 не имеет аппаратного механизма синхронного ввода. Цифровой регистр ввода просто находится в адресном пространстве ввода-вывода ADSP и защёлкивание значения в регистре происходит по факту программного обращения ADSP к регистру. Естественно, адаптируя BIOS ADSP, наверное можно приблизиться к желанной  синхронности цифрового ввода на фоне сбора ввода данных АЦП. По конкретным вопросам по BIOS ADSP пишите Сергею tikhomir@lcard.ru (но пока он в отпуске).

Отмечу, что, например, в L-791 синхронный цифровой ввод на фоне сбора данных с АЦП поддержан аппаратно, и там такой режим является штатным.

Андрей
28.07.2008 13:11:18
#3

Гость

Re: Синхронный цифровой ввод

Спасибо за ответ. Буду пытаться связаться с Сергеем. Когда у него закончится отпуск?

Кстати L791 у меня имеется, но пока нет возможности проверить указанную функциональность.

Может тогда еще и другой ответ дадите:
Ранее программа была написана под VXD-библиотеку, а теперь ее переделываю под LCOMP. В старой версии при кадровом сборе буфер заполнялся полностью, и этих отсчетов хватало для БПФ. В новой версии библиотеки покадровый сбор (без синхронизации и Autoinit=0) данных не хватает. Более подробно: используются 18 каналов с частотой опроса 400кГц, и межкадровой задержкой порядка 0,7 сек. Выходит частота дискретизации 1 канала - порядка 1 кГц. Полное заполнение массива данными в 256 отсчетов на канал происходит только при цикличном опросе (Autoinit=1), вот и захотелось сюда же вписать и 19-ый канал с опросом дискретных сигналов. Иначе же, надо останавливать цикл, IoAsync спрашивать TTL-линии и снова запускать цикл. Надеюсь, ясно выразился, но функционировать программа будет как бы кривовато.
Так вот вопрос: как добиться корректного заполнения буфера при AutoInit=0 в 256 отсетов каждого из 18 каналов?

28.07.2008 13:42:29
#4

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Синхронный цифровой ввод

вообще говоря логика сбора вроде не менялась.... что значит неполное заполнение?

Андрей
28.07.2008 14:00:42
#5

Гость

Re: Синхронный цифровой ввод

буфер доступен и опрашивается, но при подключенной синусоиде на входе одного из каналов заполняются только несколько периодов сигнала, остальное - белиберда. При включенном цикле сигнал подключенного канала полностью синусоидальный. Не знаю в чем загвоздка.

28.07.2008 14:47:10
#6

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Синхронный цифровой ввод

ммм...при автоините в 0 буфер должен заполниться один раз и все встанет.... глюка вида когда в кадре у одного канала мусор а все остальные нормальные быть не должно... еще могу понять когда в начале буфера все ок, а потом сплошной мусор по всем каналам...

Андрей
29.07.2008 07:14:19
#7

Гость

Re: Синхронный цифровой ввод

вот так и получается. что по тому каналу, где синусоида собираются только несколько первых отсчетов в виде синуса, остальное - белиберда. на остальных каналах - вероятно шум и по всей видимости с тем же количеством отсчетов.
можно ли по переменной sync узнать, сколько всего отсчетов собрано?

29.07.2008 13:12:35
#8

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Синхронный цифровой ввод

она и есть количество собранных отсчетов...

Андрей
29.07.2008 13:37:26
#9

Гость

Re: Синхронный цифровой ввод

У меня было такое предположение.
как понимаю - это указатель, и для плат L780 - номер отсчета определяется как *sync, а для плат L791 - sync[I_ADC_PCI_COUNT_L791]. Если это так, то как расшифровывается формат этого числа?

29.07.2008 15:23:01
#10

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Синхронный цифровой ввод

после каждоq введенноq в буфер компа порции IrqStep отсчетов sync увеличивантся на IrqStep для 780... для 791 похоже...

Андрей
29.07.2008 16:05:17
#11

Гость

Re: Синхронный цифровой ввод

Спасибо
sync[I_ADC_PCI_COUNT_L791] - это и есть ADC_PCI_Count?
И еще: если IrqStep задать x*N, где N - число каналов, то когда все каналы опрашиваются с одной частотой, стало быть, и sync будет указывать на последний опрошенный канал. Это верно?

30.07.2008 09:34:02
#12

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Синхронный цифровой ввод

да
да

Андрей
30.07.2008 10:28:51
#13

Гость

Re: Синхронный цифровой ввод

Учитывая, что размер буфера не пропорционален числу каналов, то получается в каждом новом цикле я не попаду на нужный канал. Поэтому пришлось отказаться от постоянного цикла.
В принципе, в моей задаче достаточно и 256 отсчетов на каждом из 18ти каналов.
Теперь по завершению аналогового сбора пользуюсь для опроса цифры IoAsync(), но такое впечатление, что на плате L780 биосом тож выдача данных со входов не предусмотрена. Не так ли это?

31.07.2008 12:29:41
#14

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Синхронный цифровой ввод

IoAsync должен работать

Андрей
01.08.2008 08:19:13
#15

Гость

Re: Синхронный цифровой ввод

Может я что-то неправильно пишу? вот мой код:
ASYNC_PAR pp;
pp.s_Type = L_ASYNC_TTL_CFG;
pp.Mode = 1;
pI->IoAsync(&pp);

pp.s_Type = L_ASYNC_TTL_INP;
pp.Data[0] = 1;
pI->IoAsync(&pp);
short unsigned TTL = pp.Data[0];

01.08.2008 08:44:23
#16

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Синхронный цифровой ввод

вроде нормально. должны считать данные.

Андрей
01.08.2008 10:54:43
#17

Гость

Re: Синхронный цифровой ввод

так вот: должно быть 3000+-2, а выходит 53247, 54886. В чем загвоздка?

01.08.2008 12:01:11
#18

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Синхронный цифровой ввод

почему 3000? что подключено на цифровые линии? лучше просто побитово расписать 16 бит...

Андрей
04.08.2008 11:41:19
#19

Гость

Re: Синхронный цифровой ввод

Судя по всему должно быть в диапазоне: 1011 1011 0111-1011 1011 1001, а принимаю:
1100 1111 1111 1111 или 1101 0000 0000 0000 или 1101 0110 0110 0110. Закономерности не вижу, хотя в старой VXD все отрабатывало

04.08.2008 12:42:45
#20

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Синхронный цифровой ввод

эээ... к каким линиям цифровые сигналы подведены? на висячих может быть любое число....

Андрей
19.08.2008 14:33:57
#21

Гость

Re: Синхронный цифровой ввод

все 16 линий подключены к тахометру ОМРОН. Под VXD-библиотекой все работало. Причем ситуация аналогична на двух разных компах. Может используется какой-то специальный формат возвращаемого числа?

19.08.2008 15:48:11
#22

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Синхронный цифровой ввод

вообще говоря ничего не менялось.... тока обертка другая...

Андрей
20.08.2008 09:44:09
#23

Гость

Re: Синхронный цифровой ввод

Спасибо за советы.
Все оказалось до банальности просто: Эти числа представляют собой ничто иное, как инверсию десятичных значений. Если в басике, то выглядит так: Hex(&HFFFF Xor ПринятоеЧисло). Получается  2999, 3000 или 3001. Упомятый тахометр (OMRON K3HB выдает в линии тысячные, сотые, десятки, единицы. :-)
И, надеюсь, последний вопрос: Нет ли в Си функции, чтоб распознать двоичное 16-ти разрядное число XXXX, где каждый Х означает десятичное число (от 0 до 9) в своем разряде. Операция И по-декадно (например для единиц: Y=(XXXX&&0x0001)+(X&&0x0002)+(X&& 0x0004)+(X&&0x0008), где X - и есть 2х байтное число вида XXXX) мне откровенно не нравится.

20.08.2008 09:50:56
#24

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Синхронный цифровой ввод

ээээ число же 16-ричное....и от 0 до 9 совпадает с десятиричным.... типа (X&0xF) и все....