Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
|
||||
|
При синхронном ввода теряется связь с E502Возникла проблема с получением данных с устройства E502. Схема очень простая, на 1 канал подключён источник постоянного тока, подаётся напряжение от 0 до 8 вольт (можно менять), второй канал заземлён, остальные не используются (могу выложить чертёж схемы). Оба канала (1 и 2) запущены в режиме с общей землёй, запущен синхронный ввод, частота 2000000 (=2x10^6, 2 МГц). Чтение происходит в бесконечном цикле, после каждого чтения выводим первый и последний отсчёт. Данные выдаются правильные, при изменении напряжения реакция мгновенная. Но есть одна проблема - периодически теряется связь. Функция X502_Recv возвращает ошибку -9, после чего дальнейшие попытки чтения оказываются бесполезными (постоянно летит ошибка -9), помогает только закрыть соединение и открыть его по новой. Тогда опять некоторое время будет успешное чтение, но потом ошибка появляется снова. В среднем время до потери связи составляет 20 секунд (даже 15). Как бороться с этой проблемой? Ниже код, так как скорее всего его всё равно нужно показать (может там явный мой косяк). Для укорочения кода убраны проверки кодов ошибок, а также описания временных массивов-буферов, также убраны описания классов, отвечающих за хранение данных. Если нужно ещё что-то - выложу. Код чтения данных:
Код установления соединения:
|
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502Здравствуйте. |
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502Гарманов Александр пишет:
Да, lqmeasstudio ошибок не выдаёт, данные в ней верные, за месяц активной работы только 1 раз в lqm была ошибка чтения, думаю это была случайность (может что-то с питанием). |
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502Описание как устанавливаются размеры всех буферов и их выделение/объявление хотелось бы посмотреть. И еще вопрос, как именно вызывается эта функция чтения данных во время работы (постоянно в каком-то потоке или как-то иначе). |
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502Оставил только чтение, убрал вывод прочитанных данных и сохранение данных. Ошибка всё равно возникла. Чтение происходит в отдельном потоке в бесконечном цикле вида:
Код, в котором производится выделение буфферов, установка их размеров и прочие вспомогательные действия:
|
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502А штатный консольный пример у Вас при этом работает без ошибок? |
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502несколько непонятна необходимость usleep(1000000);, хотя влиять на данную ошибку не должно |
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502Сделал отдельный проект, в котором в цикле выполняется чтение с модуля. Ссылка на архив: http://rgho.st/7cXhFvy5L (проект под Qt4). Но пока есть проблемка - стабильно идёт -140 ошибка (неверный номер канала в буффере), это скорее всего какой-то явный ляп в коде у меня (наверняка memset сделал неправильно), сейчас разбираюсь, думаю с ней справлюсь (код взят ровно тот, что я выкладывал сообщением выше). Штатный консольный пример это какой? Я кажется несколько запутался в материалах, и проглядел его. Код lqmeasstudio пытался разобрать, но он довольно большой, поэтому его пока не осилил. usleep(1000000) в принципе не нужен, но если его убрать, то мы задёргаем модуль, так как цикл будет лететь с дикой скоростью. Однако скорее всего беды не будет - задержку сделает модуль, так как он физически не сможет выдавать столько отсчётов в секунду, и задержку сделает X502_Recv, в итоге мы будет также получать 2 миллиона отсчётов в секунду. Так что эта команда тут скорее как стиль программирования, чтобы отдельные процессы не сожрали все ресурсы. |
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502Исправленная ссылка на архив проекта: http://rgho.st/7rr8kchGP (ссылка в предыдущем сообщении потёрлась, что-то не то нажал на файлообменнике). |
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502Причину -140 нашёл - неиницилизированная переменная (n_channels). Добавил n_channels - channels.size();, теперь -140 нету. Исправленный проект: http://rgho.st/6YlJjlFH9 . Запустил приложение, пока разрыва связи нету. Значит проблема всё-таки в нашей архитектуре (скорее всего). Итог на текущий момент - в чистом приложении ошибки не возникает. Буду пробовать получить ошибку в многопоточном приложении, если удастся - напишу снова (с приложением проекта). Тему можно пока закрыть (или оставить, на случай если удастся это ошибку повторить в чистом многопоточном приложении, но могу и другую тему создать). Спасибо. PS. Ранее не ответил на вопрос про ОС, ОС linux debian . |
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502Общий вопрос - от чего вообще может произойти ошибка -9 ? (ошибка чтения данных синхронного ввода) |
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502Опять накосячил со ссылками, вот верная ссылка на последнюю версию проекта : http://rgho.st/8CmqXpyzj . |
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502Под штатным примером имелся ввиду этот http://www.lcard.ru/download/examples/l … m_read.zip, может собираться и gcc. Само возникновение ошибки несколько странно. Вообще эта ошибка при работе по USB возникает, если какой-то запрос по USB завершился с ошибкой. При этом, если бы были проблемы с подключением по USB, то по идее проблемы должны были возникнуть и в lqmeasstudio и в простом примере. |
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502Открылись новые обстоятельства. Ошибка возникает лишь в случае, если проект собран с флагом -pg, исправленный проект : http://rgho.st/8z7GSRdGN , собрать необходимо в debug-режиме, после этого запускать (можно как под отладчиком, так и без, ошибка воспроизводится). Если убрать флаг -pg, ошибок не будет (по крайней мере я не дождался). Чтобы убрать этот флаг, нужно в pro-файле убрать две строки, которые его подключают (для компилятора и для линковщика, там их сразу видно). Проект по ссылке это ранее выложенный проект (то есть чистый, без посторонних действий), но собранный с флагом -pg. Судя по всему, ошибка как-то связана именно с ним. |
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502Вроде нашел проблему. При сборке с -pg функция ожидания событий от USB возвращает иногда LIBUSB_ERROR_INTERRUPTED (видимо для профилирования при включении этого флага приложению посылаются какие-то сигналы, прерывающие ожидание в функции). Обработал этот код функции корректно и закинул на сборку (версия 1.1.12), так что можете попробовать как собирется обновление |
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502Сейчас проверяю исправление, уже возникла проблема - символические ссылки libe502api.so и аналогичные указывают на старую версию библиотеки. Либо make install их не обновил, либо в сборке они неверно устанавливаются. |
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502Вопрос с символическими ссылками закрыл (просто сам их пересоздал). Тестирую изменения. |
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502За 5 минут работы ни одного разрыва не было. Данные принимаются корректно (факт получения и их равенство реальному сигналу, измеренному вольтметром). Думаю, ошибка исправлена. Спасибо за помощь. |
|||
|
||||
|
Re: При синхронном ввода теряется связь с E502Отлично! Если что обращайтесь. Удачи! |
Страницы 1
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2
Многоканальный телефон:
+7 (495) 785-95-25
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск