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

E20-10 Синхронизация нескольких модулей

Вы не вошли.

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

Павел
20.01.2014 18:07:56
#1

Гость

E20-10 Синхронизация нескольких модулей

Здравствуйте.
Пишу программу для сбора 8 каналов с частотой выборки 5МГц. Соответственно планируется использование 4-х модулей E20-10 на максимальной частоте, каждый модуль опрашивает 2 канала.
Сейчас дело дошло до синхронизации двух модулей и полезли нюансы.

1. Модуль конфигурируем в режиме SLAVE. Т.е. задаем ему EXT_ADC_CLOCK_ON_RISING_EDGE_E2010 и EXT_ADC_START_ON_RISING_EDGE_E2010, чтобы он работал синхронно с мастером. Он и работает, но если считать параметры обратно, вместо EXT_ADC_START_ON_RISING_EDGE_E2010 будет INT_ADC_START_E2010 (а если записать EXT_ADC_START_ON_FALLING_EDGE_E2010, то обратно считается уже INT_ADC_START_WITH_TRANS_E2010). Очевидно почему-то очищается 1-й бит (если считать с нуля) поля SynchroPars.StartSource. Если задать INT_ADC_CLOCK_E2010 или INT_ADC_CLOCK_WITH_TRANS_E2010, то назад считывается все корректно.

2. У модуля работающего в режиме SLAVE не учитывается параметр ChannelsQuantity. Например опрашиваем два канала: Analog2 и Analog3. Соответственно, задаем ChannelsQuantity=2, ControlTable[0]=1, ControlTable[1]=2. Оставшаяся часть таблицы ControlTable заполнена нулями. В буфере видим что каналы Analog2 и Analog3 присутствует только в первой выборке, а затем идет много значений канала Analog1 (помним что конец таблицы заполнен нулями!), потом идет одна выборка с каналами Analog2 и Analog3 и далее опять много (~127) выборок где есть только Analog1. У модуля в режиме MASTER такого нет. При считывании параметров - все корректно, т.е ChannelsQuantity=2, ControlTable[0]=1, ControlTable[1]=2, далее в таблице ControlTable нули.

3. На частоте АЦП 7.5 МГц модули работают синхронно, на частоте 10.0 МГц появляется плавный уход. Разбежка в один буфер (262144 слов) накапливается за несколько минут. Алгоритм сбора и контроля синхронизма описан ниже. На частоте 7.5МГц разница между временами окончания операции чтения разных модулей составляет 0,+1,-1 мс в большинстве случаев, и не плывет. На частоте 10 МГц разница начинает медленно уплывать: сначала 0(+-1), потом 1(+-1), потом 2,3 и т.д. Доходит где-то до 30 (частота кадров около 34Гц => период около 30мс) и начинается снова 0,1,2...27,28,29,... 

Алгоритм опроса модулей.
1. Создается отдельный поток на опрос всех модулей.
2. В потоке один цикл
3. В начале цикла стоит WaitForMultipleObjects, которой передается список хэндлов на Event`ы модулей E20-10.
4. Затем каждый модулю проверяет состояние своего события с помощью WaitForSingleObject(EventHandle,0)
5. Если Event активен, он сбрасывается (он создается для сброса вручную) и выполняется ReadData для следующей порции данных.
   Запоминается время приема кадра, формируется номер кадра.
6. Конфигурирование, старт/стоп и остальные функции вызываются в контексте основного (интерфейсного) потока.
   Из отдельного потока опроса вызываются только ReadData и GetDataState.
   
Может быть есть какое-то демонстрационное ПО, на котором можно посмотреть синхронную работу нескольких (двух) модулей?
Пробовал использовать для этих целей LGraph2, но в нем каналы у SLAVE-модуля перемешиваются. Т.е. подаем на Analog_1 синус и видим "расческу" по всем каналам этого модуля, а огибающая этой "расчески" - наш синус.

20.01.2014 22:50:40
#2

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

Re: E20-10 Синхронизация нескольких модулей

1. Какой серийный номер или ревизия slave-модуля?
2. Какая версия используемой библиотеки Lusbapi?

Павел
21.01.2014 12:26:27
#3

Гость

Re: E20-10 Синхронизация нескольких модулей

серийные номера модулей
5D775140, ревизия B, модификация 1 - slave
5D775141, ревизия B, модификация 1 - master
версия библиотеки lusbapi.dll 3.4.0.2

25.01.2014 22:26:29
#4

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

Re: E20-10 Синхронизация нескольких модулей

1. Действительно, вроде есть глюк при считывании параметра SynchroPars.StartSource. В понедельник попробую подправить библиотеку.
2. В понедельник попробую попробую воспроизвести у себя описанную ситуацию.
3. Я правильно понял, что при частоте 10 МГц начинают разбегаться модули, работающие в режиме мастер-ведомый?

25.01.2014 22:40:48
#5

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

Re: E20-10 Синхронизация нескольких модулей

В догонку по п.3:
оба модуля со стороны компьютера подключены к одному USB контроллеру или к разным?

Павел
11.02.2014 14:09:11
#6

Гость

Re: E20-10 Синхронизация нескольких модулей

Все описанные проблемы так или иначе удалось решить, нерешенной осталась только синхронная работа модулей на максимальной частоте.
Испытывали работу 4-х модулей: один в режиме мастера, остальные - ведомые. На частоте АЦП 7.5 МГц все работает устойчиво, рассинхронизация наблюдается только если по каким-то причинам не успевают вычитываться буфера FIFO модулей - но это и понятно.
На частоте 10 МГц по всем ведомым модулям наблюдается разбежка как с мастером так и друг с другом.
Пробовались разные варианты подключения со стороны компьютера - 4 модуля, 2 модуля в разные порты - везде ситуация одинаковая.
Также ситуация воспроизводилась в пробной версии Power Graph Demo - синусоиды снятые разными модулями "бегут" друг относительно друга (для каналов одного модуля или на более низкой частоте такого эффекта не наблюдается). В LGraph`e попробовать не удалось, т.к., как уже писал ранее, там синхронный сбор работал не совсем корректно - путались каналы.   
Был выполнен анализ поведения модулей в режиме синхронизации на максимальной частоте по следующей методике:
1. Работало 4 модуля - один ведущий, три ведомых.
2. Каждый модуль опрашивал два канала (частота срезов - 5МГц)
3. На все входы параллельно заводился один и тот же сигнал - синусоида частотой ~6.5 кГц.
4. Контролировалось состояние буферов FIFO модулей во время опроса - данные успевали вычитываться, заполнение буферов было не более 10-20%, переполнение не детектировалось
После анализа данных было выявлено следующее:
1. Запуск измерений происходит синхронно и некоторое время разбежка отсутствует
2. Ведомые модули постепенно начинают пропускать отсчеты. Это выглядит как постепенное отставание по фазе синусоид, записанных ведомыми от синусоиды, записанной ведущим. В какое то время наступает момент, когда от ведущего пришло N периодов синусоиды, а от ведомого - N+1 периодов той же самой синусоиды (т.е. от ведомого пришло меньше отсчетов, поэтому синусоида "cжалась" на один период).
3. Для определения характера пропусков, записанный файл открывался дважды. Второй экземпляр файла был сдвинут относительно первого на один период тестовой синусоиды и совмещен с ним. Т.е. получается что мы сравниваем два соседних периода тестового сигнала. По каналам ведомых модулей видно что между исходным и сдвинутым на один период сигналом периодически появляется разность фаз. Это состояние длится где-то 0,5-2 периода тестовой синусоиды и затем пропадает. По каналам ведущего модуля такой ситуации не наблюдается - два соседних периода тестового сигнала остаются совмещенными друг с другом

11.02.2014 15:23:26
#7

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

Re: E20-10 Синхронизация нескольких модулей

Павел, при межмодульных соединениях Вы придерживались рекомендаций по подключению п. 6.5.1. руководства
http://www.lcard.ru/download/e20_10_users_guide.pdf ?
- Какая длина проводов?
- От ведущего соединяли последовательным обходом или от ведущего - до каждого ведомого?
- В вышеописанном эксперименте на входы разных E20-10 подавался входной сигнал относительно одной и той же точки заземления?

11.02.2014 15:27:19
#8

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

Re: E20-10 Синхронизация нескольких модулей

- С чем соединены E20-10 со стороны USB? С одним хабом? C каким? Или к компьютеру к разным портам, если последнее, то к какому компьютеру и к каким портам (укажите тип материнской платы)?

11.02.2014 15:51:57
#9

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

Re: E20-10 Синхронизация нескольких модулей

ПО поводу вопроса Сергея от 25.01.14 23:40:
Например, если к одному контроллеру USB2.0 подключены два E20-10, то вполне возможно, что контролер изредка данные теряет на частоте 10 МГц...

11.02.2014 16:21:43
#10

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

Re: E20-10 Синхронизация нескольких модулей

Собственно гипотезу о том, что USB-контроллер компьютера (или хаб) теряет отсчёты, можно проверить следующим образом:
1. При том же подключении настроить все 4 модуля на внутреннюю синхронизацию. Настроить на 3-х канальный режим 10 МГц.
2. На входы каналов 1,2,3 каждого модуля подать программно различимые постоянные напряжения.
3. На верхнем программном уровне устроить анализ на непрерывность данных.
Примечание: 3-х канальный режим даёт возможность обнаружить пропажу данных, размером кратным степени 2...

Павел
12.02.2014 22:41:27
#11

Гость

Re: E20-10 Синхронизация нескольких модулей

В разъемах цифровых сигналов подключались линии 16,17,19,36 (т.е. START, SYNC и две земли), металлическая окантовка не подключена.
Длинна проводов между соседними разъемами цифровых сигналов - около 10 см. Провода - витая пара (из Ethernet кабеля, без внешней оболочки)
Питание от штатных источников.
Соединены гирляндой - т.е. от ведущего к ведомому, от него - к следующему ведомому и т.д.
Если смотреть осциллографом - сигнал ровный, с крутыми фронтами без видимых искажений.
Входной сигнал подавался параллельно на центральные пины входных аналоговых разъемов, земля - на земляной вывод одного из аналоговых разъемов (т.е. к остальным модулям земля шла через две линии земли на цифровом разъеме). Но учитывая что тестовый сигнал - низкочастотный (единицы кГц) и без резких фронтов (синусоида), проблем возникнуть не должно.
Со стороны USB все модули включены в один компьютер (в 4 USB гнезда распаяных на самой материнской плате). Получается что подключены к двум контроллерам USB2.0, по два модуля на каждый. Тип материнской платы напишу позже. На частоте 10МГц успевает вычитывать буферы всех 4-х контроллеров (буферы заполнены не больше чем на 5-10%).
Пробовали также включать на другом компьютере разными способами:
1. Все модули включены в один контроллер USB3.0 (карта PCI Express) на 4 порта. Не успевало вычитывать буферы FIFO даже на частоте 7.5МГц.
2. Два модуля включены на контроллер материнской платы, два на контроллер USB3.0 из предыдущего пункта. На частоте 10МГц не успевало, причем буферы модулей, подключенных к USB3.0 переполнялись раньше.
Тест 4-х модулей от внутреннего генератора попробую.
Если будет пропажа данных в трехканальном режиме, порядок следования каналов должен измениться (пусть и ненадолго), я правильно понимаю?

12.02.2014 23:02:45
#12

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

Re: E20-10 Синхронизация нескольких модулей

>> в 4 USB гнезда распаяных на самой материнской плате
В руководстве читали, что так делать нежелательно?

>>Получается что подключены к двум контроллерам USB2.0, по два модуля на каждый
- Вот в этой-то конфигурации точно может быть проблема.

>> Все модули включены в один контроллер USB3.0 (карта PCI Express) на 4 порта. Не успевало вычитывать буферы FIFO даже на частоте 7.5МГц. 
- Это говорит о низком качестве этой PCI Express карты...

>>Если будет пропажа данных в трехканальном режиме, порядок следования каналов должен измениться (пусть и ненадолго), я правильно понимаю?
- Да, т.е порядок следования 1-2-3-1-2-3-... должен нарушиться. Если при внутренней синхронизации обнаружите нарушение порядка, это практически означает, что USB-контроллер потерял данные из-за нехватки его пропускной способности. - Естественно, при условии, что единственный  модуль, подключенный к USB2.0 контролеру, данные не теряет...

13.02.2014 08:26:12
#13

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

Re: E20-10 Синхронизация нескольких модулей

Если источники сигналов не автономные (т.е сами запитаны от сети ~220V), то для исключения сквозных токов в системе (в т.ч. по USB-кабелям, что может явиться ещё одной причиной сбоев!) следует "земли" источников сигналов и компьютера соединить в одну точу. Оптимальное место соединения - корпус системного блока (под винт со стороны источника питания).

13.02.2014 09:46:43
#14

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

Re: E20-10 Синхронизация нескольких модулей

А два модуля E20-10, подключенные к РАЗНЫМ USB2.0 контроллерам и соединённые по схеме синхронизации "ведущий-ведомый", данные не теряют на 10 МГц?

24.02.2014 10:39:51
#15

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

Re: E20-10 Синхронизация нескольких модулей

Обновлена статья
"Модуль E20-10. Типичные примеры подключения."
http://www.lcard.ru/download/e20-10_conn_examples.pdf

- Добавлен пример многомодульной синхронизации E20-10 по технологии MLVDS.

01.02.2015 20:08:47
#16

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

Re: E20-10 Синхронизация нескольких модулей

Добрый день. Пытаюсь несколько e20-10 синхронно стартовать в Lgraph2 внешней командой (кнопкой). Для этого всем им выставляю в настройках "внешняя цифровая по переходу 0-1".  В целом, это работает, за исключением одного НО. Если крейты до этого работали с конфигурацией "по нажатию кнопки с трансляцией сигнала старт" - то при следующем старте они не дожидаются нажатия кнопки, а сразу стартуют. Но после остановки, при следующем старте, как положено ожидают нажатия кнопки.
Такое ощущения, что где-то не обнуляется флаг и считается что в первый раз сигнал старт уже пришел... настройки "по переходу 1-0" ведут себя также. Что может быть не так?

01.02.2015 21:39:14
#17

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

Re: E20-10 Синхронизация нескольких модулей

Антон, когда стартует не дожидаясь нажатия кнопки, то L-Graph2 показывает остаток данных от предыдущего ввода данных? Или это актуальные данные для текущего времени ввода данных? Проверить это несложно, меняя на входе E20-10 сигнал перед каждой попыткой.

02.02.2015 23:07:16
#18

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

Re: E20-10 Синхронизация нескольких модулей

Данные актуальные, следов "мусора" от предыдущего сигнала, не нашел.

03.02.2015 12:27:59
#19

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

Re: E20-10 Синхронизация нескольких модулей

Попробуйте задействовать обновлённую прошивку модуля:
ftp://ftp.lcard.ru/pub/users/e2010/e2010m10.zip
Положить её следует в корневую директорию программы 'L-Graph II'.

03.02.2015 17:45:11
#20

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

Re: E20-10 Синхронизация нескольких модулей

sad  Не выходит скачать

03.02.2015 18:02:28
#21

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

Re: E20-10 Синхронизация нескольких модулей

Anton пишет:

sad  Не выходит скачать

Антон, напишите свой e-mail. Вышлем.

03.02.2015 18:41:29
#22

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

Re: E20-10 Синхронизация нескольких модулей

Гарманов Александр пишет:

Антон, напишите свой e-mail. Вышлем.

deripas@yandex.ru ,спасибо.

03.02.2015 19:12:53
#23

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

Re: E20-10 Синхронизация нескольких модулей

Выслал. О результате сообщите, пожалуйста.

03.02.2015 23:52:06
#24

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

Re: E20-10 Синхронизация нескольких модулей

sad  к сожалению эффект такой же.
при смене режима "по нажатию кнопки с трансляцией сигнала старт" на "внешняя цифровая по переходу 0-1" - первый старт не дожидается команды.

05.02.2015 16:12:54
#25

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

Re: E20-10 Синхронизация нескольких модулей

Anton, выслал на почту ссылку на lgraph2.

Контакты

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

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

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

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