Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
2. По журналу похоже, что это не после полного удаления (что у C:\Program Files (x86)\L-Card\L Card Measurement Studio\bin\db\ на момент установки были файлы).
Если поставить LMS, пропустив ошибки, затем ее удалить и при удалении согласиться на полное удаление базы экспериментов (если будут ошибки - нажать пропустить), убедится, что вся папка установки пуста, и заново попробовать установить LMS, можете прислать также сообщения из деталей после этого? Запускаете установщик от имени Администратора при этом?
3. Да, опечатка, имел ввиду [mysqld.exe].
Также смущает, что у Вас в объявлении идет _pack_ = 1, хотя ltr24api.h используется выравнивание на 4, а не 1.
Также, чтобы проверить правильность описания структур в Phyton, сравните значение размера структуры TLTR24, полученное sizeof из вашей программы, и значение, которое будет в поле Size после вызова LTR24_Init()
Здравствуйте.
А какая ОС на каждом из ПК?
Если при этой ошибке прерывать установку и открыть "детали", то можете тут выложить последние строки из оттуда?
При прерванной установке файлы внутри <пусть установки LMS>/bin/db/bin есть файлы включая mysld.exe? Если его запустить вручную, будет какое-то сообщение или просто ничего не будет происходить?
В меню Windows "Управление компьютером" -> "Службы и приложения" -> "Службы" есть в этом случае служба LMSDbService? Какое состояние? Если попробовать правой кнопкой нажать и выбрать "Запустить"?
# переключаем модуль в тестовый режим
pLTR24.contents.TestMode = True
А в тестовый режим зачем переключаете? Тестовый режим для канала диф. входа это как раз режим измерения собственного нуля, тогда данные вполне объяснимы...
У Вас судя по всему какая-то очень старая версия исходников драйвера lcomp.
В упомянутой в предыдущем посте такого быть не должно...
RS485 на LTR43 можно использовать при написании своей программы с использованием штатной библиотеки ltr43api (функции описаны в https://www.lcard.ru/download/ltr43api.pdf).
В LMS в настоящее время работа с RS485 LTR43 не поддерживается. Также не совсем понятно, что имеется ввиду под поддержкой RS485 в законченном ПО, тут скорее может идти речь о поддержке конкретных устройств с интерфейсом RS485, подключаемых к LTR43.
Для чего Вы хотите использовать RS485? Что именно к нему подключаете?
Да, точно также, взяв файлы отсюда: https://www.lcard.ru/download/ltr_eu_8_16_fw2000.zip.
Но точно также запись прошивки можно делать только по USB
Добрый день.
Все коды идентификаторов модулей есть в перечислении _LTRNative.MODULETYPE, с ними по хорошему и нужно сравнивать, вставляя его значения как Net Property. Сами же эти числа являются по сути двухбайтовыми значениями, где младший и старший байт равны номеру модуля, т.е. их можно получить по формуле: n + 256*n, где n - номер модуля.
Да, в прошивке 2.0.0.0 есть проблема, что при разрыве соединения, если крейт не получил пакет закрытия, то у него соединение остается незакрытым и не может быть установлено новое соединение. Попробуйте обновить прошивку крейта на 3.0.0.13 (https://www.lcard.ru/download/ltreu-fw-3.0.0.13.zip). Для этого нужно подключить крейт по USB и в LTR Manager нажать правой кнопкой по крейту и выбрать соответствующее действие и указать файл (ltr030 - 8/16 местный, ltr031 - 2-местный)
А какая версия прошивки крейта у Вас используется (можно посмотреть в LTR Manager)?
Для синхронизации данных нескольких модулей можно использовать механизм синхрометок крейта. Для этого нужно использовать функции работы с крейтом из ltrapi (в LabView класс ltrcrate из ltrModulesNet), как описано в пункте 4.6 документа https://www.lcard.ru/download/ltrapi.pdf, а также для каждого модуля использовать вариант Recv, в котором помимо данных возвращаются счетчики меток tmark. Общая идея, что сперва Вы запускаете сбор со всех модулей (он будет в разное время за счет задержек передач команд запуска), после этого даете крейту команду генерации метки СТАРТ, а при приеме данных от модулей отбрасываете данные (кратно размеру кадра) до тех пор, пока счетчик меток старт в tmark не изменится. Таким способом вы привяжете момент начала данных от всех модулей к метке СТАРТ с точностью до периода дискретизации модуля.
Этот механизм можно использовать для всех модулей непрерывного сбора данных, но нельзя для LTR210 в режиме покадрового сбора. Но для LTR210 есть свои сигналы синхронизации, которые можно соединить и настроить работу в режиме ведомый-ведущие и получить синхронный сбор кадров. Если нужна синхронизация кадров LTR210 с данными других модулей, то можно использовать разъем синхронизации крейта LTR-EU. Можно либо настроить, чтобы крейт генерировал сигнал при метке СТАРТ на выходе DIGOUT1 или DIGOUT2 разъема синхронизации и его завести на синхровход модулей LTR210 и настроить их запуск от внешнего цифрового сигнала, либо реализовать в обратную строну, где ведущий LTR210 будет вырабатывать сигнал на выходе синхронизации и его завести на DIGIN1 или DIGIN2 разъема синхронизации крейта и настроить генерацию меток по сигналу на этом входе. В первом случае кадр в LTR210 будет собираться по команде генерации синхрометки крейта, а во втором наоборот, синхрометки будут генерироваться по сбору кадра в LTR210 по команде к LTR210. В любом случае метка будет привязана к моменту сбора кадров LTR210 и данные других модулей можно будет привязать к данным кадра LTR210.
Использование привязки данных к метке СТАРТ для LTR24 на LabView можно посмотреть в примере отсюда: https://www.lcard.ru/download/examples/ … _start.zip.
Пример использования класса ltrcrate в LabView на примере настройки выходов разъема синхронизации можно посмотреть в примере: https://www.lcard.ru/download/examples/ … ut-cfg.zip
Есть ли на этой системе инструменты сборки ПО (gcc)? Есть ли возможность собрать консольный пример для модуля https://gitlab.com/l-card/acq/devices/x … type=heads и протестировать, будет ли зависание, если его запускать?
Если взять пакет x502studio (это та же lqmeasstudio, просто в новых версиях сменила название) версии 1.3.2, то проявляется ли на ней? Если в настройках приложения отключать спектральную обработку и/или увеличить интервал обработки/уменьшить время блока обработки, то как-то это влияет на зависания?
Здравствуйте. А какая версия прошивки FPGA в модуле L-502 (отображается в студии)?
Сам модуль L-502 один и тот же в обоих случаях?
Под ОС Astra Linux Орел в качестве ПК выступает такой же моноблок или там другое железо?
Влияет ли настроенная частота ввода на зависания?
Здравствуйте.
По поводу точности, то нужно учитывать, что для любого способа, основанного на внутренней частоте процессора есть ошибка, связанная с неточностью значения самой этой частоты, от которой работает процессор. Для L-502 эта точность 50ppm или 0.005 % (т.е. для измерения времени секунды может быть ошибка до 50 мкс).
По поводу Вашего кода.
Во первых не совсем понятна инициализация таймера, *pTIMER0_CONFIG = 0x0003 - это режим работы EXT_CLK - подсчета импульсов внешнего сигнала, который должен подаваться на соответствующую ножку процессора (чего в схеме L-502 нет), значения pWIDTH и pPERIOD также не очень понял, и они устанавливаются когда *pTIMER0_CONFIG равен 0, т.е. таймер запрещен и эти изменения вообще могут быть неприменимы.
Если Вам нужен таймер, который генерирует прерывания раз в мс, то Вам нужно настроить режим PWM_OUT без использования собственно выходного сигнала PWM на ножке (OUT_DIS = 1), с постоянной (не однократной) генерацией сигнала (PERIOD_CNT = 1) и с разрешенной установкой бита прерывания в конце каждого периода (IRQ_ENA = 1). Таймер по умолчанию работает от частоты SCLK = 132.5 МГц, соответственно в регистр длительности периода, чтобы она была 1 мс, нужно записать значение 132500. Регистр WIDTH определяет длину активного значения импульса (duty cycle) для сигнала pwm и т.к. сам PWM сигнал Вы не используете, то его значение не важно, но на всякий случай лучше установить его в действительное значение, т.е. не менее 1, но меньше PERIOD.
Т.е. код инициализации таймера без разрешения обработчика прерывания таймера может выглядеть так:
*pTIMER0_CONFIG = PWM_OUT | PERIOD_CNT | IRQ_ENA | OUT_DIS;
*pTIMER0_PERIOD = 132500;
*pTIMER0_WIDTH = 1;
*pTIMER_STATUS = TIMIL0; /* сброс флага прерывания на случай, если он был установлен */
После конфигурации таймер необходимо также запустить через TIMER_ENABLE.
*pTIMER_ENABLE = TIMEN0;
В этом режиме можно проверить настройки таймера без разрешения обработчика путем обычного опроса (т.к. бит IRQ_ENA установлен, то таймер будет устанавливать флаг прерывания, который можно проверить и сбросить, но сам обработчик не будет вызываться, т.к. не разрешен в pSIC_IMASK1), периодически вызывая проверку:
if (*pTIMER_STATUS & TIMIL0) {
*pTIMER_STATUS = TIMIL0; /* сброс идет записью 1 */
/* увеличение счетчика мс */
}
Если все работает как надо (идет подсчет мс корректно), то долее можно разрешить уже обработчик.
Строка REGISTER_ISR(12, inc_time); регистрирует обработчик прерывания для прерывания IVG12. Через регистры IAR Вы делаете маппинг прерываний от периферии на прерывания контроллера (IVG7 - IVG15) (что необходимо, т.к. обработчиков под периферию всего 9, а источников намного больше). В макросе Pxx_IVG(n) значение n - это как раз номер IVG, а значение xx - Peripheral ID# (для TIMER0 - 32), т.е. правильный вызов макроса - P32_IVG(12). Во-вторых делать просто операцию "или" не совсем корректно, т.к. уже есть назначение по умолчанию при старте и поле может быть не 0 (и к слову для TIMER0 это как раз IVG12 и можно было бы ничего не писать), поэтому сперва значение этого поля в IAR4 нужно обнулить. Для этого я не нашел готовый макрос, поэтому в прошивке пишу через явную битовую маску:
*pSIC_IAR4 = (*pSIC_IAR4 & 0xFFFFFFF0) | P32_IVG(12);
Т.е. после настройки таймера и до его разрешения через pTIMER_ENABLE, нужно вставить:
*pSIC_IAR4 = (*pSIC_IAR4 & 0xFFFFFFF0) | P32_IVG(12);
REGISTER_ISR(12, inc_time);
*pSIC_IMASK1 |= IRQ_TIMER0;
В обработчике прерывания необходимо аналогично проверить флаг от таймера и сбросить его, после чего вызвать ssync(), чтобы флаг сбросился до выхода из обработчика и не попасть в обработчик второй раз:
ISR(inc_time) {
if (*pTIMER_STATUS & TIMIL0) {
*pTIMER_STATUS = TIMIL0; /* сброс идет записью 1 */
/* увеличение счетчика мс */
ssync()
}
}
Здравствуйте.
Поле F_base не предназначено для заполнения пользователем. Это результирующий параметр, вычисляемый библиотекой при вызове LTR51_Config на основе значений Fs и Base. Поэтому в классе C# он задан как доступный только на чтение. Вы же пытаетесь записать значение в данное свойство, на что и выдается соответствующая ошибка об отсутствии метода для установки значения.
Да, смена настроек поддерживается только через подключение по USB интерфейсу.
ltrd: Зависит: libc6 (>= 2.34) но 2.28-10deb10u2+ci202302271750+astra5 должен быть установлен
Это сообщение говорит о том, что библиотека собрана c libc версии 2.34, которая как раз в Ubunutu 21.10, а у Вас в системе стоит версии 2.28 (и от этой версии зависят другие пакеты и ее нельзя обновить). Версии libc (не считая номера патча) как правило не меняются в рамках одного дистрибутива, а только при переходе от одной версии дистрибутива к другой.
Нужно ставить из того дистрибутива, на котором основана Ваша версия Astra. И судя по версии "2.28-10deb10u2" из Вашего сообщения, она основана на Debian-10. Вот и ставьте пакеты из Debian-10, а не Ubuntu.
и еще в инструкции в разделе 7 для Debian подобных систем описана установка deb пакетов, но ни в одном из репозиториев нет deb пакетов, везде тарбол
.deb файлы лежат в папках архитектуры, для которой они предназначены. Например для Debian 10 для 64-битной архитектуры x64: https://download.opensuse.org/repositor … _10/arm64/
"liblcomp.so.1: cannot open shared object file: No Such file or directory"
Сообщение ровно то и означает, что не найден указанный файл библиотеки. Драйвер тут не причем. Он у Вас должен быть в стандартной папке (обычно /usr/lib), либо должен быть указан путь, откуда его брать одним из способов. Если Вы ставите из пакетов, он туда поставится автоматом. Если сами собирали, то установлен ли он у Вас и куда? Если делали через make install, то во время выполнения пишется папка, куда файлы скопированы. Проверьте, т.к. при ручной установке по умолчанию обычно используется директория с local, т.к. в основное дерево файлов по хорошему ставить нужно только через пакеты, чтобы не было конфликтов, и эта локальная директория может отсутствовать в путях, где ищутся библиотеки по умолчанию.
Для основанных на Debian дистрибутивов (как Astra) для atomic-ops должен стоять штатный пакет libatomic-ops-dev. Если ставить библиотеку из пакета, то эта зависимость уже прописана, если собирать вручную, то нужно поставить явно:
sudo apt install libatomic-ops-dev
После сборки библиотеки Вы как раз и получите .so файл.
Другой вопрос, что liblcomp написан на C++ с использованием виртуальных методов, и весь вопрос, насколько это можно напрямую использовать из C#. С обычными C функциями с этим проблем нет и в случае lcomp для Windows некоторыми клиентами для работы из C# использовалась "обертка" на C для lcomp (wlcomp), функции которой уже вызывались из C#.
Для сборки драйвера для make нужно указать цель в зависимости от варианта сборки.
Если будете просто устанавливать файлы модуля напрямую, то
make lcomp-drv
sudo make lcomp-drv-install
Если через систему dkms, которая управляет добавлением внешних модулей в ядро (должен стоять пакет dkms):
sudo make lcomp-dkms-install
Там строчки были только для ltramanger. ltrd и ltrapi - отдельные пакеты. Устанавливали его с помощью:
sudo apt install ltrd
а для библиотек соответственно:
sudo apt install libltrapi1-dev
А команда сама выполняется? Вроде устаревший метод должно быть просто предупреждением.
Но если уже вообще эту команду отключили, то можете попробовать вариант инструкции установки отсюда https://software.opensuse.org//download … ltrmanager:
echo 'deb http://download.opensuse.org/repositories/home:/l-card/xUbuntu_22.04/ /' | sudo tee /etc/apt/sources.list.d/home:l-card.list
curl -fsSL https://download.opensuse.org/repositories/home:l-card/xUbuntu_22.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/home_l-card.gpg > /dev/null
sudo apt update
sudo apt install ltrmanager
По поводу ключа, то там идет ссылка на репозиторий для Ubuntu 18.10, который уже не поддерживается, поэтому ссылка не действительна. Но если заменить 18.10 на более новую версию, то в остальном инструкция корректна.
Если используете Astra Linux, то у них на wiki есть таблица совместимости версий Astralinux с версиями Debian:
Common Edition: https://wiki.astralinux.ru/pages/viewpa … d=79168056
Special Edition: https://wiki.astralinux.ru/pages/viewpa … d=53646577
Для соответствия номеров и названий версий Debian можно посмотреть страницу релизов Debian: https://www.debian.org/releases.
Например, если Ваша версия Astra соответствует Debian Stretch, то это Debian 9.
И в этом случае в инструкции https://www.lcard.ru/download/lcard_lin … utions.pdf нужно указывать Debian_9.0 вместо xUnbuntu_18.10 (взятой там для примера).
То что указали, что ссылка не работает, спасибо, как дойдут руки, постараюсь обновить документ и заодно включить данную информацию о соответствии с Astra.
По поводу packages, то это эта директория идет как субмодуль, видимо у Вас скопировалось содержимое без него.
Для получения исходников с субмодулями можно из командной строки вызвать:
git clone --recurse-submodules https://gitlab.com/l-card/acq/devices/emodules/shared/lcomp/drivers/lcomp_driver_linux.git <директория для сохранения>
Автогенерируемые в gitlab архивы (доступные по Download) не включают суммодули, этот глюк (типичный для многих серверов систем контроля версий) к сожалению так и не поправили видимо...
Если у Вас один из поддерживаемых дистрибутивов (перечислены в далее указанном документе), то можно поставить готовые пакеты, как описано тут - https://www.lcard.ru/download/lcard_lin … utions.pdf. Для lcomp нужны пакеты lcomp-dkms (драйвер) и liblcomp1 (библиотека) + liblcomp1-dev / liblcomp1-devel (в зависимости от того, deb или rpm дистрибутив у Вас) (файлы для разработки своей программы).
Либо можно взять исходные коды с gitlab и собрать самостоятельно:
https://gitlab.com/l-card/acq/devices/e … iver_linux - драйвер
https://gitlab.com/l-card/acq/devices/e … mp_library - библиотека.
Для сборки понадобится использовать cmake для генерации makefile, далее уже обычным make (для драйвера отдельно цели lcomp-drv / lcomp-drv-install / lcomp-drv-clean для обычной сборки модуля или lcomp-dkms-install для сборки через dkms).
Да, действительно, драйвер работал корректно только для IrqStep кратного странице памяти (2048 отсчетов). Выложил обновленную версию пакета драйвера lcomp-dkms версии 1.58.5 (в библиотеке liblcomp изменения не требуются). Проверьте.
Выложил обновленную версию пакета драйвера lcomp-dkms версии 1.58.5, должна теперь собираться нормально (пробовал на 6.5.4). Проверьте.
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2
Многоканальный телефон:
+7 (495) 785-95-25
Факс: +7 (495) 785-95-14
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск