Меню

+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
|
||||
|
Re: e502: синхронный ввод/выводКстати можно попробовать установить шаг для потока ввода равным размеру одного кадра (данные АЦП + DIN), чтобы уменьшить возможную задержку внутри контроллера модуля E502 |
|||
|
||||
|
Re: e502: синхронный ввод/выводНа счет шага - у меня так и сделано:
на счет бита с периодом 500 мсек - это вы правы, я просто ошибся - конечно 15-й.. по фронту этого бита внешнее устройство запускает внешний таймер... На логику не обращайте внимания, она тут чисто от реальной программы, а мне вот что не совсем ясно - я меняю состояние 0-го бита на выходе и тут же запускаю чтение входов. На разъеме АЦП выход 0-го бита соединен со входным 8-м битом, а 15-й (не 4-й конечно) с 0-м входным... так почему же сигнал на 0-м бите читается раньше чем на 8-м на вот эти пресловутые 7 мсек? Где засада - в моем коде или в стеке USB? я пробовал уменьшать размер входного буфера - а ни фига, данные начинают идти с перерывами.. но с той же начальной задержкой вот вариант с размером буфера в 250 отсчетов: https://yadi.sk/i/41kg9Uod3P5oGu |
|||
|
||||
|
Re: e502: синхронный ввод/выводна счет компьютера и ОС - ArchLinux, Сore-I5 2.6 GHz... все шустрое, программа работает как сервис, т.е. с рутовым приоритетом. |
|||
|
||||
|
Re: e502: синхронный ввод/выводКаким образом определяется, что выдается на нулевой выходной бит (в программе он как-то явно не выделен и не очень понятно, что там получается) |
|||
|
||||
|
Re: e502: синхронный ввод/вывода-а, точно, этого я в приведенном тексте не указал. там после adc_size = 0 должен идти вызов внешней функции. Но в этой функции ничего особенного нет - используются массивы m_inputs, m_status, из них данные собираются в список и потом пишутся в файл с формате Comtrade (в отдельном потоке с низким приоритетом) |
|||
|
||||
|
Re: e502: синхронный ввод/выводмогу эту функцию привести.. но там много разных вызовов других функций. Здесь основная конва:
|
|||
|
||||
|
Re: e502: синхронный ввод/выводничего не меняется если закомментировать здесь любой из вызовов (кроме конечно сохранения входных данных) или просто вместо этой функции вставить только вывод на консоль входных данных... та же задержка если учесть что такт у нас 250 мксек |
|||
|
||||
|
Re: e502: синхронный ввод/выводПросто получается что этот выход формируется у Вас каким то сложным способом и при этом Вы спрашиваете почему он отстает? |
|||
|
||||
|
Re: e502: синхронный ввод/выводв смысле - какой выход? |
|||
|
||||
|
Re: e502: синхронный ввод/выводЯ имею ввиду форирования значений на выходной 0-ой бит. Я так понял что на нем у Вас задержка, но из программы не очень понятно, а что там выводится |
|||
|
||||
|
Re: e502: синхронный ввод/выводна нулевой бит выводится то, что я прочитал с нулевого бита.. а задержка возникает между нулевым битом на входе и 7-м, куда прямо на разъеме АЦП запаян выход 0-го бита.. т.е. разъем выглядит так входы выходы Обнаружил еще одну шнягу - задержка растет с течением времени... |
|||
|
||||
|
Re: e502: синхронный ввод/выводВ контексте ранее заданного вопроса о синхронной диаграмме ввода-вывода E-502: |
|||
|
||||
|
Re: e502: синхронный ввод/вывод
Ну по коду это не очень понятно. Но если предположить, что так, то в общем ничего удивительного. Если у Вас задержка передачи данных по каналу ввода и вывода допустим по 3.5 мс, то и получается, что изменение на 0-м входе Вы увидите через 3.5 мс после самого момента времени (при этом модуль постоянно собирает данные за эти 3.5 мс данные находятся в процессе передачи от модуля в программу), после вывода проходит еще 3.5 мс пока данные дойдут до модуля и будут выставлены. В общем для ОС общего назначения, которой является Linux, это по мне выглядит скорее хорошим результатом. Приоритет потока в Linux если я не ошибаюсь напрямую не зависит от пользователя, который его запустил. И сам процессор и частота его работы к задержкам ввода вывода имеет малое отношение. Если нужна жесткая обратная связь, т.е. чтобы на основании данных на входе изменять значения на выходах за строго заданный интервал времени (да еще если он в мс), то это в любом случае нужно использовать сигнальный процессор или ПК с ОСРВ (хотя для последнего не знаю насколько USB для этого подходит, обычно тогда используют L-502). По увеличению времени не совсем понятно, до этого вы утверждали, что диаграмма без изменений, что друг-другу противоречит. Если монотонно увеличивается время задержки, то значит Вы не успеваете обрабатывать кадры на ПК с заданной скоростью по одному. |
|||
|
||||
|
Re: e502: синхронный ввод/выводЕсли бы я не успевал обрабатывать кадры, то на приеме аналоговых данных у меня бы развалился спектр сигналов, поскольку с каждого кадра аналоговые данные пишутся в скользящий буфер и от него берется ДПФ. На практике такого не происходит, да и функции обмена с е502 ошибок не возвращают. В варианте чтения/записи цифровых данных в асинхронном режиме и отдельном потоке все работало, но такой вариант нас не устраивало из-за больших и непрогнозируемых задержек.. по измерениям там было где-то порядка 30-60 мсек,но это и понятно- асинхронное чтение да еще в отдельном потоке с меньшим приоритетом... |
|||
|
||||
|
Re: e502: синхронный ввод/выводНарушение входного сигнала будет только если переполнится буфер обмена между модулем и ПК |