Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
Здравствуйте,
На канале просто шум ("открытый вход"). А записывается/считывается как бы чистый "0".
Я пока снимаю вопрос. Санитайзер памяти намекает на проблемы в прикладном коде. Так что проблема не в SDK x502 или уж точно не только там. Напишу позже, когда разберусь с ситуацией.
Здравствуйте,
Спасибо за отклик.
"Запрокшенное" состояние - последовательность вызовов о том, что далее обмен будет по USB:
X502_Create()
constexpr int usb_devcnt = 1;
usb_rec_list = static_cast<t_x502_devrec*>(malloc(usb_devcnt * sizeof(t_x502_devrec)));
... = E502_UsbGetDevRecordsList(&usb_rec_list[0], usb_devcnt, 0, nullptr);
... = X502_OpenByDevRecord(handle, &usb_rec_list[0]);
Далее, берем случай для 3 каналов (0,1,2) и 100КГц на канал.
chan_cnt = 3
Конфигурирование
X502_SetRefFreq (handle, ((chan_cnt % 2) ? X502_REF_FREQ_1500KHZ : X502_REF_FREQ_2000KHZ));
X502_SetLChannelCount(handle, chan_cnt);
по каждому каналу:
{
X502_SetLChannel(handle, static_cast<uint32_t>(ii), f_chans[ii], f_chan_modes[ii], f_chan_ranges[ii], 0);
Log_Wrapper ("bh:", handle, " ii:", ii, " f_chans[ii]:", (int)f_chans[ii], " f_chan_modes[ii]:", (int)f_chan_modes[ii], " f_chan_ranges[ii]:", (int)f_chan_ranges[ii]);
}
X502_SetAdcFreq(handle, &f_adc, &f_frame); // f_adc:300000 f_frame:100000
X502_Configure(handle, 0)
в логах:
17.06.2020 12:49:45.380480 bh:0x694818 ii:0 f_chans[ii]:0 f_chan_modes[ii]:0 f_chan_ranges[ii]:0
17.06.2020 12:49:45.380841 bh:0x694818 ii:1 f_chans[ii]:1 f_chan_modes[ii]:0 f_chan_ranges[ii]:2
17.06.2020 12:49:45.381031 bh:0x694818 ii:2 f_chans[ii]:2 f_chan_modes[ii]:0 f_chan_ranges[ii]:0
Сбор и останов
X502_StreamsEnable(handle, X502_STREAM_ADC);
X502_StreamsStart(handle);
в цикле:
{
X502_Recv(handle, rcv_buf, read_block_size, READ_TIMEOUT);
X502_ProcessDataWithUserExt(handle, rcv_buf, .., X502_PROC_FLAGS_VOLT, .., .., nullptr, nullptr, nullptr, nullptr); // blackfin'a физически нет
}
X502_StreamsStop(handle);
X502_StreamsDisable(handle, X502_STREAM_ADC);
Затем просто добавляем еще канал (3) с такой же последовательностью конфигурирования и сбора-останова.
в логах:
17.06.2020 12:50:12.954854 bh:0x694818 ii:0 f_chans[ii]:0 f_chan_modes[ii]:0 f_chan_ranges[ii]:0
17.06.2020 12:50:12.954979 bh:0x694818 ii:1 f_chans[ii]:1 f_chan_modes[ii]:0 f_chan_ranges[ii]:2
17.06.2020 12:50:12.955093 bh:0x694818 ii:2 f_chans[ii]:2 f_chan_modes[ii]:0 f_chan_ranges[ii]:0
17.06.2020 12:50:12.955205 bh:0x694818 ii:3 f_chans[ii]:3 f_chan_modes[ii]:0 f_chan_ranges[ii]:2
X502_SetAdcFreq(handle, &f_adc, &f_frame); // f_adc:400000 f_frame:100000
Если ПО перегрузить, то просто дополнительно (к последнему варианту) выполняется последовательность, описанная вначале, но количество каналов 4 при этом записывает норм.
Не исключена тонкая ошибка (н-р, с обращением к памяти) где-то в нашем коде, но по крайней мере можете оценить последовательность из SDK?
Здравствуйте,
Возник вопрос по последовательности вызовов различных API из состава x502.
А именно: правильно ли при многократном включении и отключении режима регистрации АПЦ экономить на вызовах. Или лучше осуществлять полную последовательность, как это показано в демонстрационных примерах.
То есть по факту - сейчас "запрокшено" некое состояние перед включением синхронного режима.
Затем (при каждой следующей регистрации) используются только функции конфигурирования, сбора и преобразования данных.
Затем возврат в асинхронный режим (просто останов регистрации).
Данная схема оправдала себя в предыдущих задачах, где число каналов было постоянным с момента запуска приложения. Однако в этот раз наблюдается следующее. Если увеличить (например на 1) количество каналов АЦП для последующей регистрации, то по данному каналу приходят постоянные значения (на осциллограмме - линия). Если уменьшать или сохранять прежнее количество каналов, то все данные по всем каналам - правильные.
Во всех случаях ошибок API из SDK x502, вроде бы, не возникает.
Спасибо.
Несколько странно, вроде относительный путь должен устанавливать относительно префикса установки (CMAKE_INSTALL_PREFIX, который по умолчанию обычно /usr/local). Сходу не скажу, не нарушат ли абсолютные пути сборки каких-то пакетов, надо отдельно рассмотреть для решения какой вариант оставить. В принципе свои пути можно указать и явно один раз при вызове cmake через -DSYSTEMD_SERVICE_INSTALL_DIR=/lib/systemd/system -DLTRD_UDEV_RULES_DIR=/lib/udev/rules.d.
Да, все правильно. Я ошибся.
Дело в том, что изначально делал сборку "как есть", то есть без игры с опциями (внутри ltrd настроек), - то есть чтобы собранная ltrd заработала хотя бы как обычное приложение. И только потом включил все остальное (LTRD_DAEMON_ENABLED - ON, LTRD_SYSTEMD_ENABLED - ON, LTRD_USB_ENABLED - ON).
Но cmake что-то кеширует со сборкой и не реагирует на такие изменения как option (или реагирует частично). В результате в тот момент, когда догадался удалить CMakeCache.txt, в CMakeLists уже стоял явный путь (после отчаяния увидеть ltrd.service где-либо на диске кроме исходников ;-))
Ничего существенного, но все же.
В исходнике ltrctl в функцию f_crate_type_str() добавил поддержку крейта CEU-1-4
case LTR_CRATE_TYPE_LTR_CEU_1:
ret = "LTR-CEU1";
mcnt = 1;
break;
Иначе крейт - Unknown, а модуль не отображается (ltrctl clist)
При инсталляции (make install)
ltrd.service и ltr-crates.rules не устанавливаются вообще куда-либо, если не указать явные пути
set(SYSTEMD_SERVICE_INSTALL_DIR /lib/systemd/system)
set(LTRD_UDEV_RULES_DIR /lib/udev/rules.d)
(то есть добавить "/")
Поскольку делал сборку clang'ом (gcc слишком старый), то примеры некоторые не собирались из-за отсутствия линковки с математическими библиотеками (при этом библиотеки ltr собирались нормально)
Добавил в ltrmodule.cmake:
if(LTRAPI_MODULE_USE_MATH)
...
if (CMAKE_C_COMPILER MATCHES "clang")
set(LTRAPI_MODULE_LIBS ${LTRAPI_MODULE_LIBS} m)
endif()
endif(LTRAPI_MODULE_USE_MATH)
Есть моменты, когда коды en_LTR_ERRORS присваиваются переменной другого типа t_flash_errs (возможно, это и важно)
(gcc это не обнаруживает)
ltr24api.c:688:33
flash_iface_ltr.c:222:12
По п.1 - разобрался. Да, так оно и есть.
2. Была произведена сборка ПО на одном из ноунейм ARM linux из исходников ltr_cross_reference. Если вас заинтересуют мелкие правки чтоб закомметить на bitbucket, могу на словах описать. (diff-файл не делал)
Под Windows ltrctl попробую собрать сам, если действительно будет актуально.
Здравствуйте!
Подскажите, пожалуйста, в чем может заключаться следующая проблема:
1. LTR Manager прекрасно видит как крейт, так и модуль в нем, когда в настройках крейта указан интерфейс крейта USB.
Но когда указывается TCP/IP(Ethernet) (с настроенным IP и маской подсети, шлюз, допустим, указан пустым), то виден только крейт,
но не видно модуля. ПК вместе с крейтом подключены к одной ЛС через обычный хаб.
2. При/после установки ПО последних версий (lcomp.exe, ltrd-setup.exe, ltrmanager_setup.exe, ltrdll.exe) утилита ltrctl не установлена.
(она желательна нам для общего единообразия в работе с другой ОС). Должна ли она устанавливаться в Windows. Об этом трудно судить из документации.
Спасибо.
Страницы 1
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2
Многоканальный телефон:
+7 (495) 785-95-25
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск