Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
|
||||
|
Ситуация при которой крейт не видит слот с АЦПДень добрый. Подскажите пожалуйста. Наша организация приобрела крейт LTR-EU-8(16) и 8 плат АЦП LTR25. Во время отладки нашего ПО обнаружил следующую ситуацию. Отключилось питание крейтов во время работы (отключили свет). Последующее подключение нашего ПО показало наличие всех АЦП в крейте, но применение параметров настройки к платам АЦП вызвало ошибку, и повторное подключение нашего ПО через 10 секунд. При повторном подключении, АЦП во 4 слоте не оказалось. Помогло только выключение / включения питания крейта, после этого все АЦП вновь появились. Дальнейшее моделирование ошибки показало, что исчезать могут АЦП в слотах от 2 до 5 из восьми и никогда первый слот. Прошу учесть, это всего лишь мои предположения, верны ли они? Если нет, то подскажите, что может вызывать потерю крейтом АЦП в описанной ситуации? |
|||
|
||||
|
Re: Ситуация при которой крейт не видит слот с АЦПЗдравствуйте. Во первых нужно проверить, пропадают ли модули из списка в программе штатной LTR Manager (сама программа выполняет просто мониторинг и не мешает работе других программ)? Продолжают ли они там видится корректно как LTR25, или он показывает, что слот пустой, или слот остаются в состоянии "Инициализация"? Во вторых хотелось бы больше знать о том, что происходит в Вашей программе. Какой критерий "модуль не виден", что может к нему приводить - не получен в списке модулей от крейта? Ошибка Open(), ошибка настройки? (или в последних случаях он все же виден?). Какая функция возвращает какой код ошибки при возникновении проблемной ситуации? Open()/Close() для модулей выполняются в тех же отдельных потоках каждый раз или один раз в основном потоке? Как именно уничтожаются потоки? Если прям моментально принудительно (типа TerminateThread()), то это конечно не очень хорошо, и как минимум может привести к тому, что соединение не будет корректно закрыто из-за отсутствия Close и тогда последующий Open вернет соответствующую ошибку, что соединение IN_USE до завершения всей программы (если open-close делается каждый раз) или оставит соединение в непонятном состоянии где часть ответов может быть не принято, если open-close делается один раз в общем потоке. По хорошему завершать конечно лучше потоки корректно, просто подавая потокам признак (через общую переменную или другим образом), что потоку нужно завершиться, по проверке которой поток сразу переходит к вызову Close и выходу из своей функции, а менеджер потоков уже дожидается после передачи сигнала корректного завершения всех потоков, после чего запускает заново. Другой вопрос, что при корректной работе крейта ошибки не должны возникать, и тут вопрос, что именно вызывает изначальную ошибку. И по какому интерфейсу работаете - USB или Ethernet? |
|||
|
||||
|
Re: Ситуация при которой крейт не видит слот с АЦПВ штатной программе LTR Manager не проверял, поскольку в своем ПО полностью продублировали функционал сбора статистических данных. Попробую собрать (мы под Astra Linux). Какой критерий "модуль не виден", что может к нему приводить - не получен в списке модулей от крейта? Правильно ли я понимаю, что перезапуск вашей программы не исправляет ситуацию? Список "обнаруженных" модулей в вашей программе меняется от включения/выключения крейта и не меняется от перезапуска Вашей программы? Если модули обнаружились/не обнаружились, то все так и остается до снятия питания с крейта? Все верно, перезапуск программы не помогает. Крейт не получает в списке видимых этот модуль. Абсолютно точно, Список "обнаруженных" модулей в вашей программе меняется от включения/выключения крейта и не меняется от перезапуска Вашей программы. Как именно уничтожаются потоки? При уничтожении потока дается команда Close(). К сожалению мной был найден баг менеджера потоков, который одновременно с командой Close() принудительно убивал поток. Баг я исправил, но хотелось бы быть уверенным, что это решение проблемы. ...что соединение IN_USE до завершения всей программы (если open-close делается каждый раз) или оставит соединение в непонятном состоянии где часть ответов может быть не принято... т.е. это вполне возможно из-за некорректной работы нашего потока? И по какому интерфейсу работаете - USB или Ethernet? Ethernet. |
|||
|
||||
|
Re: Ситуация при которой крейт не видит слот с АЦП
Лучше проверить для того, чтобы подтвердить из двух разных программ одинаковое поведение и исключить возможно какую-то проблему самой в программе. По идее с установкой проблем быть не должно, если конечно у Вас там есть графическая оболочка, а не только консоль (или также возможно запустить LTR Manager на другой машине из той же сети и получать информацию с целевой).
Ну не прохождение Open возможно, но на получение списка модулей через LTR_GetCrateModules() это не должно влиять. И также по идее тогда должен помогать перезапуск программы.... Также на всякий если поставите LTR Manager посмотрите все версии прошивок крейта в его статистике. |
|||
|
||||
|
Re: Ситуация при которой крейт не видит слот с АЦППремного извиняюсь, но можно уточнить. Я поковырялся в коде. У нас сделано так: |
|||
|
||||
|
Re: Ситуация при которой крейт не видит слот с АЦППрошу прощения, не точно написал |
|||
|
||||
|
Re: Ситуация при которой крейт не видит слот с АЦПДа, можно использовать LTR_GetModuleStatistic вместо LTR_GetCrateModules, как раз ModuleID это поле mid. При вашем коде остается только две возможности, когда модуль не учитывается - LTR_MID_EMPTY или LTR_MID_IDENTIFYING, хотелось бы понять, какой реально там. Ну или в LTR Manager если поставите, то по нему можно понять, он разные строки на эти два значения выводит. |
Страницы 1
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2
Многоканальный телефон:
+7 (495) 785-95-25
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск