Форум: Техническая поддержка

Тема: e502: синхронный ввод/вывод

Вы не вошли.

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

25.10.2017 14:14:08
#51

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

Re: e502: синхронный ввод/вывод

Кстати можно попробовать установить шаг для потока ввода равным размеру одного кадра (данные АЦП + DIN), чтобы уменьшить возможную задержку внутри контроллера модуля E502

25.10.2017 15:30:02
#52

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

Re: e502: синхронный ввод/вывод

На счет шага - у меня так и сделано:

X502_SetStreamBufSize(m_dev, X502_STREAM_CH_IN, (m_channels + m_bin_size) * 80);
X502_SetStreamStep(m_dev, X502_STREAM_CH_IN, m_channels + m_bin_size);

на счет бита с периодом 500 мсек - это вы правы, я просто ошибся - конечно 15-й.. по фронту этого бита внешнее устройство запускает внешний таймер... На логику не обращайте внимания, она тут чисто от реальной программы, а мне вот что не совсем ясно - я меняю состояние 0-го бита на выходе и тут же запускаю чтение входов. На разъеме АЦП выход 0-го бита соединен со входным 8-м битом, а 15-й (не 4-й конечно) с 0-м входным... так почему же сигнал на 0-м бите читается раньше чем на 8-м на вот эти пресловутые 7 мсек? Где засада - в моем коде или в стеке USB? я пробовал уменьшать размер входного буфера - а ни фига, данные начинают идти с перерывами.. но с той же начальной задержкой

вот вариант с размером буфера в 250 отсчетов: https://yadi.sk/i/41kg9Uod3P5oGu
а вот - с размером буфера 125 отсчетов: https://yadi.sk/i/3nQm4Njf3P5oRW

25.10.2017 15:33:21
#53

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

Re: e502: синхронный ввод/вывод

на счет компьютера и ОС - ArchLinux, Сore-I5 2.6 GHz... все шустрое, программа работает как сервис, т.е. с рутовым приоритетом.

25.10.2017 16:35:13
#54

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

Re: e502: синхронный ввод/вывод

Каким образом определяется, что выдается на нулевой выходной бит (в программе он как-то явно не выделен и не очень понятно, что там получается)

25.10.2017 16:50:04
#55

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

Re: e502: синхронный ввод/вывод

а-а, точно, этого я в приведенном тексте не указал. там после adc_size = 0 должен идти вызов внешней функции. Но в этой функции ничего особенного нет - используются массивы m_inputs, m_status, из них данные собираются в список и потом пишутся в файл с формате Comtrade (в отдельном потоке с низким приоритетом)

25.10.2017 17:00:04
#56

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

Re: e502: синхронный ввод/вывод

могу эту функцию привести.. но там много разных вызовов других функций. Здесь основная конва:

//цифровая обработка аналоговых данных
    double* adc_data = app->adc->ret_data;
    for(int n = 0; n < app->adc->m_channels; n++)
    {
        app->rza_data->m_prc[n]->update(adc_data[n]);
    }
    emit rzaUpdate();
// обработка цифровых данных
    app->logic->run();
// сохранение входных данных 
    appendSourceData(adc_data);
25.10.2017 17:04:03
#57

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

Re: e502: синхронный ввод/вывод

ничего не меняется если закомментировать здесь любой из вызовов (кроме конечно сохранения входных данных) или просто вместо этой функции вставить только вывод на консоль входных данных... та же задержка если учесть что такт у нас 250 мксек

25.10.2017 17:20:34
#58

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

Re: e502: синхронный ввод/вывод

Просто получается что этот выход формируется у Вас каким то сложным способом и при этом Вы спрашиваете почему он отстает?

25.10.2017 17:29:43
#59

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

Re: e502: синхронный ввод/вывод

в смысле - какой выход?

26.10.2017 11:48:11
#60

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

Re: e502: синхронный ввод/вывод

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

26.10.2017 12:56:51
#61

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

Re: e502: синхронный ввод/вывод

на нулевой бит выводится то, что я прочитал с нулевого бита.. а задержка возникает между нулевым битом на входе и 7-м, куда прямо на разъеме АЦП запаян выход 0-го бита.. т.е. разъем выглядит так

входы     выходы
0 <---+   +----  0
1        |    |       1           
...       |    |      ...
7 <------- +       7
....      |           ...
15      + -------15

Обнаружил еще одну шнягу - задержка растет с течением времени...

26.10.2017 21:22:12
#62

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

Re: e502: синхронный ввод/вывод

В контексте ранее заданного вопроса о синхронной диаграмме ввода-вывода E-502:
Эта диаграмма приведена в новой редакции руководства http://www.lcard.ru/download/e-502_users_guide.pdf , п.3.3.8.

27.10.2017 12:28:13
#63

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

Re: e502: синхронный ввод/вывод

на нулевой бит выводится то, что я прочитал с нулевого бита..

Ну по коду это не очень понятно. Но если предположить, что так, то в общем ничего удивительного. Если у Вас задержка передачи данных по каналу ввода и вывода допустим по 3.5 мс, то и получается, что изменение на 0-м входе Вы увидите через 3.5 мс после самого момента времени (при этом модуль постоянно собирает данные за эти 3.5 мс данные находятся в процессе передачи от модуля в программу), после вывода проходит еще 3.5 мс пока данные дойдут до модуля и будут выставлены.

В общем для ОС общего назначения, которой является Linux, это по мне выглядит скорее хорошим результатом. Приоритет потока в Linux если я не ошибаюсь напрямую не зависит от пользователя, который его запустил.

И сам процессор и частота его работы к задержкам ввода вывода имеет малое отношение.

Если нужна жесткая обратная связь, т.е. чтобы на основании данных на входе изменять значения на выходах за строго заданный интервал времени (да еще если он в мс), то это в любом случае нужно использовать сигнальный процессор или ПК с ОСРВ (хотя для последнего не знаю насколько USB для этого подходит, обычно тогда используют L-502).

По увеличению времени не совсем понятно, до этого вы утверждали, что диаграмма без изменений, что друг-другу противоречит. Если монотонно увеличивается время задержки, то значит Вы не успеваете обрабатывать кадры на ПК с заданной скоростью по одному.

31.10.2017 16:09:14
#64

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

Re: e502: синхронный ввод/вывод

Если бы я не успевал обрабатывать кадры, то на приеме аналоговых данных у меня бы развалился спектр сигналов, поскольку с каждого кадра аналоговые данные пишутся в скользящий буфер и от него берется ДПФ. На практике такого не происходит, да и функции обмена с е502 ошибок не возвращают.  В варианте чтения/записи цифровых данных в асинхронном режиме и отдельном потоке все работало, но такой вариант нас не устраивало из-за больших и непрогнозируемых задержек.. по измерениям там было где-то порядка 30-60 мсек,но это и понятно- асинхронное чтение да еще в отдельном потоке с меньшим приоритетом...

01.11.2017 09:49:40
#65

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

Re: e502: синхронный ввод/вывод

Нарушение входного сигнала будет только если переполнится буфер обмена между модулем и ПК

Контакты

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

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

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

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