Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


Инициализация и управление LTR11 из прошивки LTR-EU-2-5

Вы не вошли.

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

Владимир_Edge
27.11.2025 15:07:28
#1

Гость

Инициализация и управление LTR11 из прошивки LTR-EU-2-5

Добрый день!
Подскажите пожалуйста, что ещё можно и нужно использовать помимо ltr11api. Я попробовал внедрить логику работы библиотеки в прошивку LTR-EU-2-5, но не совсем понимаю где и как ловить ошибки от модуля, непонятно как определить в верном направлении двигаюсь или нет, некоторые функции описанные и вызываемые в библиотеке явно объявляются в другой. Может быть у вас есть примеры управления модулями из прошивки. Необходимо больше информации для продолжения работы, а где ее взять не ясно.

28.11.2025 19:33:15
#2

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

Re: Инициализация и управление LTR11 из прошивки LTR-EU-2-5

Добрый день!

Существует одно важное отличие между обменом с модулями из крейта и из ltrapi.

Сам обмен идет с помощью 32-битных слов, общий формат которых описан в разделе 4.6 документа https://www.lcard.ru/download/ltr.pdf. При этом через процессор идет один поток со словами всех модулей крейта, и задать, какому модулю предназначено слово на передачу, или узнать, от какого модуля пришло слово, можно узнать по битам MMMM (биты с 8 по 11), 0 - первый слот, 15 - последний в 16-местном крейте.

В ltrXXXapi работа идет с одним модулем в конкретном слоте и поле MMMM не заполняется и не анализируется в самой библиотеке, это делается в службе ltrd, которая объединяет передаваемые потоки от клиентов api в один крейту заполняя поля MMMM и разбивает приходящий поток слов по полю MMMM на потоки каждому клиенту.

В остальном же эти слова передаются в крейт без изменений, т.е. как их формирует библиотека и отправляет через LTR_Send/принимает через LTR_Recv, так их и нужно передавать в крейте, только добавив заполнение поля MMMM на передачу и анализ на прием.

В крейте для передачи слов модулям используется baybustx_put() или baybustx_put_array(), которая кладет слово/несколько слов в буфер на передачу в модули и уже дальше они отправляются в фоне. Проверить наличие места в буфере на передачу можно через baybustx_is_buf_full()/baybustx_free_size_byte(). Единственное, если Вы это делаете в параллель с штатной передачей из ПК, то нужно сделать какую-то защиту от выполнения этих функций в параллель из разных потоков.

Прием же выполняется функцией baybusrx_get_data(). Т.к. поток общий, то она получает слова принятые от всех модулей, а дальше по полю MMMM уже можно понять, от какого модуля каждое слово. Если хотите это делать в параллель с штатным приемом и передачей в ПК слов, то тогда нужно там, где эта функция вызывается (отдельно для каждого интерфейса usb/ethernet) после ее вызова перед тем как они будут поставлены на передачу в ПК сделать вызов своей обработки с фильтрацией по слоту модуля.

По сути вся работа с модулем и состоит из посылки нужных слов модулю и ожидания нужных слов в ответ. В первую очередь нужно проверить работу штатной последовательности посылки команд STOP-STOP-RESET-STOP общей для всех модулей, которая описана в том же разделе 4.6 (для некоторых модулей при запущенном сборе одного STOP может быть не достаточно, при этом второй STOP ничему не мешает, поэтому рекомендуется все же слать два STOP перед RESET). Эта посылка реализована в ltr_module_open в lib/ltrmodule/ltrmodule.c в исходных кодах ltrapi, и получить в ответ на это слово с идентификатором модуля.Если это получится, то дальше уже по аналогии обмен словами из всех функций ltr11api.

Контакты

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

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

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

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