Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
|
||||
|
Re: Подозрительные ситуации в работе E20-10Алексей L Card пишет:
Спасибо за подсказку. Посмотрим в эту сторону при первой же возможности. Алексей L Card пишет:
Да, 4 канала. Просто опрос четырёх аналоговых каналов по очереди. |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10Если получится в пятницу забрать E20-10, то запущу у себя дома под Linux на прогон. Заодно посмотрю, как там прием в драйвере linux сделан, есть ли что-то подозрительное на переходе к следующему шагу приема. |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10А какой у Вас дистрибутив Linux используется? |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10
|
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10А есть возможность выложить код работы с буфером данных устройства в Вашем случае (определение прихода новых данных и их обработку)? |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10Алексей L Card пишет:
Постараюсь это сделать. Проблема в том, что ПО разрабатывалось в графическом интерфейсе, а сейчас у меня к этому компьютеру только удалённый консольный доступ. Нужно разобраться, какие версии файлов куда компилировались. В общих чертах ситуация выглядит так. На первом этапе работы мы использовали программу Lgraph и обрабатывали создаваемые ею бинарные файлы (*.dat). Затем было написано собственное ПО, которое для совместимости с уже имеющимися программами имитирует работу Lgraph в части записываемых бинарных файлов. Сделано это было на основе примера из документации lcomp (того, где работа идёт с одной половинкой буфера, пока записывается другая). Никакой обработки данных помимо записи их на диск не осуществляется. Программа также осуществляет онлайн-визуализацию - для этой цели параллельный поток читает буфер, но не вносит туда никаких изменений. |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10Ранее Вы упоминали про промежуточный буфер. Если будет возможность прислать код передачи данных из буфера lcomp в промежуточный буфер и записи из промежуточного на диск, то могло бы быть полезным (графическая часть в данном случае не интересна, раз не влияет на записываемые данные). Размер буфера lcomp использовался как в примере - 8 * 32768 слов? Ранее Вы писали:
Это речь идет про визуализацию или это вообще уже после сбора, т.к. вроде Вы пишите, что при записи обработки нет. |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10Алексей L Card пишет:
Настройки были такими:
Алексей L Card пишет:
Речь идёт про визуализацию. Это - компромиссный вариант между точностью и скоростью. Используется только для визуального контроля эксперимента. Как я уже писал выше, не влияет на записываемые данные. |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10Фрагмент программы, осуществляющий взаимодействие с lcomp:
pp - это переменная из примера |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-101. Результаты прогона модуля ... |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-101. Завершён очередной прогон модуля E20-10 под Windows на предмет спорадического появлением маркера начала непрерывного блока у цифровых каналов. Никаких отклонений от номинальной работы модуля обнаружено не было. |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10А какой размер передается в pI->RequestBufferStream()? |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10Алексей L Card пишет:
Алексей L Card пишет:
Алексей L Card пишет:
Да. Алексей L Card пишет:
В функции sbor_dannyh() выполняется такой код, относящийся к сохранению данных:
В простейшем случае buf_write=fwrite. Поскольку иногда это приводило к переполнению буфера E20-10, было сделано так. Созданы 32 буфера, таких же, как p. И дополнительные массивы size_t N[32] (номера) и size_t L[32] (длины). Соответствующая версия функции buf_write ищет такое t, что N[t]==0, вписывает в соответствующий массив данные и в L[t] - длину, после чего в N[t] вписывается порядковый номер записи (нумерация сквозная с самого начала с 1). А ещё один поток постоянно сканирует массив N[] и, заметив, что N[t] равно очередному порядковому номеру (на 1 большему, чем тот, с которым запись выполнялась прошлый раз), записывает содержимое соответствующего массива (его начальный кусок длиной длиной L[t]) в файл с помощью функции fwrite, после чего присваивает N[t]=0 (помечая, что buf_write сюда снова может складывать данные). Алгоритм описываю словами, т. к. он запрограммирован не очень понятно и к тому же я удалённо (не имея доступа к управлению проектом в GUI) не могу быстро разобраться, какая конкретно версия файла была скомпилирована. |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10Мы нашли записи, сделанные с другим экземпляром E20-10. На нижней стороне корпуса на нём указан год изготовления 2014. В этих записях, сделанных с тем же ПО, нет указанных выше странностей (спорадически возникающего признака начала непрерывного фрагмента данных и повторов данных со смещением 8192 кадра). Видимо, можно сделать вывод об особенностях (неисправности) конкретного экземпляра E20-10. С целью избежания возникших недоразумений в дальнейшем и повышения уверенности в корректности данных хотелось бы получить информацию об использовании отладочного режима с подстановкой счётчика вместо семплов АЦП, о котором шла речь выше. |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10Здравствуйте. В ходе тестирования обнаружилась одна особенность индикации переполнения буфера модуля светодиодом - видимо при переполнении не отключалась индикация обмена данными по USB зеленым миганием, что могло накладываться и перебивать мигание красным цветом, из-за чего в случае, когда обмен данными не прекращался (что всегда справедливо для lcomp, где чтение данных из модуля идет постоянно) мигание хоть и переставало быть равномерным, но красный цвет не пробивался и увидеть это было тяжело без явного пристального наблюдения. Поэтому вариант переполнения буфера в модуле в Вашем случае может быть очень даже вероятным. Кроме того, у меня на одной машине драйвер не успевал откачивать данные из E20-10 (средняя скорость была 9950 КСлов/c) при Ваших параметрах (там не очень оптимально была сделана постановка запросов чтения из устройства с паузами между блоками по IrqStep, что может быть критично при небольшом IrqStep, при увеличении шага драйвер уже успевал, но в изначальной версии больший шаг не совсем корректно работал). При этом при переполнении буфера разрывы данных у меня происходили как раз с шагом в IrqStep, т.к. при паузе между запросами происходило новое переполнение. Вполне возможно, что у Вас была похожая, но менее критичная ситуация, когда как правило драйвер успевал откачивать данные, но на пределе, и при некоторых условиях загрузки машины все же задержка увеличивалась и происходило его переполнение, так же повторяющееся несколько между обменами в IrqStep, после чего снова скорость восстанавливалась. По крайней мере такой вариант исключать нельзя, а из-за не совсем корректной индикации Вы вряд ли могли заметить, поэтому полагаться можно только на признак переполнения из модуля (правда в Вашей версии драйвера это было не доступно). Сейчас в lcomp для linux было сделано: Соответственно за счет 1 и 2 пункта должна увеличиться надежность откачки данных из модуля без переполнений даже при загрузках машины (я тестировал эту версию даже при активной работе на этой же машине, включая компиляцию больших проектов, и переполнений не возникало даже на той машине, где изначально было переполнение всегда). За счет пункта 3 факт переполнения можно контролировать при работе модуля в штатном режиме. На примере из пункта 4 можно будет сперва проверить корректность передачи данных на Вашей машине, затем с помощью тестового счетчика Вы можете проверить и всю последовательность в Вашей программе с Вашей записью данных. Все это тестировалось на 3-х машинах, но особенно из-за изменения в пункте 1 нужно будет Вам также сперва на тестовом примере хорошо протестировать. В общем это все нужно еще привести к финальному варианту для выдачи, думаю смогу сделать это к началу следующей недели. А Вы софт под ltr из пакетов готовых у себя ставили? |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10Алексей L Card пишет:
Спасибо. На данный момент спешки нет. Наш институт в течении ближайших двух недель как минимум не перейдёт на нормальный режим работы, поэтому полноценно протестировать и использовать сделанные Вами усовершенствования в ПО мы всё равно не сможем. Алексей L Card пишет:
Да, всё было сделано по инструкции. В список репозиториев Ubuntu был добавлен репозиторий L-CARD и оттуда установлен готовый пакет. Ещё вопрос. Алексей L Card пишет:
Если вы будете исправлять эту проблему - возможно ли за одно реализовать режим полного отключения светодиода. Сейчас мигание светодиода приводит к паразитной засветке ФЭУ, подключённого к E20-10, и избавиться от этого достаточно сложно (недостаточно просто заклеить светодиод, пластиковый корпус E20-10 тоже "отсвечивает"). Об этом уже шла речь в соседней ветке форума. |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10Насколько я знаю было решено, что отключение светодиода будет реализовано, по ориентировочным срокам позже сориентируют, т.к. тут основная работа будет в AVR, в lcomp для linux я после этого сделаю небольшой пример, как через доступ к памяти модуля этим управлять. Единственное, для полного отключения работы светодиода на постоянной основе с сохранением настройки в энергонезависимой памяти для отключения его и во время загрузки при запуске необходимо будет обновлять не только основную прошивку AVR, но и загрузчик AVR, что без передачи к нам модуля без программатора сделать не получится. |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10Здравствуйте! В связи со снятием противоэпидемических ограничений в ближайшие дни (надеюсь) мы сможем приступить к работе. |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10Если речь идет о изменениях, что я писал 27.05.2020, то я аналогично ltr и x502 сделал пакеты для драйвера и библиотеки lcomp. Думаю так удобнее будет распространять обновления. Дополнительные функции, специфичные для E20-10, не входящие в штатный интерфейс, сейчас выполняются через работу с памятью модуля c помощью функции inm, outm. Пример использования всех этих дополнительных возможностей можно взять отсюда https://gitlab.com/l-card/acq/devices/e … r/main.cpp.
Тестовую последовательность лучше испытывать на таблице без цифровых каналов для тестирования на полной скорости, т.к. текущая версия прошивки ПЛИС не передает слово в интерфейс для логического канала, связанного с опросами цифровой линии, и скорость передачи соответственно меньше реальной. Также для более надежной передачи лучше использовать IRQ_STEP в 1 МСлово (1024 * 1024) и увеличить сам размер буфера драйвера lcomp. Для избежания пересечений по именам файлов, то все заголовочные файлы lcomp помещены в поддиректорию lcomp, т.е. их нужно включать через #include "lcomp/...". Также пакет библиотеки ставит прошивки в штатное место (/usr/share/lcomp/firmware) и если в LoadBios передать нулевой указатель или пустую строку, то библиотека автоматически выбирает прошивку из стандартного места установки, чтобы не таскать все прошивки с каждой программой. По поводу светодиода, то как появится такая прошивка (надеюсь что скоро, но это зависит от загруженности поддерживающего ее программиста), то включу в этот пример управление им. Отредактировано Алексей L Card (15.06.2020 16:45:31) |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10Спасибо! 1. Всё это должно работать с E20-10 ревизий B, C или и той, и другой? 2. Какие файлы старых версий lcomp могут помешать установке и работе новых пакетов? Что конкретно и откуда нужно удалить? |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-101. Я проверял все это с ревизией B. Ревизия C должна быть совместима с B, но на всякий случай попробую проверить и на C. |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10Алексей L Card пишет:
Запуск драйверов (загрузка модулей ядра *.ko) у нас реализован из прикладной программы, управляющей экспериментом. Сделано этот так потому, что иногда наблюдается потеря доступа к E20-10. И выгрузка модулей ядра и последующая их загрузка обратно решает проблему. В связи с этим прошу уточнить, как в новых пакетах lcomp осуществляется загрузка модулей ядра и как вручную их можно выгрузить и загрузить (на случай, если это понадобится). |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10Модули ядра после сборки устанавливаются в системное дерево модулей в специальную ветку для внешних модулей, собранных с помощью dkms (она разная в разных дистрибутивах). Соответственно они могут загружаться при наличии подключенного устройства автоматически.
Другой вопрос, что это не совсем нормальная ситуация, если приходится перезагружать модули ядра (к тому же это же еще требует запуск от root'а перезагрузки модулей). А как именно выглядит эта "потеря доступа к E20-10", какая-то конкретная функция перестает выполняться? |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10При вызове функции pI->GetSlotParam(&sl) начинает выдаваться неправильный тип платы: не выполняется условие if((sl.BoardType==E2010)||(sl.BoardType==E2010B)). Такая ошибка возникает достаточно редко, ориентировочно после месяца и более непрерывной работы компьютера и устройства E20-10 без перезагрузки. |
|||
|
||||
|
Re: Подозрительные ситуации в работе E20-10Здравствуйте! Тестовая программа (https://gitlab.com/l-card/acq/devices/e … r/main.cpp) с E20-10 ревизии B работает нормально, а с ревизией C всегда возникает одна ошибка в самом начале. Прошу помочь разобраться. Вывод программы:
Ревизия показывается неверно (B вместо C). |
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2
Многоканальный телефон:
+7 (495) 785-95-25
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск