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

Форум

Вы не вошли.

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

#1 Техническая поддержка » Два ltr гейта на одной машине » 02.09.2024 09:07:54

alexko
Ответов: 0

Для новых задач сделан MTQTT гейт посылающий данные на топики, но одна из программ понимает только OPC теги (этот гейт то же есть)
Теоретически, могут ли два гейта работать на одном компьютере обращаясь к одному крейту подключенному к этому компьютеру?

#2 Re: Техническая поддержка » Linux Astra и LTR-EU-16-1 » 02.10.2023 15:06:01

alexko пишет:

Хочу сказать, что ltrmanager 1.5.5 на Linux Astra не позволяет переключаться между режимами USB и IP (у меня крейт LTR-EU-16-1). Для того чтобы переключиться мне приходится использовать  ltrmanager из Windows. Можно это проверить?

Выяснилось что переключение невозможно пока не подключен USB кабель (текущий режим был IP). После подключения и перезапуска крейта появляется двойник крейта со значком USB. Так что сорри наверно за тревогу.

#3 Re: Техническая поддержка » Linux Astra и LTR-EU-16-1 » 02.10.2023 15:00:30

Хочу сказать, что ltrmanager 1.5.5 на Linux Astra не позволяет переключаться между режимами USB и IP (у меня крейт LTR-EU-16-1). Для того чтобы переключиться мне приходится использовать  ltrmanager из Windows. Можно это проверить?

#4 Re: Техническая поддержка » Linux Astra и LTR-EU-16-1 » 12.07.2023 13:21:12

alexko пишет:

Правда, мне пришлось работать с IP интерфейсом - linux_ltrmanager не работает с USB интерфейсом. Мне пришлось запустить windows_ltrmanager и там переключить на приём по TCP/IP, после этого linux_ltr_manager заработал.

В общем и с USB интерфейсом работает - после того как модуль обнаружился в ltrmanager через IP я указал USB интерфейс и все заработало. Ваш пример https://gitlab.com/l-card/acq/devices/l … ecv/main.c
все откомпилировалось  и работает.

#5 Re: Техническая поддержка » Linux Astra и LTR-EU-16-1 » 12.07.2023 09:02:13

Правда, мне пришлось работать с IP интерфейсом - linux_ltrmanager не работает с USB интерфейсом. Мне пришлось запустить windows_ltrmanager и там переключить на приём по TCP/IP, после этого linux_ltr_manager заработал.

#6 Re: Техническая поддержка » Linux Astra и LTR-EU-16-1 » 12.07.2023 08:53:39

Алексей L Card пишет:

Здесь с 17.04.2014
Сообщений: 1,222
Удалять софт на Windows для этого не нужно, он на это не влияет.
В самой виртуальной машине по идее должен быть выбор, какие USB устройства виртуальная машина захватывает. Тогда они не будут видны в основной ОС, а будут только в виртуальной машине, пока не отключите захват.
Ну или можете просто отдельно поставить вторую ОС с выбором куда загружаться при старте, чтобы везде работать с крейтом напрямую.

Да, lcard на виртуальной астре работает и отключения драйверов в windows не требуется. По крайне мере у меня сейчас отлично работает ltrmanager и он показывает и крейт и все его модули.
Вторая OC (перегружаемые поочередно) неудобно - я собираюсь взять значительную часть софта своего OPC сервера и сделать MQTT сервер. Быстрый доступ к windows (прямо из астры) ускоряет процесс.

#7 Re: Техническая поддержка » Linux Astra и LTR-EU-16-1 » 11.07.2023 14:43:12

Кстати как вы думаете, если убрать драйверы и софт Lcard из Windows, то можно ли опрашивать по USB крейт из системы Linux Astra которая работает на этом же компьютере как виртуальная машине VMware? Иметь работающий виндовс было бы удобно для справочных целей и т.п.

#8 Re: Техническая поддержка » Linux Astra и LTR-EU-16-1 » 11.07.2023 11:45:32

Попробовал установить LCARD софт вручную без Synaptic - вроде все прошло без ругани. Главное что /etc/apt/sources.list
заполнил правильно.

sudo apt-get update
sudo apt-get install ltrd ltrmanager libltrapi1-dev

Буду пробовать что-то написать и скомпилировать.

#9 Re: Техническая поддержка » Linux Astra и LTR-EU-16-1 » 11.07.2023 10:58:29

AC> Из подключенного репозитория у Вас должны быть установлены пакеты
AC> ltrd и libltrapi1-dev (с последним должны автоматом поставится и
AC> все репозитории libltrapiXXapi1 как его зависимости).

Операционная система: Astra Linux 1.7_x86-64
Версия Qt: 5.15.2
Версия ядра: 5.4.0-110-generic (64-бита)
Процессоры: 4 ? Intel® Core™ i3-2100 CPU @ 3.10GHz

При попытке установить ltrd:armhf (из http://download.opensuse.org/repositori … Debian_10/ используя менеджер пакетов Synaptic): выдается сообщение

ltrd:armhf:
Зависит: libc6 (>=2.28) but it is not installable
Зависит: libdaemon0 (>=0.13) but it is not installable
Зависит: libusb-1.0-0 (>=2:1.0.9) but it is not installable
Зависит: libxml2 (>=2.7.4) but it is not installable

В системе установлены:
Libc6: 2.28-10+deb10u2+ci202302271750+astra5
libdaemon0: 0.14-7
libusb-1.0-0: 2:1.0.26-1
libxml2: 2.9.4+dfsg1-7+deb10u5+ci202304041547+astra1

В каком месте мне проверить?

#10 Re: Техническая поддержка » Linux Astra и LTR-EU-16-1 » 10.07.2023 15:45:47

Алексей L Card пишет:

для Astra подойдут из ближайшего Debian или Ubuntu (входит служба ltrd и библиотеки ltrapi, драйвера не нужны, т.к. для USB используется стандартная библиотека libusb - по необходимому софту см. https://www.lcard.ru/download/ltr_soft_ … arted.pdf).

Крейт LTR-EU-16-1 переход из Windows в Linux Astra.

Нельзя ли попросить уважаемый LCard выложить С++ исходник простого консольного приложения на C++, демонстрирующий работу с крейтами. Главное Хотелось бы сначала понять, что нужно чтобы заставить пример компилироваться, линковаться и работать. L-Card модуль для демо может быть любой, например LTR27.

PS:
Предполагается что программирование будет на Qtcreator.
Репозитарий http://download.opensuse.org/repositori … Debian_10/ установлен.

#11 Техническая поддержка » Linux Astra и LTR-EU-16-1 » 22.06.2022 13:52:34

alexko
Ответов: 13

Здравствуйте!
Хочется узнать можно ли работать с LTR-EU-16-1 крейтом из Linux Astra, есть ли драйверы и т.п.

#12 Re: Техническая поддержка » Нет синхронизации при опросе » 15.07.2020 14:59:06

Продолжение о совместной записи модулей LTR114 и LTR27 (проблема рассинхронизации и как её убрать)

Кратко напомню о чем речь:
В одном крейте стоят LTR27 и LTR114. Задача вроде тривиальная - сделать так, чтобы мой OPC сервер записывал бы полученные данные (частота 10 Гц) в файл. Оцифровывалась синусоида с частотой 1 Гц - сигнал подавался на все модули.

Как я выяснил главная проблема - в получении одинаковой временной маркировки получаемых данных как на LTR27, так и на LTR114. Мы допустим сделали нитки разных модулей и вызываем функцию LTRxx_Recv. Но эти функции работают по разному у разных модулей.

LTR27:
Что происходит во время LTR27_Recv при кадре в 100 миллисекунд? Я могу считать время только после вызова LTR27_Recv. Но внутри этой функции сначала идет оцифровка, потом пауза и только после я могу считать системное время для маркировки полученных данных. Но у LTR27 после паузы время отличается от времени оцифровки на порядка 45 миллисекунд (плюс минус - зависит от состояния windows).

LTR114:
У модуля LTR114 (с последовательной оцифровкой каналов) похожее происходит когда у него 1 логический канал, но если их много, то пауза между реальным событием и измерением времени будет много меньше чем на LTR27. Время измеренное после LTR114_Recv будет гораздо ближе к времени оцифровки последнего канала. Значит, мы можем получить времена остальных параметров в буфере вычитая из в времени последнего параметра длительность оцифровки одного канала умноженное на индекс канала относительно последнего канала.

При записие двух модулей результат - синусоиды одного сигнала записанные разными модулями (LTR114/LTR27) не совпадают на графике, LTR27 отстает в среднем на 45 миллисекунд, но временами и больше.

https://i.ibb.co/C1SpDN6/image.jpg

Нужно заметить, что если работают все одинаковые модули LTR27, то проблема много меньше. Просто ошибка одинакова для всех каналов.

После многих тестов, я понял, что есть только два выхода, чтобы оцифрованные сигналы с этих разных модулей маркировались бы правильно по времени. Первый - это когда LTRxx_Recv будет возвращать массив реальных времен для каждого считанного канала. Возможно это когда то реализуют в будущем.

Второй вариант реальный - у LTR27 нужно сократить паузы после оцифровки. Т.е. максимально приблизить замер времени после LTRxx_Recv к моменту оцифровки. Этого можно достигнуть увеличив частоту дискретизации минимум на порядок.

Иначе говоря, для записи с LTR27 с частотой 10 Гц я задаю опрос модулей LTR27 в 200 Герц. В настойках моего OPC сервера я указываю, что во время записи записывать только каждое 20-е измерение.

Если так же записывать и LTR114, то результат будут еще идеальнее. Испробовано для длинных сериях.

Результат - отсутствие расхождения кривых разных модулей - идеальная запись!

https://i.ibb.co/hH2mLKm/image.jpg

#13 Re: Техническая поддержка » Нет синхронизации при опросе » 25.03.2020 13:33:10

Бывает что LTR27_Recv возращает 0. Как это обрабатывать, что происходит с данными? Может быть как раз при этом и происходит недочитывание?

#14 Re: Техническая поддержка » Нет синхронизации при опросе » 10.03.2020 11:20:49

Проблема временной маркировки на большой частоте опроса хорошо решается путем увеличения интервала считывая времени из системы.

Буквально это делается так - у каждого тега (который на запись) создается большой буфер для значений которые будут записываются на диск. Временная маркировка буфера происходит только в момент его создания, т.е. редко.
Далее каждое новое значение канала сохраняется парой - значение и сколько времени прошло от предыдущего значения. Но это время не читается, а оно записывается в единицах _равных времени опроса кадра_.
В результате искажения по времени в случае большой частоты и микросекунд минимальны.

#15 Re: Техническая поддержка » Нет синхронизации при опросе » 26.02.2020 15:24:26

Можно еще спросить насчет недочитывания из буфера. Может ли недочитывание произойти у LTR27? Тогда при синхронном формировании времен значения LTR27 будут отставать от другого модуля. Вероятно такое я видел здесь
https://i.ibb.co/k4ZMLSZ/1x1-10-100-LTR114-LTR27.jpg

Может быть организовывать после LTR27_Recv проверочный цикл чтения, чтобы быть уверенным, что LTR27_Recv  считала все данные?

#16 Re: Техническая поддержка » Нет синхронизации при опросе » 26.02.2020 11:40:43

Как возможное объяснение я могу предложить это

Конструкция замера времени после считывания

   CoFileTimeNow( (FILETIME*)&timestamp_recbuf ); 
   FileTimeToLocalFileTime((FILETIME*)&timestamp_recbuf, (FILETIME*)&timestamp_recbuf);

Не может дать точное время на таких частотах (мы говорим про 250Гц опрос). Как я выяснил эта конструкция не выдает микросекунд при замере (только миллисекунды), хотя и оперирует с 64битным числом. А это значит, что по крайней мере в windows XP расхождение времени двух параметров из разных потоков при замере времени таким способом может достать максимум двух миллисекунд, а в благоприятном случае время может совпадать.

#17 Re: Техническая поддержка » Нет синхронизации при опросе » 25.02.2020 13:57:22

Алексей L Card пишет:

Ок. Отлично, что все разрешилось. Правда немного странно, что возможные задержки Windows не влияют на синхронизацию данных разных модулей

Вообще же как оказалось я рано обрадовался. Не зря вы спрашивали всегда ли наблюдаеется рассинхронизация. Т.е. в одной записи дейстительно кривые практически совпадают, а в другой записи может получится рассинхронизация аж до 2 мсек.
Сделал еще график для просмотра с учетом микросекунд. Вот к примеру сегодня я тестировал запись 250 Гц синусоиды 25 Гц LTR114 1 лог канал + LTR27 (пишется 1 канал) Как видим результаты разные.
https://i.ibb.co/qdkLrtf/25-250-LTR114-1ch-LTR27-1.jpg

#18 Re: Техническая поддержка » Нет синхронизации при опросе » 13.02.2020 15:18:55

Нашел в чем было дело. Я для теста сделал замер времени для LTR27 не после LTR27_Recv(), а до вызова (и забыл вернуть назад). Время работы функции LTR27_Recv и было неточностью. Упс.

#19 Re: Техническая поддержка » Нет синхронизации при опросе » 12.02.2020 11:23:53

Алексей L Card пишет:

А сдвиг этот фиксированный от запуска к запуску, если проводить несколько экспериментов?

Никаких различий по поводу смещения кривой LTR27 нет.

Алексей L Card пишет:

Значение frame_end_time_i64 Вы каким образом получаете?

frame_end_time_i64  получается после функции приема данных:

   __int64 frame_end_time_i64 = 0;                    //время конца измерения кадра
   CoFileTimeNow( (FILETIME*)&frame_end_time_i64 );   //здесь получим время конца кадра в котором size_Recv параметров
   FileTimeToLocalFileTime((FILETIME*)&frame_end_time_i64, (FILETIME*)&frame_end_time_i64); //получаем локальное время

Остальные настройки LTR114:

В функции ltr_mod114::MakeChannels()
{
...
 res = LTR114_Init(&ltr114);
 ltr114.FreqDivider = FreqDivider_ini; //делитель частоты дискр.
 ltr114.LChQnt = Kol_log_kanals_ini;   //количество логических каналов

....
}


В функции ltr_mod114::Start()
{
...
 ltr114.SyncMode = LTR114_SYNCMODE_INTERNAL; //внутренняя синхронизация
 ltr114.Interval = 0; //без межкадрового интервала (при LTR114_CORRECTION_MODE_INIT в LTR114_ProcessData())
 ltr114.SpecialFeatures = 0;

 //передаем настройки модулю
 res = LTR114_SetADC(&ltr114);

//distance это переменная класса ltr_mod114 - время от кадра до кадра в FILETIME единицах

 distance = (DWORD)(10000000. / LTR114_FREQ_CHANNEL(ltr114));  //В FILETIME (0.1 mksec)

//в данном случае получается distance == 40000 (4 мсек)
...
}

#20 Техническая поддержка » Нет синхронизации при опросе » 11.02.2020 14:27:44

alexko
Ответов: 14

LTR114 + LTR27 (эксперимент 2)

Привет LTR support!

Несинхронный прием с разных модулей.

Экспериментируя с модулями LTR114 + LTR27 на этот раз я наконец
сделал график который адекватно показывает сброшенные сериями данные, в том виде в котором они сбрасываются (без сампловой конверсии).

Генератор дает синусоиду частотой 25Гц которую я опрашиваю с частотй 250 Гц (сигнал одинаков для всех модулей).
Я использую LTR114 (16 лог. каналов) из которых записываются 1-й и 16-й и LTR27 c двумя мезонинами измеряющих милливольты (из 16 каналов пишется только 1-й).

Опрос модулей происходит единообразно в нитках модулей. У каждого канала сбрасывается время и значение.
Время каждого значения я получаю после фукции приема данных.
В случае LTR27 время одинаково для всех принятых каналов.
В случае LTR114 я измеряю время после приема 16 каналов и потом получаю время кажого канала путем вычитания времени опроса каждого канала умноженное на номер канала.
Т.е. (distance это время кадра)

  __int64 one_channel_time_in_frame_i64 = 0;
    one_channel_time_in_frame_i64 = distance / ltr114.LChQnt;  //время заполнения одного канала в кадре приема

 int size_Recv = LTR114_Recv(&ltr114, raw_data, NULL, ltr114.FrameLength, 1500);

   for(int i = 0, ir = size_Recv - 1; i < size_Recv; i++, ir--)
   {
    __int64 timestamp_recbuf_i64 = frame_end_time_i64 - one_channel_time_in_frame_i64 * ir;
    ...
   }

И вот что получается:
https://wmpics.pics/di-M1W0.jpg

Т.е. не смотря на то, что частоты опроса равны, наблюдается рассинхронизация каналов из разных модулей. Время рассинхронизации равно времени дискретизации (т.е. 4 мсек). Почему это может происходить?

Данные в текстовом виде
https://drive.google.com/open?id=1Vvwn1 … RG7RubBHZr

#21 Re: Техническая поддержка » Временной порядок опроса в LTR114 » 09.01.2020 17:00:01

Касаемо другого модуля LTR11 - я так понимаю, что прием значений в LTR11 также последовательный и определение времени каждого значения в принятом буфере (после LTR_Recv()) будет также как это делается в LTR114 (в этом треде). Т.е. определяем время после LTR_Recv(), и зная число значений в буфере вычисляем время для каждого значения, путем вычитания времени на каждый канал. Я правильно понимаю, что большой разницы нет?

#22 Re: Техническая поддержка » Временной порядок опроса в LTR114 » 10.12.2019 15:58:48

Всё, разложил и разобрался, сделал правильное формирование времени блока тега (после LTR114_Recv()) Мне также помог случай, когда падение у меандра совпало с моментом измерения первого канала на LTR114 1Гц. Стало особенно ясно как последовательно измеряются каналы на LTR114 при низкой частоте опроса. Максимальное расхождение с опросом LTR27 10Гц не может превышать 1 секунду, что и было достигнуто.
https://wmpics.pics/di-6HCU.jpg

#23 Re: Техническая поддержка » Временной порядок опроса в LTR114 » 05.12.2019 13:01:18

Уточните пожалуйста бестолковому еще раз smile)

Пусть LTR114 опрашивает 2 канала с частотой 1 Гц

Я измеряю время перед вызовом LTR114_Recv():

timestamp = get_time()

Затем вызываю функцию опроса

int size_Recv = LTR114_Recv(&ltr114, raw_data, NULL, ltr114.FrameLength, 1500);

В буфер от LTR114 последовательно пришло два значения.

Время первого значения = timestamp
или
Время первого значения = timestamp + Время кадра / число каналов?  (т.е +0.5 сек)

#24 Re: Техническая поддержка » Временной порядок опроса в LTR114 » 03.12.2019 14:27:32

Алексей L Card пишет:

Для LTR27 измерения со всех каналов выполняются одновременно, в нем нет коммутации каналов.

А как же тогда заполняются метки времени (массив tmark) при вызове LTR27_Recv()? Ведь каждая метка соответстует элементу принятого массива?

#25 Re: Техническая поддержка » Временной порядок опроса в LTR114 » 03.12.2019 12:53:51

Можно также у Вас также уточнить, как по времени модуль LTR27 выдает данные с его восьми мезонинов на которых стоят H27T?
В буфере данных каналы  идут в порядке 1,2 Nмезонина и т.д, но как идет опрос по времени? Имеют ли все каналы на мезонинах одно время оцифровки или также как и в LTR114 каждый канал имеет свой временной 1 слот?
Вызов такой:
    int size_Recv = LTR27_Recv(&ltr27, buf, NULL, 16, 1000);

Т.е. в случае опроса 10 Гц чтобы получить время второго канала нужно прибавитьо  0.2 сек ко времени перед вызовом LTR27_Recv?

Контакты

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

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

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

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